]> git.openstreetmap.org Git - nominatim.git/commitdiff
geocodejson: type should contain the general feature class
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 27 Apr 2022 08:53:12 +0000 (10:53 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 27 Apr 2022 08:53:12 +0000 (10:53 +0200)
'type' so far contained the value of the OSM tag. That is rarely
helpful because it is not a restricted class of values. Change
this to contain the types as defined in the geocodejson spec,
which correspond to the address layer names.

lib-php/lib.php
lib-php/template/search-geocodejson.php

index 9babe5ed907ca91c290b967630f777510fe21df9..d17c9d72b8dacf0a97d9bd7c5e2a5ad3e2f42626 100644 (file)
@@ -206,6 +206,36 @@ function parseLatLon($sQuery)
     return array($sFound, $fQueryLat, $fQueryLon);
 }
 
+function addressRankToGeocodeJsonType($iAddressRank)
+{
+    if ($iAddressRank >= 29 && $iAddressRank <= 30) {
+        return 'house';
+    }
+    if ($iAddressRank >= 26 && $iAddressRank < 28) {
+        return 'street';
+    }
+    if ($iAddressRank >= 22 && $iAddressRank < 26) {
+        return 'locality';
+    }
+    if ($iAddressRank >= 17 && $iAddressRank < 22) {
+        return 'district';
+    }
+    if ($iAddressRank >= 13 && $iAddressRank < 17) {
+        return 'city';
+    }
+    if ($iAddressRank >= 10 && $iAddressRank < 13) {
+        return 'county';
+    }
+    if ($iAddressRank >= 5 && $iAddressRank < 10) {
+        return 'state';
+    }
+    if ($iAddressRank >= 4 && $iAddressRank < 5) {
+        return 'country';
+    }
+
+    return 'locality';
+}
+
 if (!function_exists('array_key_last')) {
     function array_key_last(array $array)
     {
index b8727719b19579b47a61a17b5f6e016fb7c5caed..ffdda6c6b64a3a68d1841a5b76d29d8929d6df8d 100644 (file)
@@ -26,7 +26,7 @@ foreach ($aSearchResults as $iResNum => $aPointDetails) {
         $aPlace['properties']['geocoding']['osm_id'] = $aPointDetails['osm_id'];
     }
 
-    $aPlace['properties']['geocoding']['type'] = $aPointDetails['type'];
+    $aPlace['properties']['geocoding']['type'] = addressRankToGeocodeJsonType($aPointDetails['rank_address']);
 
     $aPlace['properties']['geocoding']['label'] = $aPointDetails['langaddress'];