Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Samenvatting

In Onemap kan , vanuit de featureinfo, additionele informatie worden opgehaald en getoond vanuit relevante REST API endpoints.

Het uitgangspunt hierbij is dat een laag in Onemap attributen bevat die gevoed kunnen worden aan het gekoppelde endpoint. bv:

Een laag met percelen (vanuit PDOK) bevat de attributen (perceel identificatie) om bij de haalcentraal-BRK endpoints extra informatie op te halen die niet als attribuut in de laag aanwezig is (bv: zakelijke rechten of eigenaren van een perceel)

De Rest interface bevat doorgaans meerdere endpoints die aan elkaar zijn gerelateerd. Op die manier kan worden doorgevraagd over meerdere Rest-endpoints. Om dit in Onemap te kunnen koppelen is het zaak om 1 start endpoint te configureren , en zelf de relevante gegevens hiervoor te verzamelen en terug te geven.

FME (desktop/server) is een generieke tool waarmee dit zou kunnen worden ingericht.

In deze workshop gaan we dit uitvoeren voor de Basis Registratie Ondergrond (BRO).

De beschikbare BRO Rest-endpoints zijn beschreven in BRO publieke Rest services

In PDOK zijn een aantal BRO lagen beschikbaar (sonderingen, booronderzoeken, grondwater meetpunten..).

Deze lagen bevatten de BRO identificatie attributen waarmee De BRO publieke Rest services kunnen worden bevraagd. Deze services bevatten o.a. endpoints om bijbehorende metingen en gegevens grafisch te presenteren (bv de bodem profielen).

In deze workshop gaan we deze grafische presentaties ophalen en toevoegen aan de Onemap feature informatie.

De algemene werkwijze hiervoor is als volgt:

  • Maak een FME script ( met FME desktop) dat gevoed wordt met attributen ( en waardes) die nodig zijn om de REST services te bevragen.

  • Verzamel de gewenste gegevens door ( vanuit het script) een aantal Rest endpoints sequentieel te bevragen. Lever de verzamelde gegevens aan in json formaat.

  • Upload het script naar FME Server, en maak hiervoor een ‘WebHook' aan. De 'WebHook’ kan vervolgens als API-endpoint worden gekoppeld in Onemap.

  • Richt het API basis endpoint in bij de Onemap workspace systeem instellingen.

  • Koppel dit basis endpoint aan de featureinfo van de bijbehorende laag.

Maak het FME Desktop script

Het benodigde FME script bevat doorgaans de volgende onderdelen:

  1. De parameters die voor de Rest-services nodig zijn, en die als attribuut in de Onemap laag beschikbaar zijn.

  2. Een 'creator' transformer om het proces te starten

  3. Een ( of meerdere ) 'http_caller' transformers om de relevante Rest-endpoints te bevragen

  4. Een JSON writer

image-20240507-095402.png

De precieze invulling van het script is verder afhankelijk van hoe de Rest services zijn ingericht en communiceren.

Richt een FME server WebHook in

Upload FME script naar FME server

image-20240507-091433.png

Registreer dit als een 'Data Streaming' service

image-20240507-100148.png

image-20240507-100225.png

Publiceer het script als een FME WebHook

image-20240507-100321.png

image-20240507-100356.png

Een FME Server Webhook vormt een API-endpoint dat met een api-key is geauthoriseerd.

Download de webhook configuratie instellingen en bewaar deze.

image-20240507-100438.png

Configureer de API koppeling in Onemap

Allereerst wordt het basis endpoint toegevoegd bij de API-configuraties in de workspace systeem instellingen.

Het basis endpoint bevat de basis-URL ( alles tot het ? ) en een HTML header met de benodigde authorizatie.

image-20240507-102159.png

image-20240507-102347.png

Het tweede deel voor de API/WebHook aanroep wordt uitgevoerd in de laag/featureinfo configuratie. Hier hebben we (doorgaans) de benodigde parameters tot onze beschikking.

WMS services leveren niet altijd de bijbehorende veld definities (de functie 'DescribeFeature' is voor WMS niet verplicht).

De workarounds zijn dan:

1-Gebruik de bijbehorende WFS (waar ‘describefeature’ wel verplicht is)

Indien de WFS niet als service beschikbaar is:

2-Herleid de laag velden door in de WMS de featureinfo middels TWIG toch te implementeren en vervolgens op de kaart een keer uit te voeren. (e.a. is beschreven in Twig templates)

Helaas doet deze situatie zich voor bij de BRO-PDOK lagen. Door eenmalig een featureinfo in Onemap uit te voeren krijgen we zo toch de beschikking over de aanwezige attributen.

image-20240507-105047.png

We kunnen nu de API/WebHook aanroep inrichten door de BRO_ID parameter in de aanroep toe te voegen.

image-20240507-103604.png

De Rest-API’s leveren gegevens terug in json formaat. In Onemap moet deze json vervolgens geparsed worden naar een html formaat m.b.v. TWIG.

In dit geval wordt de grafiek in svg ( xml formaat) terug geleverd als waarde van het json item 'json_result'. Deze waarde kan direct worden opgenomen in de featureinfocode als waarde.

Omdat FME de json altijd als json-array teruggeeft moet eerst nog het eerste element naar een 'normale' json worden gezet.

De api koppeling die naast de featureinfo is ingericht komt , binnen de featureinfo, als tabblad/button beschikbaar. Door hier op te klikken wordt een request naar de fme server webhook verstuurd ( met het bijbehorende bro_id) en wordt ( in dit geval) het bodemprofiel grafisch teruggeleverd.

image-20240507-113025.png

Opdracht:

1-Ontwikkel en implementeer met FME een API koppeling om de bodemprofielen als grafiek in de featureinfo te kunnen bekijken.

Iedere REST interface vraagt kennis over de opbouw en de inhoud die de Rest services leveren. Meestal worden de Rest services in een vorm gepresenteerd (bv swagger UI) waarmee de gebruiker individuele endpoints kan testen.

Bekijk de REST services op BRO Rest services, we zien hier dat er twee sets van endpoints worden gegeven:

  1. uitgifte

  2. visualisatie

We pakken eerst de BHRP uitgifte service.

BHR-P uitgifte en validatie
url: https://publiek.broservices.nl/sr/bhrp/v2

Als we deze openen en vervolgens de documentatie link openen komen we uit op de swagger UI van deze rest services.

Hier zien we een endpoint om gegevens van een individueel boorpunt op te halen.

/sr/bhrp/v2/objects/{broId}

Als je deze openklikt en kiest voor 'tryout' kun je kijken wat dit endpoint terug levert. Probeer dit voor het volgende boorpunt ID: bro_id: BHR000000350843

Vul het broid in en klik op 'execute'

Je ziet vervolgens hoe de vraag wordt afgevuurd (request url). Bij een correcte verwerking krijg je een responsecode 200 en het antwoord.

image-20240508-111033.png

Kopieer dit antwoord naar het clipboard

image-20240508-111124.png

We gaan nu naar de bijbehorende visualisatie Rest services:

Hier zien we o.a. het volgende endpoint:

/sr/sfr/v2/profile/graph/dispatch

met als omschrijving: Grafische weergave boorprofiel op basis van een uitgifteresultaat (laag, diepte, kleur).

Ga ook deze middels 'tryout testen.

We hebben hier een veld 'request body' waarvan we de inhoud kunnen vervangen door het zojuist gekopieerde antwoord van het uitgifte-endpoint.

Als we deze uitvoeren zien we weer de uitgevoerde request en het antwoord. In het antwoord zien we dat er een xml wordt terggegeven en dat deze een SVG item bevat.

Deze svg zal in een html pagina worden getoond als de bodemprofiel grafiek.

image-20240508-111834.png

We hebben het ophalen van een bodemprofiel grafiek voor een boorpunt nu uitgevoerd op de swagger-UI endpoints van de BRO rest services.

Probeer deze stappen nu op te nemen in een FME script:

1-defineer een user parameter voor de bro id

2-gebruik een http_caller om de uitgifte gegevens op te halen ( uitgifte GET met een bro_id als parameter)

3-gebruik een http_caller om het uitgifte resultaat als SVG grafiek op te halen (visualisatie POST met response uit eerste call als body)

4-plaats het resultaat van de SVG call in een json writer

opm: xml header uit de SVG response moet nog worden verwijdert. Dit kan bv met:

image-20240508-112759.png

  • No labels