The service added aims to query (lat/lon) Nominatim, fetch the resulting XML, parse it, then returns it into JSON. --- www/maposmatic/nominatim.py | 18 ++++++++++++++++++ www/maposmatic/views.py | 7 +++++++ www/urls.py | 2 ++ 3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/www/maposmatic/nominatim.py b/www/maposmatic/nominatim.py index eeeb5f1..85409cb 100644 --- a/www/maposmatic/nominatim.py +++ b/www/maposmatic/nominatim.py @@ -42,6 +42,24 @@ from xml.etree.ElementTree import parse as XMLTree NOMINATIM_BASE_URL = "http://nominatim.openstreetmap.org/search/" +def reverse_geo(lat, lon): + """ + Query the nominatim service for the given lat/long coordinates and + returns the reverse geocoded informations. + """ + + url = "http://nominatim.openstreetmap.org/reverse?" + url = url + ("lat=%f&lon=%f" % (lat, lon)) + + f = urllib2.urlopen(url=url) + result = [] + + for place in XMLTree(f).getroot().getchildren(): + attribs = dict(place.attrib) + for elt in place.getchildren(): + attribs[elt.tag] = elt.text + result.append(attribs) + return result def query(query_text, with_polygons = False): """ diff --git a/www/maposmatic/views.py b/www/maposmatic/views.py index 9998eac..d6b33bb 100644 --- a/www/maposmatic/views.py +++ b/www/maposmatic/views.py @@ -196,6 +196,13 @@ def query_nominatim(request, format, squery): mimetype='text/json') # Support other formats here. +def nominatim_reverse(request, lat, lon): + """Nominatim reverse geocoding query gateway.""" + lat = float(lat) + lon = float(lon) + return HttpResponse(json_encode(nominatim.reverse_geo(lat, lon)), + mimetype='text/json') + def query_papersize(request): """AJAX query handler to get the compatible paper sizes for the provided layout and bounding box.""" diff --git a/www/urls.py b/www/urls.py index 9002dc6..d5da562 100644 --- a/www/urls.py +++ b/www/urls.py @@ -64,6 +64,8 @@ urlpatterns = patterns('', (r'^apis/nominatim/([^/]*/)?(.*)$', maposmatic.views.query_nominatim), + (r'^apis/reversegeo/([^/]*)/([^/]*)/$', maposmatic.views.nominatim_reverse), + (r'^apis/papersize', maposmatic.views.query_papersize), # Internationalization -- 1.7.1
