mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
Merge pull request #2681 from lonvia/improve-geocodejson
Fix 'type' field in the geocodejson response
This commit is contained in:
@@ -15,6 +15,15 @@ breaking changes. **Please read them before running the migration.**
|
|||||||
If you are migrating from a version <3.6, then you still have to follow
|
If you are migrating from a version <3.6, then you still have to follow
|
||||||
the manual migration steps up to 3.6.
|
the manual migration steps up to 3.6.
|
||||||
|
|
||||||
|
## 4.0.0 -> master
|
||||||
|
|
||||||
|
### geocodejson output changed
|
||||||
|
|
||||||
|
The `type` field of the geocodejson output has changed. It now contains
|
||||||
|
the address class of the object instead of the value of the OSM tag. If
|
||||||
|
your client has used the `type` field, switch them to read `osm_value`
|
||||||
|
instead.
|
||||||
|
|
||||||
## 3.7.0 -> 4.0.0
|
## 3.7.0 -> 4.0.0
|
||||||
|
|
||||||
### NOMINATIM_PHRASE_CONFIG removed
|
### NOMINATIM_PHRASE_CONFIG removed
|
||||||
|
|||||||
@@ -98,7 +98,10 @@ The GeocodeJSON format follows the
|
|||||||
The following feature attributes are implemented:
|
The following feature attributes are implemented:
|
||||||
|
|
||||||
* `osm_type`, `osm_id` - reference to the OSM object (unofficial extension, [see notes](#osm-reference))
|
* `osm_type`, `osm_id` - reference to the OSM object (unofficial extension, [see notes](#osm-reference))
|
||||||
* `type` - value of the main tag of the object (e.g. residential, restaurant, ...)
|
* `type` - the 'address level' of the object ('house', 'street', `district`, `city`,
|
||||||
|
`county`, `state`, `country`, `locality`)
|
||||||
|
* `osm_key`- key of the main tag of the OSM object (e.g. boundary, highway, amenity)
|
||||||
|
* `osm_value` - value of the main tag of the OSM object (e.g. residential, restaurant)
|
||||||
* `label` - full comma-separated address
|
* `label` - full comma-separated address
|
||||||
* `name` - localised name of the place
|
* `name` - localised name of the place
|
||||||
* `housenumber`, `street`, `locality`, `district`, `postcode`, `city`,
|
* `housenumber`, `street`, `locality`, `district`, `postcode`, `city`,
|
||||||
|
|||||||
@@ -206,6 +206,36 @@ function parseLatLon($sQuery)
|
|||||||
return array($sFound, $fQueryLat, $fQueryLon);
|
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')) {
|
if (!function_exists('array_key_last')) {
|
||||||
function array_key_last(array $array)
|
function array_key_last(array $array)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,8 +25,10 @@ foreach ($aSearchResults as $iResNum => $aPointDetails) {
|
|||||||
$aPlace['properties']['geocoding']['osm_type'] = $sOSMType;
|
$aPlace['properties']['geocoding']['osm_type'] = $sOSMType;
|
||||||
$aPlace['properties']['geocoding']['osm_id'] = $aPointDetails['osm_id'];
|
$aPlace['properties']['geocoding']['osm_id'] = $aPointDetails['osm_id'];
|
||||||
}
|
}
|
||||||
|
$aPlace['properties']['geocoding']['osm_key'] = $aPointDetails['class'];
|
||||||
|
$aPlace['properties']['geocoding']['osm_value'] = $aPointDetails['type'];
|
||||||
|
|
||||||
$aPlace['properties']['geocoding']['type'] = $aPointDetails['type'];
|
$aPlace['properties']['geocoding']['type'] = addressRankToGeocodeJsonType($aPointDetails['rank_address']);
|
||||||
|
|
||||||
$aPlace['properties']['geocoding']['label'] = $aPointDetails['langaddress'];
|
$aPlace['properties']['geocoding']['label'] = $aPointDetails['langaddress'];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user