from pathlib import Path
from toolbox_continu_inzicht.base.config import Config
from toolbox_continu_inzicht.base.data_adapter import DataAdapter
path = Path.cwd() / "data_sets"
config = Config(config_path=path / "example_inspection.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
data_adapter.input("inspections_results")
0 |
0 |
0 |
5.533930 |
52.596911 |
foutje |
2-4-2025 |
09:08 |
Zuiderzeeland |
1 |
1 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
Zuiderzeeland |
2 |
2 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
Zuiderzeeland |
3 |
3 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
Zuiderzeeland |
Filter resultaten uit de input tabel:
GlobalVariables:
...
Filter:
query: "prioriteit > 0"
drop_columns:
- "waterschap"
- "location_id"
from toolbox_continu_inzicht.inspections.filter import Filter
filter = Filter(data_adapter=data_adapter)
filter.run(input="inspections_results", output="filter_resultaten")
1 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
2 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
3 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
De gefilterde tabel kunnen we vervolgens classificeren
Als we geen opmaak informatie meegeven in de input wordt de standaard opmaak toegepast
from toolbox_continu_inzicht.inspections.inspections import ClassifyInspections
classify_inspections = ClassifyInspections(data_adapter=data_adapter)
classify_inspections.run(input="filter_resultaten", output="classify_resultaten")
classify_inspections.df_out
0 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
POINT (5.4516 52.5407) |
CircleMarker |
NaN |
#9e9e9e |
10.0 |
3.0 |
1.0 |
0.2 |
#9e9e9e |
1 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
POINT (5.4076 52.49764) |
CircleMarker |
NaN |
#9e9e9e |
10.0 |
3.0 |
1.0 |
0.2 |
#9e9e9e |
2 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
POINT (5.61624 52.60279) |
CircleMarker |
NaN |
#9e9e9e |
10.0 |
3.0 |
1.0 |
0.2 |
#9e9e9e |
Als we wel styling mee geven wordt dit toegepast
data_adapter.input("styling_example")
0 |
2 |
1 |
NaN |
#a9070f |
0.9 |
1.1 |
1 |
3 |
2 |
NaN |
#07a9a1 |
1.9 |
2.1 |
2 |
4 |
3 |
NaN |
#0760a9 |
2.9 |
3.1 |
3 |
4 |
4 |
NaN |
#5007a9 |
3.9 |
4.1 |
In de config moeten we alleen de kolom opgeven waarop geclassificeerd wordt.
GlobalVariables:
...
ClassifyInspections:
classify_column: "prioriteit"
classify_inspections_styling = ClassifyInspections(data_adapter=data_adapter)
classify_inspections_styling.run(
input=["filter_resultaten", "styling_example"], output="classify_resultaten"
)
classify_inspections_styling.df_out
0 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
POINT (5.4516 52.5407) |
CircleMarker |
#a9070f |
#9e9e9e |
10.0 |
3.0 |
1.0 |
NaN |
0.2 |
1 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
POINT (5.4076 52.49764) |
CircleMarker |
#0760a9 |
#9e9e9e |
10.0 |
3.0 |
1.0 |
NaN |
0.2 |
2 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
POINT (5.61624 52.60279) |
CircleMarker |
#9e9e9e |
#9e9e9e |
10.0 |
3.0 |
1.0 |
NaN |
0.2 |
Stel we willen naast color
ook fillColor
toevoegen en een Marker met symbool in plaats van rondje, dan zetten we deze kolom ook in de opmaak tabel
data_adapter.input("more_styling_example")
0 |
2 |
1 |
NaN |
#a9070f |
#a9070f |
Marker |
0.9 |
1.1 |
1 |
3 |
2 |
NaN |
#07a9a1 |
#07a9a1 |
Marker |
1.9 |
2.1 |
2 |
4 |
3 |
NaN |
#0760a9 |
#0760a9 |
Marker |
2.9 |
3.1 |
3 |
5 |
4 |
NaN |
#5007a9 |
#5007a9 |
Marker |
3.9 |
4.1 |
classify_inspections_more_styling = ClassifyInspections(data_adapter=data_adapter)
classify_inspections_more_styling.run(
input=["filter_resultaten", "more_styling_example"], output="classify_resultaten"
)
En dan zien we dat fillColor nu ook geclassificeerd is:
data_adapter.input("inspections_results")
0 |
0 |
0 |
5.533930 |
52.596911 |
foutje |
2-4-2025 |
09:08 |
Zuiderzeeland |
1 |
1 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
Zuiderzeeland |
2 |
2 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
Zuiderzeeland |
3 |
3 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
Zuiderzeeland |
classify_inspections_more_styling.df_out
0 |
1 |
5.451603 |
52.540697 |
scheurvorming |
28-3-2025 |
15:48 |
POINT (5.4516 52.5407) |
Marker |
#a9070f |
#a9070f |
1.0 |
1 |
3 |
5.407599 |
52.497642 |
opschot |
28-3-2025 |
15:50 |
POINT (5.4076 52.49764) |
Marker |
#0760a9 |
#0760a9 |
1.0 |
2 |
11 |
5.616243 |
52.602794 |
beginnende scheurvorming |
31-3-2025 |
09:02 |
POINT (5.61624 52.60279) |
Marker |
#9e9e9e |
#9e9e9e |
1.0 |
Dit is al een geo object wat we hier kunnen tonen
ax = classify_inspections_more_styling.df_out.plot()
gpd.read_file(path / "provincie_flevoland.geojson").plot(
ax=ax, color="white", edgecolor="black", zorder=-1
)
Voor de viewer is een legenda tabel ook nuttig, deze kan als extra output worden opgegeven
classify_inspections_more_styling = ClassifyInspections(data_adapter=data_adapter)
classify_inspections_more_styling.run(
input=["filter_resultaten", "more_styling_example"],
output=["classify_resultaten", "legenda"],
)
classify_inspections_more_styling.df_legend_out
0 |
2 |
1 |
NaN |
#a9070f |
#a9070f |
Marker |
0.9 |
1.1 |
1.0 |
1 |
3 |
2 |
NaN |
#07a9a1 |
#07a9a1 |
Marker |
1.9 |
2.1 |
NaN |
2 |
4 |
3 |
NaN |
#0760a9 |
#0760a9 |
Marker |
2.9 |
3.1 |
NaN |
3 |
5 |
4 |
NaN |
#5007a9 |
#5007a9 |
Marker |
3.9 |
4.1 |
NaN |
Vervolgens kan de output van de inspecties klaar gezet worden voor de database
from toolbox_continu_inzicht.inspections.inspections import InspectionsToDatabase
inspections_to_database = InspectionsToDatabase(data_adapter=data_adapter)
inspections_to_database.run(
input=["classify_resultaten", "legenda"],
output="example_to_database",
)
Skipping field tijd: unsupported OGR type: 10
inspections_to_database.df_out
0 |
Extra Kaartlagen |
Inspectieresultaten |
true |
geojson |
{"type": "FeatureCollection", "features": [{"i... |
[{"id": 2, "name": 1, "description": "", "colo... |
Als we niks op geven in de als layers
wordt er automatisch een aantal standaard opties overgenomen
inspections_to_database.df_in_layers
0 |
Extra Kaartlagen |
Inspectieresultaten |
true |
geojson |
Deze kan ook uitgebreider
data_adapter.input("layers")
0 |
Extra Kaartlagen |
Geojson met data |
True |
geojson |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
1 |
Extra Kaartlagen |
WMS test |
True |
wms |
NaN |
https://geo.hkvservices.nl/geoserver/wms |
Waterdiepte |
liwo_waterdiepte_band1 |
NaN |
NaN |
NaN |
2 |
Extra Kaartlagen |
table test |
True |
table |
areas |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
GlobalVariables:
...
InspectionsToDatabase:
index: 2
inspections_to_database = InspectionsToDatabase(data_adapter=data_adapter)
inspections_to_database.run(
input=["classify_resultaten", "legenda", "layers"],
output="example_to_database",
)
Skipping field tijd: unsupported OGR type: 10
inspections_to_database.df_out
0 |
Extra Kaartlagen |
Geojson met data |
True |
geojson |
NaN |
NaN |
NaN |
NaN |
NaN |
{"type": "FeatureCollection", "features": [{"i... |
[{"id": 2, "name": 1, "description": "", "colo... |
1 |
Extra Kaartlagen |
WMS test |
True |
wms |
NaN |
https://geo.hkvservices.nl/geoserver/wms |
Waterdiepte |
liwo_waterdiepte_band1 |
NaN |
|
|
2 |
Extra Kaartlagen |
table test |
True |
table |
areas |
NaN |
NaN |
NaN |
NaN |
|
|
Tot nu toe was alles lokaal naar csv, maar dit kan juist naar de database
path = Path.cwd() / "data_sets"
config = Config(config_path=path / "example_inspection_db.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
inspections_to_database.df_in_layers
0 |
Extra Kaartlagen |
Geojson met data |
True |
geojson |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
1 |
Extra Kaartlagen |
WMS test |
True |
wms |
NaN |
https://geo.hkvservices.nl/geoserver/wms |
Waterdiepte |
liwo_waterdiepte_band1 |
NaN |
NaN |
NaN |
2 |
Extra Kaartlagen |
table test |
True |
table |
areas |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
Omdat database interactie op GitHub niet mogelijk wordt de onderstaande cell niet uitgevoerd, lokaal kan dit uiteraard wel
# inspections_to_database = InspectionsToDatabase(data_adapter=data_adapter)
# inspections_to_database.run(
# input=["classify_resultaten", "legenda", "layers"],
# output="to_ci_database",
# )