]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/bdd/steps/queries.py
search/reverse/lookup with geojson,geocodejson output
[nominatim.git] / test / bdd / steps / queries.py
index caefb661487692a45c6fb8d2930496eb2ebfb911..1584d1ed7eeb78b316285f16270a75f3f8beaae8 100644 (file)
@@ -110,6 +110,10 @@ class SearchResponse(GenericResponse):
             self.header['json_func'] = m.group(1)
         self.result = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(code)
 
+    def parse_geojson(self):
+        self.parse_json()
+        self.result = geojson_results_to_json_results(self.result)
+
     def parse_html(self):
         content, errors = tidy_document(self.page,
                                         options={'char-encoding' : 'utf8'})
@@ -185,6 +189,12 @@ class ReverseResponse(GenericResponse):
             self.header['json_func'] = m.group(1)
         self.result = [json.JSONDecoder(object_pairs_hook=OrderedDict).decode(code)]
 
+    def parse_geojson(self):
+        self.parse_json()
+        if 'error' in self.result:
+            return
+        self.result = geojson_results_to_json_results(self.result[0])
+
     def parse_xml(self):
         et = ET.fromstring(self.page)
 
@@ -250,6 +260,27 @@ class StatusResponse(GenericResponse):
         self.result = [json.JSONDecoder(object_pairs_hook=OrderedDict).decode(self.page)]
 
 
+def geojson_result_to_json_result(geojson_result):
+    result = geojson_result['properties']
+    result['geojson'] = geojson_result['geometry']
+    if 'bbox' in geojson_result:
+        # bbox is  minlon, minlat, maxlon, maxlat
+        # boundingbox is minlat, maxlat, minlon, maxlon
+        result['boundingbox'] = [
+                                    geojson_result['bbox'][1],
+                                    geojson_result['bbox'][3],
+                                    geojson_result['bbox'][0],
+                                    geojson_result['bbox'][2]
+                                ]
+    return result
+
+
+def geojson_results_to_json_results(geojson_results):
+    if 'error' in geojson_results:
+        return
+    return list(map(geojson_result_to_json_result, geojson_results['features']))
+
+
 @when(u'searching for "(?P<query>.*)"(?P<dups> with dups)?')
 def query_cmd(context, query, dups):
     """ Query directly via PHP script.
@@ -414,6 +445,8 @@ def website_lookup_request(context, fmt, query):
 
     if fmt == 'json ':
         outfmt = 'json'
+    elif fmt == 'geojson ':
+        outfmt = 'geojson'
     else:
         outfmt = 'xml'