X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/adbbb1ce02649e7acfefa2156f836bf04dd68a55..a8a700e16d286971c43c013b322a1fd4a339de4d:/lib/ReverseGeocode.php diff --git a/lib/ReverseGeocode.php b/lib/ReverseGeocode.php index ce2ee5e5..e538620a 100644 --- a/lib/ReverseGeocode.php +++ b/lib/ReverseGeocode.php @@ -65,7 +65,7 @@ class ReverseGeocode return chksql( $this->oDB->getRow($sSQL), - "Could not determine closest housenumber on an osm interpolation line." + 'Could not determine closest housenumber on an osm interpolation line.' ); } @@ -132,16 +132,17 @@ class ReverseGeocode $sSQL .= ' LIMIT 1000) as p WHERE'; } $sSQL .= ' rank_search != 28 and rank_search >= '.$iMaxRank; - $sSQL .= ' and (name is not null or housenumber is not null)'; + $sSQL .= ' and (name is not null or housenumber is not null'; + $sSQL .= ' or rank_search between 26 and 27)'; $sSQL .= ' and class not in (\'waterway\',\'railway\',\'tunnel\',\'bridge\',\'man_made\')'; - $sSQL .= ' and indexed_status = 0 '; + $sSQL .= ' and indexed_status = 0 and linked_place_id is null'; $sSQL .= ' and (ST_GeometryType(geometry) not in (\'ST_Polygon\',\'ST_MultiPolygon\') '; $sSQL .= ' OR ST_DWithin('.$sPointSQL.', centroid, '.$fSearchDiam.'))'; $sSQL .= ' ORDER BY distance ASC limit 1'; if (CONST_Debug) var_dump($sSQL); $aPlace = chksql( $this->oDB->getRow($sSQL), - "Could not determine closest place." + 'Could not determine closest place.' ); if ($aPlace) { $oResult = new Result($aPlace['place_id']); @@ -186,7 +187,7 @@ class ReverseGeocode $aPlaceTiger = chksql( $this->oDB->getRow($sSQL), - "Could not determine closest Tiger place." + 'Could not determine closest Tiger place.' ); if ($aPlaceTiger) { if (CONST_Debug) var_dump('found Tiger housenumber', $aPlaceTiger); @@ -205,12 +206,12 @@ class ReverseGeocode } else { $iPlaceID = $oResult->iId; } - $sSQL = 'select address_place_id'; - $sSQL .= ' FROM place_addressline'; - $sSQL .= " WHERE place_id = $iPlaceID"; + $sSQL = 'select coalesce(p.linked_place_id, a.address_place_id)'; + $sSQL .= ' FROM place_addressline a, placex p'; + $sSQL .= " WHERE a.place_id = $iPlaceID and a.place_id = p.place_id"; $sSQL .= " ORDER BY abs(cached_rank_address - $iMaxRank) asc,cached_rank_address desc,isaddress desc,distance desc"; $sSQL .= ' LIMIT 1'; - $iPlaceID = chksql($this->oDB->getOne($sSQL), "Could not get parent for place."); + $iPlaceID = chksql($this->oDB->getOne($sSQL), 'Could not get parent for place.'); if ($iPlaceID) { $oResult = new Result($iPlaceID); }