Ik ben op zoek naar een bestand (download) dat ik kan gebruiken om de buitengrens van Nederland, waarmee ik de landsgrenzen en de kustlijn bedoel, weer te geven als omlijning van een plot.
Op dit moment gebruik ik een unary union van de bestuurlijke grenzen, d.w.z. de buitengrens van alle gemeentes samen. Dit werkt prima voor de landsgrenzen, maar verschillende wateren (eerste paar mijl van de Noordzee, gehele Waddenzee/IJsselmeer/Markermeer) worden ook als land weergegeven. Voorbeeld, de zwarte lijn:
Het gaat hier om landbouw dus ik zou graag duidelijk maken dat bijvoorbeeld de Waddenzee water is. Hier een voorbeeld van waar ik naar op zoek ben (dit voorbeeld is niet beschikbaar als geodata, alleen als afbeelding, en is ook niet 100% nauwkeurig volgens mij): https://nl.pinterest.com/pin/70087337925966268/
Ik heb natuurlijk rondgekeken in de rest van de datasets en ook op dit forum, maar niemand was op zoek naar precies hetzelfde als ik.
Hallo Burggraaf.
Ik weet niet of er een bestand met de landsgrenzen zonder water bestaat. Maar zo wel dan zal er vast iemand mij corrigeren.
Mijn suggestie is om de zeegebieden van je bestuurlijke grens af te halen. In theorie zul je dan land overhouden. Met een beetje geluk wijken de buitengrenzen niet al te veel van elkaar af anders heb je flink wat handwerk vrees ik. Of misschien is het een optie om de zeegebieden over je landsgrens te leggen en blauw in te kleuren.
De zeegebieden kun je op pdok vinden. https://www.pdok.nl/ogc-webservices/-/article/zeegebieden
Misschien helpt de Unclos (united nations coastline of the sea) je in de richting?
Ik zit op mijn mobiel dus kan zo snel geen downloadlink vinden.
Ik herinner me vaag iets van tijdens de opbouw van de BAG, dat we woonplaats grenzen aan die unclos moesten snappen.
Maar ik weet niet zeker of de som van woonplaatsen de bestuurlijke (gemeente) grenzen vormen.
De Landsgrens uit Bestuurlijke Grenzen is opgebouwd uit de Provincie, Gemeenten en Woonplaatsen. En die sluiten allemaal verdacht netjes aan op de UNCLOS lijn. Dat lijkt erg op de zwarte lijn op je plaatje. Dit bericht van de Basisregistratie Ondergrond geeft ook de UNCLOS lijn aan:
Wat ik dan zou doen is de Water-objecten uit Top10NL en/of BGT nemen en die van de UNCLOS lijn aftrekken. Als het goed is houd je dan de echte land-landsgrenzen over.
Al weet ik niet precies hoe de kustgemeenten zijn omgegaan met de grens tussen Strand en Zee.
instant update:
balen. De BGT-beheerders hanteren ook de UNCLOS lijn als scheidslijn zand(land) en zee.
Van rechts naar links:
geel is duidelijk echt strand/zand.
Dan een stukje gearceerd. Lijkt âbetwist gebiedâ, de eb-vloed zone of iets dergelijks.
Dan blauw wat echt âaltijdâ onder water staat.
Verder naar links, van het plaatje af, is de UNCLOS lijn.
In QGIS kom ik ook iets tegen over Coastline en Shoreline.
Helaas zijn het allemaal WMSâen dus niet te bewerken. Maar wellicht lukt het je om de onderliggende bron als WFS te achterhalen of als shapefile/geopackage te downloaden. In elk geval weet je wat je moet zoeken.
Nu nog een beetje finetunen welke wateren er wel en niet in moeten.
Mocht iemand anders deze draad lezen en hetzelfde willen doen, mijn stappen waren:
Uit de TOP10NL-data het bestand âregistratiefgebiedâ gebruiken om de bestuursgrenzen te krijgen.
Uit de TOP10NL-data het bestand âwaterdeelâ gebruiken om de zee (watertypes âzeeâ, âdroogvallendâ, âdroogvallend (LAT)â) en binnenwateren (watertype âmeer, plasâ) te krijgen.
De polygonen voor de zee samenvoegen.
De polygonen voor de meren/plassen groter dan 5 km² selecteren (n.b. sommige meren zoals het IJsselmeer zijn opgesplitst in meerdere polygonen) en samenvoegen.
De zee en binnenwateren van de bestuurskaart aftrekken.
In Python, met GeoPandas:
"""
Generate a plottable outer border for the Netherlands: coastline + BE border + DE border.
"""
from pathlib import Path
import geopandas as gpd
gpd.options.io_engine = "pyogrio"
CRS_AMERSFOORT = "EPSG:28992"
data_dir = Path("data/top10nl-2023")
# Remove GFS files if they exist - for some reason, these mess with MultiPolygons
gfs_files = data_dir.glob("*.gfs")
for gfs in gfs_files:
gfs.unlink() # Deletes the file
print(f"Deleted GFS file: {gfs}")
# Load the raw data
country_row = slice(2, 3) # Equivalent to [2:3]
country = gpd.read_file(data_dir/"top10nl_registratiefgebied.gml", rows=country_row)
print("Loaded land data")
water = gpd.read_file(data_dir/"top10nl_waterdeel.gml", columns=["gml_id", "lokaalID", "typeWater", "naamOfficieel", "geometry"])
print("Loaded water data")
# Select useful elements
country = country.iloc[0].geometry
sea = water.loc[water["typeWater"].isin(["zee", "droogvallend", "droogvallend (LAT)"])].unary_union
# Sort inland waters by size and select the biggest ones
inlandwaters = water.loc[water["typeWater"] == "meer, plas"]
inlandwaters["surface_area"] = inlandwaters.area
inlandwaters.sort_values("surface_area", inplace=True, ascending=False)
inlandwaters_big = inlandwaters.loc[inlandwaters["surface_area"] >= 5e6].unary_union # >5 km²
# Subtract water areas
land = country - sea - inlandwaters_big
# Convert to a GeoSeries and save to file
land_series = gpd.GeoSeries(land, crs=CRS_AMERSFOORT)
land_series.to_file("NL_borders.geojson", driver="GeoJSON")
Het resultaat is een GeoJSON van ~14 MB. Als Pastebin het weer doet, zal ik die hier ook nog delen, mocht iemand er wat aan hebben.
Pyogrio kende ik nog niet, ga ik zeker mijn voordeel mee doen
De CRS_AMERSFOORT variabele zou ik wellicht aanpassen naar iets als CRS_PROJECT. Stel dat je dit script hergebruikt met een heel ander CRS dan klopt het stukje _AMERSFOORT niet meer.
grote rivieren
Heb je overwogen âde grote rivierenâ ook uit te sluiten van de kaart? Je kiest er voor wel de wateren rondom Flevoland, de Ooster- en Westerschelde uit te sluiten met een zwart lijntje. Maar de IJssel, Waal, Rijn, Lek en Maas rivieren hebben alles bij elkaar misschien ook een oppervlakte groter dan 5 km²? Gelden die dan niet ook als âinlandwaters_bigâ?
In de kaart zie je de rivierenlopen immers ook wel een beetje terug in de witte stroken.