Webservice als naslagtabel om GPS-gegevens te verfijnen

Hoogtegegevens die door GPS-apparaten worden geregistreerd, zijn berucht om hun onnauwkeurigheid, vooral in heuvelachtig gebied, zoals het voorbeeld van de Russian River Valley dat we in een eerdere post noemden.

De hoogteprofielgegevens die zijn afgeleid van het GPX-bestand van de Russian River Valley zijn om verschillende redenen verdacht. Ten eerste toont de grafiek aan dat we bijna 15 meter onder zeeniveau zijn gedaald. Dat is moeilijk te geloven, aangezien we langs de oever van de rivier reden, slechts ongeveer 16 kilometer verwijderd van de Stille Oceaan.

Ten tweede gingen we voornamelijk naar het westen, langs de rivier richting de monding, maar de routekaart laat een overwegend stijgende helling zien.

We kunnen de geregistreerde GPS-hoogtedata evalueren door deze te vergelijken met informatie die beschikbaar is van de United States Geological Survey (USGS). De USGS biedt een webdienst aan die breedte- en lengtegraden accepteert en hoogtedata teruggeeft die zijn gemeten door NASA en waarvan de nauwkeurigheid is beoordeeld op basis van meer dan 13.000 controlepunten in de Verenigde Staten.

Door de hoogtedienst in een Altova MapForce mapping te gebruiken, kunnen we elk punt uit het GPX-bestand extraheren, de coördinaten naar de USGS-webdienst sturen en een nieuw GPX-bestand genereren met gecorrigeerde hoogtedata.

Deze oplossing komt overeen met het "zoektafel"-patroon voor webdiensten, zoals beschreven in de blogpost "Data Mapping Patterns". Elke set coördinaten, gedefinieerd door breedte- en lengtegraad, heeft precies één bijbehorende hoogte waarde. Net als bij een lokale zoektafel zijn de brongegevens uniek, maar de uitvoerwaarden kunnen wel worden herhaald.

We kunnen vertrouwd raken met de USGS-webdienst door het WSDL-bestand te openen in XMLSpy. Dit is vooral handig om de ingebouwde documentatie te bekijken.

XMLSpy kan ook een SOAP-verzoek genereren voor de webservice, waardoor het eenvoudig is om de benodigde parameters te identificeren en te testen.

Voor de eerste test hebben we de coördinaten gebruikt waar de hoogte lager was dan de zeespiegel. Het element "Source_Layer" specificeert welke kaartset gebruikt moet worden om het resultaat op te vragen. We hebben een kaart geselecteerd die het westelijke deel van de Verenigde Staten bestrijkt, uit de lijst die te vinden is op http://gisdata.usgs.gov/XMLWebServices2/Elevation_Service_Methods.php

XMLSpy kan het verzoek naar de aanbieder van de webservice sturen en het resultaat automatisch openen.

Waar het GPS-systeem een diepte van 12 meter onder zeeniveau registreerde, meldt de USGS dat de werkelijke hoogte meer dan 33 meter boven zeeniveau was.

We hadden de hoogte in voet kunnen opvragen, maar hebben dat niet gedaan, omdat het GPX-schema de hoogte in meters definieert. We zijn van plan om in elk geval het StyleVision stijlsjabloon te gebruiken voor lokalisatie van de uiteindelijke data.

Data-mapping met een webservice

Soms is het handig om een kleine, vereenvoudigde MapForce-mapping te maken om de webservice te testen voordat er een grote hoeveelheid data wordt verzonden. De onderstaande screenshot toont een eenvoudige mapping voor de webservice "getElevation", waarbij stringconstanten worden gebruikt om parameters aan te geven en een tekstbestand wordt gebruikt voor de uitvoer.

Door op de knop "MapForce Output" te klikken, wordt de transformatie uitgevoerd met de opgegeven parameters. Hier is het resultaat:

We beginnen met de productieversie van de MapForce-mapping met twee kopieën van het GPX-schema, en we verbinden alle elementen van de bron naar de bestemming, met uitzondering van de hoogte.

Vervolgens kopiëren we eenvoudigweg de definitie van de webservice, samen met de bijbehorende parameters, van de testomgeving naar de productieomgeving. Daarnaast verbinden we de variabelen X_Value en Y_Value in de webservice met de lengte- en breedtegraad in het bron-GPX-bestand.

Aan de uitvoerkant van de webservice verbinden we simpelweg het resultaat met het element voor de hoogte in het uitvoercomponent. (We hebben de hoogte in meters afgerond op twee decimalen, omdat een nauwkeurigheid tot op één tiende geen toegevoegde waarde heeft – we meten hier immers niet de bewegingen van tektonische platen!)

Wanneer we de nieuwe versie van de mapping uitvoeren, worden de coördinaten van elk -element aan de webservice verzonden, en de gerapporteerde hoogte wordt vervolgens ingevoegd in aan de uitvoerkant.

We kunnen het geconverteerde GPX-bestand vergelijken met nieuwe hoogtedata ten opzichte van het originele bestand met behulp van Altova DiffDog. De verschillen worden duidelijk gemarkeerd in de weergave. Tijdens de conversie zijn ook enkele irrelevante nullen verwijderd uit de breedte- en lengtegraden.

We kunnen het geconverteerde bestand ook visualiseren met behulp van het StyleVision SPS-stijlsheet, dat functies voor lokalisatie biedt.

Zoals verwacht bij het volgen van een rivier richting de monding, daalt de route niet onder zeeniveau en de algemene trend is dalend!

Hoogtegegevens die door GPS-apparaten worden geregistreerd, zijn inherent minder nauwkeurig dan x-y-coördinaten. Bovendien kunnen heuvels en andere obstakels, doordat u in beweging bent, het zicht op één of meerdere GPS-satellieten blokkeren, waardoor hun radiosignalen verloren gaan.

De kaart hieronder toont een deel van de route door de Russian River Valley. De rode stip markeert een punt waar de GPS een hoogte van -12,8 meter registreerde, terwijl de USGS een hoogte van +33,28 meter rapporteerde. De heuvel Wild Hog Hill, direct ten westen, stijgt meer dan 335 meter en blokkeert grote delen van de lucht, en blokkeert waarschijnlijk ook GPS-satelliet signalen.

Als laatste opmerkelijk punt hebben we de hoogtedata uit het GPX-bestand voor de wandeling in New Hampshire omgezet en XMLSpy gebruikt om de hoogtedata van de USGS in groen weer te geven als een overlay op de oorspronkelijke GPS-hoogtelijn.

Het is niet moeilijk om te zien welke vorm een oude, door erosie aangetaste helling in New England beter weergeeft.

Als u de tools in wilt gebruiken Altova MissionKit om uw eigen datamapping te maken, waarbij een webservice als naslagtabel wordt gebruikt Klik hier om een gratis proefversie te downloaden.