mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
reverse: do not prefer interpolations over closer housenumbers
Always look up the closest housenumber before looking up interpolations. This ensures that closer housenumbers are preferred over interpolations. Fixes #2214.
This commit is contained in:
@@ -280,29 +280,6 @@ class ReverseGeocode
|
|||||||
$iPlaceID = $aPlace['place_id'];
|
$iPlaceID = $aPlace['place_id'];
|
||||||
$oResult = new Result($iPlaceID);
|
$oResult = new Result($iPlaceID);
|
||||||
$iRankAddress = $aPlace['rank_address'];
|
$iRankAddress = $aPlace['rank_address'];
|
||||||
$iParentPlaceID = $aPlace['parent_place_id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bDoInterpolation && $iMaxRank >= 30) {
|
|
||||||
$fDistance = $fSearchDiam;
|
|
||||||
if ($aPlace) {
|
|
||||||
// We can't reliably go from the closest street to an
|
|
||||||
// interpolation line because the closest interpolation
|
|
||||||
// may have a different street segments as a parent.
|
|
||||||
// Therefore allow an interpolation line to take precendence
|
|
||||||
// even when the street is closer.
|
|
||||||
$fDistance = $iRankAddress < 28 ? 0.001 : $aPlace['distance'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$aHouse = $this->lookupInterpolation($sPointSQL, $fDistance);
|
|
||||||
Debug::printVar('Interpolation result', $aPlace);
|
|
||||||
|
|
||||||
if ($aHouse) {
|
|
||||||
$oResult = new Result($aHouse['place_id'], Result::TABLE_OSMLINE);
|
|
||||||
$oResult->iHouseNumber = closestHouseNumber($aHouse);
|
|
||||||
$aPlace = $aHouse;
|
|
||||||
$iRankAddress = 30;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($aPlace) {
|
if ($aPlace) {
|
||||||
@@ -328,7 +305,9 @@ class ReverseGeocode
|
|||||||
Debug::printVar('Closest POI result', $aStreet);
|
Debug::printVar('Closest POI result', $aStreet);
|
||||||
|
|
||||||
if ($aStreet) {
|
if ($aStreet) {
|
||||||
|
$aPlace = $aStreet;
|
||||||
$oResult = new Result($aStreet['place_id']);
|
$oResult = new Result($aStreet['place_id']);
|
||||||
|
$iRankAddress = 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,11 +330,37 @@ class ReverseGeocode
|
|||||||
Debug::printVar('Tiger house number result', $aPlaceTiger);
|
Debug::printVar('Tiger house number result', $aPlaceTiger);
|
||||||
|
|
||||||
if ($aPlaceTiger) {
|
if ($aPlaceTiger) {
|
||||||
|
$aPlace = $aPlaceTiger;
|
||||||
$oResult = new Result($aPlaceTiger['place_id'], Result::TABLE_TIGER);
|
$oResult = new Result($aPlaceTiger['place_id'], Result::TABLE_TIGER);
|
||||||
$oResult->iHouseNumber = closestHouseNumber($aPlaceTiger);
|
$oResult->iHouseNumber = closestHouseNumber($aPlaceTiger);
|
||||||
|
$iRankAddress = 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if ($bDoInterpolation && $iMaxRank >= 30) {
|
||||||
|
$fDistance = $fSearchDiam;
|
||||||
|
if ($aPlace) {
|
||||||
|
// We can't reliably go from the closest street to an
|
||||||
|
// interpolation line because the closest interpolation
|
||||||
|
// may have a different street segments as a parent.
|
||||||
|
// Therefore allow an interpolation line to take precendence
|
||||||
|
// even when the street is closer.
|
||||||
|
$fDistance = $iRankAddress < 28 ? 0.001 : $aPlace['distance'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$aHouse = $this->lookupInterpolation($sPointSQL, $fDistance);
|
||||||
|
Debug::printVar('Interpolation result', $aPlace);
|
||||||
|
|
||||||
|
if ($aHouse) {
|
||||||
|
$oResult = new Result($aHouse['place_id'], Result::TABLE_OSMLINE);
|
||||||
|
$oResult->iHouseNumber = closestHouseNumber($aHouse);
|
||||||
|
$aPlace = $aHouse;
|
||||||
|
$iRankAddress = 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$aPlace) {
|
||||||
// if no POI or street is found ...
|
// if no POI or street is found ...
|
||||||
$oResult = $this->lookupLargeArea($sPointSQL, 25);
|
$oResult = $this->lookupLargeArea($sPointSQL, 25);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,23 @@ Feature: Reverse geocoding
|
|||||||
| display_name |
|
| display_name |
|
||||||
| 1021, Grosssteg, Sücka, Triesenberg, Oberland, 9497, Liechtenstein |
|
| 1021, Grosssteg, Sücka, Triesenberg, Oberland, 9497, Liechtenstein |
|
||||||
|
|
||||||
|
# github 2214
|
||||||
|
Scenario: Interpolations do not override house numbers when they are closer
|
||||||
|
When sending jsonv2 reverse coordinates 47.11778,9.57255
|
||||||
|
| zoom |
|
||||||
|
| 18 |
|
||||||
|
Then results contain
|
||||||
|
| display_name |
|
||||||
|
| 5, Grosssteg, Steg, Triesenberg, Oberland, 9497, Liechtenstein |
|
||||||
|
|
||||||
|
Scenario: Interpolations do not override house numbers when they are closer (2)
|
||||||
|
When sending jsonv2 reverse coordinates 47.11834,9.57167
|
||||||
|
| zoom |
|
||||||
|
| 18 |
|
||||||
|
Then results contain
|
||||||
|
| display_name |
|
||||||
|
| 3, Grosssteg, Sücka, Triesenberg, Oberland, 9497, Liechtenstein |
|
||||||
|
|
||||||
Scenario: When on a street with zoom 18, the closest housenumber is returned
|
Scenario: When on a street with zoom 18, the closest housenumber is returned
|
||||||
When sending jsonv2 reverse coordinates 47.11755503977281,9.572722250405036
|
When sending jsonv2 reverse coordinates 47.11755503977281,9.572722250405036
|
||||||
| zoom |
|
| zoom |
|
||||||
|
|||||||
Reference in New Issue
Block a user