SIMPLE reverse geocoding using Nominatim

tony gil picture tony gil · Jun 7, 2012 · Viewed 20.6k times · Source

i am developing an online mapping application using OpenLayers + OpenStreetMaps.

i need help implementing a simple reverse geocoding function in javascript (or php) that receives Latitude and Longitude and returns an Address.

i would like to work with Nominatim, if possible. i do NOT want to use Google, Bing or CloudMade or other proprietary solutions.

this link returns a reasonable response and i used simple_html_dom.php to break down the result but it is sort of an ugly solution.

<?php

include('simple_html_dom.php');

$url = "http://nominatim.openstreetmap.org/reverse?format=xml&lat=-23.56320001&lon=-46.66140002&zoom=27&addressdetails=1";
$html = file_get_html($url);
foreach ($html->find('road') as $element ) {
    echo $element;
}

?>  

any suggestions of a more elegant solution?

NOTE: as of Oct 2015, the request must include a valid email so as to "provide sufficient identification of your application".

Without an email, the return code will NOT be in xml or json format, but rather as error 509 "Bandwidth Exceeded", try using an html_dom library for scraping.

$url = "http://nominatim.openstreetmap.org/[email protected]&format=xml&lat=-23.56320001&lon=-46.66140002&zoom=27&addressdetails=1";

Answer

tonio picture tonio · Jun 7, 2012

You can request nominatim in JSON format, and pass a callback name, so that the response will be: callback(json).

Look at the doc : http://wiki.openstreetmap.org/wiki/Nominatim

And here’s a minimal example of use: http://jsfiddle.net/GWL7A/14/