WMS hoogte bepaling

Dag, ik ben bezig met het maken van een app waarbij ik hoogte informatie nodig heb. Ik maak nu gebruik van de WMS service om een plaatje te laden maar nu wil ik de kleur omzetten naar een hoogte. Ik kan echter nergens vinden welke formule wordt gebruikt om het plaatje te maken, dan kan ik de kleur weer omzetten naar een hoogte.

Heeft iemand hier meer informatie over?

Gebruik de GetFeatureInfo request om waardes uit WMS te halen.

http://geodata.nationaalgeoregister.nl/ahn2/wms?
service=wms&
request=getfeatureinfo&
layers=ahn2_5m&
bbox=13014,306243,286599,623492&
width=400&
height=500&
format=image/png&
srs=EPSG:28992&
query_layers=ahn2_5m&
info_format=application/json&
x=353&
y=145

Deze request haalt de hoogte op x = 353, y = 145 van het opgevraagde 400 x 500 afbeelding.

Je kan ook een bbox van 1x1 maken en de hoogte op x = 1, y = 1 opvragen. Zie bijv.

http://geodata.nationaalgeoregister.nl/ahn2/wms?
service=wms&
request=getfeatureinfo&
layers=ahn2_5m&
bbox=13014,306243,13015,306244&
width=1&
height=1&
format=image/png&
srs=EPSG:28992&
query_layers=ahn2_5m&
info_format=application/json&
x=1&
y=1

Hoor graag of het gelukt is!

Hoi, bedankt voor het snelle antwoord. Ik heb juist gekozen voor wms omdat ik heel veel verschillende punten in het gebied nodig heb. In sommige gevallen gaat het om duizenden punten en dan zou ik voor elk object een getfeatureinfo call moeten doen. Naast het feit dat dat een enorme vertraging in de app zou betekenen denk ik ook dat het niet echt onder de fair-use policy zal vallen.

1 like

Aha, duidelijk.

@PDOKbeheer is het mogelijk om de definitie van de legenda beschikbaar te maken?

@d.khiati Heb je de WCS al geprobeerd? Die geeft je de ruwe informatie, zie bijv. de request voor NO2 waardes uit de RIVM server:

http://geodata.rivm.nl/geoserver/wcs?request=getcoverage&coverageid=gcn__conc_no2_2014&VERSION=2.0.0

@d.khiati Kijk ook naar Steven Ottens app: Interactive height viewer Het laat je dynamisch de hoogtekaart in de browser filtreren op basis van pixelwaardes.

Helaas geeft de WCS alleen maar: “This request is reading too much data” hoe klein ik de bounding box ook maak.
Ik ben nu aan het kijken naar die webapp van Steven Ottens maar daar moet ik nog even door de code heen spitten.

Alvast bedankt tot zover

Vreemd, ik zal er naar kijken.

Ondertussen onderzoekt @PDOKbeheer of de SLD (stylesheet van de kaart) vrijgegeven kan worden. Hierin wordt de legenda gedefinieerd.

Ik heb inmiddels door de specificaties te lezen wel de functie getlegendgraphic gevonden. Dus ik heb inmiddels een legenda die hoort bij de kaart. Van daaruit bepaal ik voor nu hardcoded de kleuren en interpoleer tussen de verschillende gradaties voor iets specifiekere hoogte.

Helaas dus een beperkte accuraatheid maar het is voor nu voldoende

Overigens, de request die ik naar WCS stuurde klopte niet, boundingbox werkt niet met de 2.0.1 versie die ik mee stuurde dus waarschijnlijk is er niets aan de hand met de server maar klopt mijn request gewoon niet.

1 like

Dank voor terugkoppeling. Ik ga op zoek naar de juiste request.

Ik heb dezelfde vraag: omdat een kaartblad van de puntenwolk AHN3 26DZ1 incompleet is, heb ik het raster voor dat kaartblad gedownload. De GeoTiff bevat echter geen informatie over de interpretatie van de kleurwaarden. Ik zou graag weten welke kleurwaarde voor welke hoogte gebruikt wordt, dan kan ik de tiff gewoon uitlezen per pixel en mijn hoogtes modelleren in Sketchup.

@Alkemade kun jij hier op reageren?

Bij de GeoTiffs wordt geen interpretatie van de kleurwaarde meegegeven. @oosterwold, bedoel je de kleurwaarden die voor de WMS gebruikt wordt (ofwel de eerdergenoemde stylesheet van de kaart?)? Deze is niet in beheer bij de AHN organisatie, dus daarmee kan ik je niet verder helpen.

Het enige wat ik wil weten, is welke kleurwaarde voor welke hoogte staat in deze kaarten. Dat zou toch ergens bekend moeten zijn. Er zitten grijswaarden in van 0-255. Voor welke hoogtes staan deze? Als ik dat niet weet dan zijn deze GeoTiffs nutteloos.

In de GeoTiffs zijn geen kleurwaarden gekoppeld aan hoogte. Iedere rastercel heeft een hoogte, bij het afbeelden wordt per kaartblad de hoogste en laagste z-waarde bepaald en daarmee worden de grijswaarden uitgesmeerd tussen 0 en 255. Als je twee kaartbladen apart inleest, zullen de grijswaarden daarom ook op de grenzen niet overeenkomen.
Ik ben geen expert op het gebied van services, maar ik vermoed dat die op basis van het hele bestand een hoogste en laagste z-waarde bepaalt en vervolgens een kleur toekent. Die schaalverdeling zou je volgens mij moeten toepassen op de GeoTIff, maar zoals gezegd is deze niet in beheer bij de AHN organisatie.

Hoogte ophalen gaat stukken beter via een GetFeatureInfo request. Geo services en APIs — PDOK / NGR documentatie documentatie

1 like

Even ter info, ik denk dat je hier beter de WCS kan gebruiken (zie de pdokservicesplugin van QGIS, en dan de echte waarde ophalen (1 band: float32).
Verder heeft deze WMS wel een legenda zo te zien die gewoon loopt van -9 tot 300 meter:

https://geodata.nationaalgeoregister.nl/ahn3/ows?service=WMS&request=GetLegendGraphic&format=image/png&width=20&height=20&layer=ahn3_5m_dsm&version=1.30&SLD_VERSION=1.1.0&STYLE=ahn3:ahn3_5m_detail&TRANSPARENT=true

Ik heb daar geen sld van, maar het zou eigenlijk een goed idee zijn om die OOK beschikbaar te maken!

(Ik realiseer me wel dat ik hier een oud/koud topic weer opwarm …)

Ah, ik realiseerde me dat niet. Sorry

Geeft niks, toch? Lijkt me juist nuttig als het een belangrijk onderwerp is of als er nieuwe inzichten zijn verworven.

Hierbij de kleuren die door de standaard static AHN gebruikt worden:
[bovengrenshoogte, hexcolor, red, green, blue]

const colorTable = [
    [-7.0, '#08307B', 8, 48, 123],
    [-6.0, '#083C7F', 8, 60, 127],
    [-5.0, '#0A4984', 10, 73, 132],
    [-4.0, '#106388', 16, 99, 136],
    [-3.0, '#106287', 16, 98, 135],
    [-2.5, '#136E8C', 19, 110, 140],
    [-2.0, '#187C8C', 24, 124, 140],
    [-1.5, '#18888F', 24, 136, 143],
    [-1.0, '#1A9394', 26, 147, 148],
    [-0.5, '#219990', 33, 153, 144],
    [0.0, '#1D9F88', 29, 159, 136],
    [0.5, '#18A67F', 24, 166, 127],
    [1.0, '#18AE72', 24, 174, 114],
    [1.5, '#15B468', 21, 180, 104],
    [2.0, '#10BB5B', 16, 187, 91],
    [2.5, '#0CC14B', 12, 193, 75],
    [3.0, '#08CA3A', 16, 202, 58],
    [3.5, '#08CF31', 8, 207, 49],
    [4.0, '#03DB00', 3, 219, 0],
    [4.5, '#04DC00', 4, 220, 0],
    [5.0, '#1DE100', 29, 225, 0],
    [6.0, '#34E400', 52, 228, 0],
    [7.0, '#4CE800', 76, 232, 0],
    [8.0, '#88F100', 136, 241, 0],
    [9.0, '#84F000', 132, 240, 0],
    [10.0, '#A3F400', 163, 244, 0],
    [12.0, '#BFF700', 191, 247, 0],
    [14.0, '#D6F900', 214, 249, 0],
    [16.0, '#FFF600', 255, 246, 0],
    [18.0, '#FFED00', 255, 237, 0],
    [20.0, '#FBE000', 251, 224, 0],
    [25.0, '#FBDF00', 251, 223, 0],
    [30.0, '#F7D105', 247, 209, 8],
    [35.0, '#F7CB08', 247, 203, 8],
    [40.0, '#F7C208', 247, 194, 8],
    [45.0, '#F7B90C', 247, 185, 12],
    [50.0, '#F4B010', 244, 176, 16],
    [60.0, '#EFA410', 239, 164, 16],
    [70.0, '#EF9E10', 239, 158, 16],
    [80.0, '#E78B1A', 231, 139, 26],
    [90.0, '#E78B1A', 231, 139, 26],
    [100.0, '#E38021', 227, 128, 33],
    [125.0, '#D97225', 217, 114, 37],
    [150.0, '#D66A29', 214, 106, 41],
    [175.0, '#D2652C', 210, 101, 44],
    [200.0, '#CE5C31', 206, 92, 49],
    [250.0, '#CA5734', 202, 87, 52],
    [300.0, '#C65339', 198, 83, 57],
    [350.0, '#C65339', 198, 83, 57],
]