Goedemiddag,
Ik wil iets met jullie delen:
In de AHN Viewer zit leuke functionaliteit om een snelle hoogteanalyse voor een vlak uit te voeren. Je tekent een polygoon op de kaart, en de AHN Viewer toont een aantal waarden: de maximale, de minimale en de gemiddelde hoogte, en de mediaan en de deviatie, in meters ten opzichte van NAP.
De geometrie van het vlak dat je getekend hebt wordt opgeslagen in de URL (in GeoJSON-formaat) en je kunt de analyse dus ook delen met anderen via deze URL. Zie bijvoorbeeld deze hoogteanalyse van een perceel naast het GeoFort.
Maar je moet dus zelf de polygoon tekenen… En wat nu als je de geometrie van het perceel al hebt, zou je deze dan kunnen uploaden? Volgens mij kan dat niet, toch?
Oplossing
Met onderstaand scriptje kun je vanuit QGIS de geometrie van een geselecteerd vlak naar GeoJSON exporteren (met de QgsJsonExporter) en op basis van deze GeoJSON kun je vervolgens de URL samenstellen om de analyse in de AHN Viewer uit te voeren.
Hieronder - zie de schermafdrukken - proberen we het met een perceel uit de kadastrale kaart, Perceel Helvoirt (HVT02) A 2208 met een oppervlakte van 82 ha 52 a 26 ca. Let op: voor dit script is niet zozeer de oppervlakte van het perceel, als wel de complexiteit van de geometrie van belang. Het aantal nodes bepaalt immers de lengte van de GeoJSON-string, en daarmee van de URL.
Dit Helvoirtse perceel levert een URL op met een lengte van 3.953 karakters (!!), en dat is OK voor de AHN Viewer: zie hier het resultaat.
(Ik had nog een ander perceel gevonden met een complexe geometrie, Perceel Brakel (BKL08) L 25, en dat leverde een URL op van 11.443 karakters, maar toen zei de AHN Viewer: 414 Request-URI Too Large
).
Anyways, over het algemeen zullen de URLs die dit scriptje genereerd een stuk korter zijn.
Doe er je voordeel mee.
Op- en aanmerkingen, verbetersuggesties en andere feedback zijn welkom.
Groet,
Egge-Jan
import json
import urllib.parse
import webbrowser
# Haal één van de geselecteerde features van de actieve laag op, en exporteer deze naar GeoJSON
# Note that geometries will be automatically reprojected to WGS84 to match GeoJSON spec if either the source vector layer or source CRS is set.
layer = qgis.utils.iface.activeLayer()
exp = QgsJsonExporter(layer)
exp.setAttributes([1])
selected_features = layer.selectedFeatures()
if len(selected_features) == 0:
print("Selecteer een record op de actieve laag")
else:
ft = exp.exportFeature(selected_features[0])
# print(ft)
# Haal de coördinaten van de centroide van het vlak op, in WGS84
# Transform from RD (EPSG:28992) to WGS 84 (EPSG:4326)
source_crs = QgsCoordinateReferenceSystem("EPSG:28992")
destination_crs = QgsCoordinateReferenceSystem("EPSG:4326")
# Use QgsProject.instance() to get the current project context
transform = QgsCoordinateTransform(source_crs, destination_crs, QgsProject.instance())
centroid_wgs84 = transform.transform(selected_features[0].geometry().centroid().asPoint())
centroid_wgs84_x = str(centroid_wgs84[0])
centroid_wgs84_y = str(centroid_wgs84[1])
# Stel de url voor de analyse samen
ahn_viewer_url = "https://viewer.ahn.nl"
ahn_version = "AHN4"
ahn_product = "DTM"
ahn_style = "1" # Keuze uit Kaart Stijlen: 0 = Hoogte, 1 = Dynamische stijl
ahn_zoom_level = 10 # Dit is voor nu een vaste waarde; gebruiker moet zelf desgewenst in- of uitzoomen
geometry_to_analyse = urllib.parse.quote(ft)
ahn_analysis_url = "{}/{}/{}/{}/{}/{}/{}?a={}".format(ahn_viewer_url, ahn_version, ahn_product, ahn_style, centroid_wgs84_x, centroid_wgs84_y, ahn_zoom_level, geometry_to_analyse)
# Toon de analyse voor het geselecteerde vlak in de web browser
# print(ahn_analysis_url)
webbrowser.open(ahn_analysis_url)

