Geocoding met Open Street Maps

Geocoding met Open Street Maps

12/04/2018 | Jeroen Aarts

Latitude en longitude ophalen

Als alternatief voor de Google Maps API kan je het gebruiken van Open Street Maps (OSM) overwegen. OSM heeft een heel eenvoudige en slimme service met de naam Nominatim.

Gebruik de Insert From URL script step van FileMaker, kies JSON als teruggaveformaat en verwerk de latitude (lat) en longitude (lon) uit het resultaat.

Kijk eens naar dit voorbeeld, de details van ons kantoor in Antwerpen

https://nominatim.openstreetmap.org/search?format=json&q=Cogels-Osylei%2036+2600+Antwerp+BE

Dat geeft het volgende resultaat terug:
[{"place_id":"175614111","licence":"Data © OpenStreetMap contributors, ODbL 1.0. https:\/\/osm.org\/copyright","osm_type":"way","osm_id":"511761021","boundingbox":["51.2036036","51.2037706","4.4328532","4.4330846"],"lat":"51.20368615","lon":"4.4329703913766","display_name":"36, Cogels-Osylei, Berchem, Antwerpen, Vlaanderen, 2600, België","class":"historic","type":"building","importance":0.62025}]

Als je dit resultaat bewaart in een variable $result, dan kan je op deze manier de latitude en longitude achterhalen in je FileMaker script:

Set Variable [ $lat ; Value: JSONGetElement ( "[0]lat" ) ]
Set Variable [ $lon ; Value: JSONGetElement ( "[0]lon" ) ]

Als je goed naar het resultaat kijkt, dan zie je dat dit in feite een JSON array is, met daarin objecten. Het resultaat kan inderdaad uit meerdere items (matches) bestaan. In het bovenstaand voorbeeld kijken we simpelweg naar de eerste match – de JSONGetElement() functie is 0-based!

De Usage Policy van OSM is meer flexibel dan die van de Google Maps API’s. Uiteraard is het belangrijk dat je sowieso copyright en Terms of Service van OSM respecteert.

Reverse geocoding: adresgegevens ophalen

Je kan ook het omgekeerde doen: adresgegevens ophalen op basis van latitudes and longitudes. Bijvoorbeeld:

https://nominatim.openstreetmap.org/reverse?format=json&lat=51.20368615&lon=4.4329703913766

Geeft dit resultaat terug:

{"place_id":"175614111","licence":"Data © OpenStreetMap contributors, ODbL 1.0. https:\/\/osm.org\/copyright","osm_type":"way","osm_id":"511761021","lat":"51.20368615","lon":"4.4329703913766","display_name":"36, Cogels-Osylei, Berchem, Antwerpen, Vlaanderen, 2600, België","address":{"house_number":"36","road":"Cogels-Osylei","city_district":"Berchem","city":"Antwerpen","county":"Antwerpen","state":"Vlaanderen","postcode":"2600","country":"België","country_code":"be"},"boundingbox":["51.2036036","51.2037706","4.4328532","4.4330846"]}

Jeroen Aarts