maposmatic-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Maposmatic-dev] [PATCH] Add a Nominatim reverse-geocoding service


From: Pierre Mauduit
Subject: [Maposmatic-dev] [PATCH] Add a Nominatim reverse-geocoding service
Date: Fri, 6 Aug 2010 18:50:20 +0200

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]