Inspectieresultaten inlezen en weergeven

Filteren

Voor het inlezen van inspectieresultaten is het wenselijk om de invoerdata te kunnen filteren. In sommige gevallen zal dit al in de data adapter gebeuren. Voor het filteren zijn drie opties te configureren:

  • query: SQL-achtige query om het DataFrame te filteren, zie ook pandas.DataFrame.query;
  • drop_columns: Lijst van de te verwijderen kolommen;
  • keep_columns: Lijst van de te behouden kolommen.

Als de gebruiker meerdere opties configureert, zal deze in bovenstaande volgorde achtereenvolgens worden toegepast.

GlobalVariables:
    rootdir: "data_sets"
    Filter:
        query: "measurement_location_id == 1"

DataAdapter:
    default_options:
        csv:
            sep: ","
    inspectie_resultaten:
        type: csv
        path: "resultaten.csv"
    inspectie_resultaten_filter:
        type: csv
        path: "filter_resultaten.csv"
        index: False
GlobalVariables:
    rootdir: "data_sets"
    Filter:
        keep_columns:
            - "measurement_location_id"
            - "measurement_location_code"
...
GlobalVariables:
    rootdir: "data_sets"
    Filter:
        drop_columns:
            - "unwanted_columns"
...
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.inspections import Filter

config = Config(config_path="config.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
filter = Filter(data_adapter=data_adapter)
filter.run(
    input="inspectie_resultaten",
    output="inspectie_resultaten_filter",
)

Classificeren van inspectieresultaten

Inspectieresultaten zijn te classificeren afhankelijk van eigenschappen in de tabel. Ook is het mogelijk om op basis van deze eigenschappen een bepaalde opmaak te tonen. Bijvoorbeeld een opmaak voor het element van de waterkering dat is geïnspecteerd (grasbekleding, steenbekleding, asfaltbekleding) of de toegekende prioriteit (score 1, 2, 3 etc) een kleur of lijndikte aan te geven. Hiervoor is een laag met resultaten nodig en een definitie van de klassegrenzen voor de te geclassificeren data, inclusief de definitie van de bijbehorende opmaak. De resultaten bevatten een geografische laag of een platte teksttabel met geometrie of x,y-coördinaten. De geografische informatie wordt altijd omgezet naar WGS84 om ondersteund te worden in de viewer. De classificatie wordt gedaan op basis van de kolom ‘classify_column’ opgegeven in de GlobalVariables. Deze kolom wordt vergeleken met de waardes in de legenda en vervolgens wordt de opmaak uit de legenda overgenomen. De waardes op basis waarvan de legenda wordt bepaald kan bestaan uit getallen of tekst. Bij tekst wordt de ‘lower_boundary’ kolom gebruikt. De viewer verwacht een heel aantal kolommen, als deze niet worden opgegeven neemt de toolbox standaardwaardes over (get_possible_styling()). Deze standaardswaardes kunnen ook aangepast worden door de gebruiker.

GlobalVariables:
    rootdir: "data_sets"
    ...
    ClassifyInspections:
        classify_column: "prioriteit"

DataAdapter:
    default_options:
        csv:
            sep: ","
    styling_example:
        type: csv
        path: "styling_example.csv"
    inspectie_resultaten_filter:
        type: csv
        path: "inspectie_resultaten_filter.csv"
        index: False
    classify_resultaten:
        type: shape
        path: "classify_resultaten.geojson"
        index: False
    legenda:
        type: csv
        path: "legenda.csv"
GlobalVariables:
    rootdir: "data_sets"
    ...
    ClassifyInspections:
        classify_column: "opmerkingen"
        match_text_on: "contains"
        # kan zijn: contains, equals, startswith, endswith
...
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.inspections import Filter

config = Config(config_path="config.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
classify_inspections_styling = ClassifyInspections(data_adapter=data_adapter)
classify_inspections_styling.run(
    input=["filter_resultaten", "styling_example"], output=["classify_resultaten", "legenda"]
)

Standaardopmaak

Daarnaast kan de functie ook gebruikt worden om een standaardopmaak toe te kennen aan een kaartlaag. Hierdoor wordt de viewer gebruiksvriendelijker. Het invoerbestand wordt aangevuld met het benodigde aantal kolommen voor de opmaak en bijbehorende waardes. Om de standaardopmaak aan een kaartlaag-tabel toe te kennen, kan de volgende configuratie gebruikt worden:

GlobalVariables:
    rootdir: "data_sets"

DataAdapter:
    default_options:
        csv:
            sep: ","
    kaartlaag:
        type: csv
        path: "kaartlaag.csv"
    kaartlaag_met_opmaak:
        type: csv
        path: "kaartlaag_met_opmaak.csv"
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.inspections import Filter

config = Config(config_path="config.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
classify_inspections_styling = ClassifyInspections(data_adapter=data_adapter)
classify_inspections_styling.run(
    input=["kaartlaag"], output=["kaartlaag_met_opmaak"]
)

Inspectieresultaten en de viewer

De kaartlagen van inspectieresultaten zijn in de viewer weer te geven. Naast de kaartlaag die in de Toolbox Continu Inzicht is geclassificeerd, kan ook een eigen WMS-kaartlaag worden gebruikt. Voor kaartlagen die relatief klein zijn, kan alle informatie in één databaseveld gestopt gedefinieerd. Bij grotere kaartlagen is het aan te raden om een nieuwe tabel te maken, waar vervolgens naar verwezen kan worden. Voor deze drie opties zal een voorbeeld worden weergegeven. De kolommen group_name, layer_name en layer_visible kunnen gebruik worden om de groepen, namen van kaartlaag en de zichtbaarheid in de viewer te configureren. De layer_type moet voor ‘geojson’, ‘wms’ en ‘table’ worden ingesteld.

Kleine kaartlaag in de viewer

Om de verschillende databronnen te combineren tot één tabel kan de functie InspectionsToDatabase gebruikt worden. De input hiervoor zijn de inspectieresultaten, opmaak en kaartlagen. layers is een tabel waarin de gegevens over de verschillende kaartlagen staat beschreven. Als deze niet wordt opgegeven, wordt een standaardtabel gebruikt. De inspectieresultaten wordt toegevoegd aan de tabel layers. Indien de tabel layers meerdere rijen bevat, kan rij-index worden aangepast met index. Het maximum aantal inspectieresultaten kan aangepast worden met max_rows. Standaard is dit 10.

GlobalVariables:
    rootdir: "data_sets"
    ...
    InspectionsToDatabase:
        index: 0
        max_rows: 10

DataAdapter:
    default_options:
        csv:
            sep: ","
    classify_resultaten:
        type: shape
        path: "hidden_classify_resultaten.geojson"
        index: False
    legenda:
        type: csv
        path: "hidden_legend.csv"
        index: False
    layers:
        type: csv
        path: "layers.csv"
    to_ci_database:
        type: postgresql_database
        schema: continuinzicht_demo_realtime
        database: "continuinzicht"
        table: layers
        if_exists: append
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.inspections import InspectionsToDatabase

config = Config(config_path="config.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
inspections_to_database = InspectionsToDatabase(data_adapter=data_adapter)
inspections_to_database.run(
    input=["classify_resultaten", "legenda", "layers"],
    output="to_ci_database",
)

WMS lagen in de viewer

De definitie voor WMS-lagen is simpeler. Hiervoor is alleen een url (layer_wms_url) nodig. In sommige gevallen is ook de layer_wms_layer, layer_wms_style en layer_wms_legend_url nodig om voldoende informatie aan de viewer te geven. Dit is een voorbeeld waarbij de data-adapter gebruikt kan worden om de database te vullen.

GlobalVariables:
    rootdir: "data_sets"
    ...

DataAdapter:
    default_options:
        csv:
            sep: ","
    layers:
        type: csv
        path: "layers.csv"
    to_ci_database:
        type: postgresql_database
        schema: continuinzicht_demo_realtime
        database: "continuinzicht"
        table: layers
        if_exists: append
from toolbox_continu_inzicht import Config, DataAdapter

config = Config(config_path="config.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
layer_table = data_adapter.input('layers')
data_adapter.output('to_ci_database', layer_table)

Grote tabel in de viewer

Om grote kaartlagen in de viewer te tonen, is het advies om dit via een losse tabel in database te doen. Deze tabel kan dan gekoppeld worden aan de viewer op dezelfde manier als een WMS-laag via de tabel layers.