mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
merge linked names correctly into namedetails
Convert the '_place_*' entries back to normal entries before returning them in the 'namedetails' section. If the name field is duplicated, kept the '_place_*' notation. This preserves the previous behaviour before _place_ names were introduces but adds the additional names from the linked place for reference.
This commit is contained in:
@@ -452,11 +452,7 @@ class PlaceLookup
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->bNameDetails) {
|
if ($this->bNameDetails) {
|
||||||
if ($aPlace['names']) {
|
$aPlace['sNameDetails'] = $this->extractNames($aPlace['names']);
|
||||||
$aPlace['sNameDetails'] = json_decode($aPlace['names']);
|
|
||||||
} else {
|
|
||||||
$aPlace['sNameDetails'] = (object) array();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$aPlace['addresstype'] = ClassTypes\getLabelTag(
|
$aPlace['addresstype'] = ClassTypes\getLabelTag(
|
||||||
@@ -479,6 +475,33 @@ class PlaceLookup
|
|||||||
return $aResults;
|
return $aResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function extractNames($sNames)
|
||||||
|
{
|
||||||
|
if (!$sNames) {
|
||||||
|
return (object) array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$aFullNames = json_decode($sNames);
|
||||||
|
$aNames = array();
|
||||||
|
|
||||||
|
foreach ($aFullNames as $sKey => $sValue) {
|
||||||
|
if (strpos($sKey, '_place_') === 0) {
|
||||||
|
$sSubKey = substr($sKey, 7);
|
||||||
|
if (array_key_exists($sSubKey, $aFullNames)) {
|
||||||
|
$aNames[$sKey] = $sValue;
|
||||||
|
} else {
|
||||||
|
$aNames[$sSubKey] = $sValue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$aNames[$sKey] = $sValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $aNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* returns an array which will contain the keys
|
/* returns an array which will contain the keys
|
||||||
* aBoundingBox
|
* aBoundingBox
|
||||||
* and may also contain one or more of the keys
|
* and may also contain one or more of the keys
|
||||||
@@ -489,8 +512,6 @@ class PlaceLookup
|
|||||||
* lat
|
* lat
|
||||||
* lon
|
* lon
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
public function getOutlines($iPlaceID, $fLon = null, $fLat = null, $fRadius = null, $fLonReverse = null, $fLatReverse = null)
|
public function getOutlines($iPlaceID, $fLon = null, $fLat = null, $fRadius = null, $fLonReverse = null, $fLatReverse = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,11 @@ Feature: Searching linked places
|
|||||||
| object | linked_place_id |
|
| object | linked_place_id |
|
||||||
| N2 | R13 |
|
| N2 | R13 |
|
||||||
When sending search query "Vario"
|
When sending search query "Vario"
|
||||||
|
| namedetails |
|
||||||
|
| 1 |
|
||||||
Then results contain
|
Then results contain
|
||||||
| osm | display_name |
|
| osm | display_name | namedetails |
|
||||||
| R13 | Garbo |
|
| R13 | Garbo | "name": "Garbo", "name:it": "Vario" |
|
||||||
When sending search query "Vario"
|
When sending search query "Vario"
|
||||||
| accept-language |
|
| accept-language |
|
||||||
| it |
|
| it |
|
||||||
@@ -43,9 +45,11 @@ Feature: Searching linked places
|
|||||||
| object | linked_place_id |
|
| object | linked_place_id |
|
||||||
| N2 | R13 |
|
| N2 | R13 |
|
||||||
When sending search query "Vario"
|
When sending search query "Vario"
|
||||||
|
| namedetails |
|
||||||
|
| 1 |
|
||||||
Then results contain
|
Then results contain
|
||||||
| osm | display_name |
|
| osm | display_name | namedetails |
|
||||||
| R13 | Garbo |
|
| R13 | Garbo | "name": "Garbo", "_place_name": "Vario" |
|
||||||
When sending search query "Garbo"
|
When sending search query "Garbo"
|
||||||
Then results contain
|
Then results contain
|
||||||
| osm | display_name |
|
| osm | display_name |
|
||||||
|
|||||||
@@ -102,6 +102,9 @@ class GenericResponse:
|
|||||||
elif value.startswith("^"):
|
elif value.startswith("^"):
|
||||||
assert re.fullmatch(value, self.result[idx][field]), \
|
assert re.fullmatch(value, self.result[idx][field]), \
|
||||||
BadRowValueAssert(self, idx, field, value)
|
BadRowValueAssert(self, idx, field, value)
|
||||||
|
elif isinstance(self.result[idx][field], OrderedDict):
|
||||||
|
assert self.result[idx][field] == eval('{' + value + '}'), \
|
||||||
|
BadRowValueAssert(self, idx, field, value)
|
||||||
else:
|
else:
|
||||||
assert str(self.result[idx][field]) == str(value), \
|
assert str(self.result[idx][field]) == str(value), \
|
||||||
BadRowValueAssert(self, idx, field, value)
|
BadRowValueAssert(self, idx, field, value)
|
||||||
|
|||||||
Reference in New Issue
Block a user