From 8677da2a72bb54a86e91ed79e4adb943fa9ef40b Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Wed, 27 Apr 2022 10:53:12 +0200 Subject: [PATCH] geocodejson: type should contain the general feature class '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 | 30 +++++++++++++++++++++++++ lib-php/template/search-geocodejson.php | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib-php/lib.php b/lib-php/lib.php index 9babe5ed..d17c9d72 100644 --- a/lib-php/lib.php +++ b/lib-php/lib.php @@ -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) { diff --git a/lib-php/template/search-geocodejson.php b/lib-php/template/search-geocodejson.php index b8727719..ffdda6c6 100644 --- a/lib-php/template/search-geocodejson.php +++ b/lib-php/template/search-geocodejson.php @@ -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']; -- 2.39.5