From: gemo1011 Date: Thu, 17 May 2018 12:24:03 +0000 (+0200) Subject: deleted query for place nodes search if no polygon is found and added search for... X-Git-Tag: v3.2.0~60^2~23 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/10897787af9a3863645ca9b37cf76570bb57b1ed?hp=4d073b0350b5314698286becc4c0faf13b54bf1a deleted query for place nodes search if no polygon is found and added search for interpolation lines --- diff --git a/lib/ReverseGeocode.php b/lib/ReverseGeocode.php index a6d4b76f..93da7caf 100644 --- a/lib/ReverseGeocode.php +++ b/lib/ReverseGeocode.php @@ -68,51 +68,7 @@ class ReverseGeocode 'Could not determine closest housenumber on an osm interpolation line.' ); } - - protected function noPolygonfound($sPointSQL, $iMaxRank) - { - // search_rank => search diameter - $aRankDiam = array( - 18 => 0.2, - 17 => 0.6, - 12 => 0.8, - 10 => 1, - 8 => 2, - 4 => 3, - ); - - foreach ($aRankDiam as $key => $value) { - if ($key > $iMaxRank) continue; - - $sSQL = 'SELECT *'; - $sSQL .= ' FROM ('; - $sSQL .= ' SELECT place_id, rank_address,country_code, geometry,'; - $sSQL .= ' ST_distance('.$sPointSQL.', geometry) as distance'; - $sSQL .= ' FROM placex'; - $sSQL .= ' WHERE osm_type = \'N\''; - $sSQL .= ' AND rank_address > 0'; - $sSQL .= ' AND rank_address <= ' .$key; - $sSQL .= ' AND type != \'postcode\''; - $sSQL .= ' AND name IS NOT NULL '; - $sSQL .= ' and indexed_status = 0 and linked_place_id is null'; - $sSQL .= ' ORDER BY rank_address DESC, distance ASC'; - $sSQL .= ' limit 500) as a'; - $sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', geometry, '.$value.')'; - $sSQL .= ' ORDER BY rank_address DESC, distance ASC'; - $sSQL .= ' LIMIT 1'; - - if (CONST_Debug) var_dump($sSQL); - $aPlacNode = chksql( - $this->oDB->getRow($sSQL), - 'Could not determine place node.' - ); - if ($aPlacNode) { - return $aPlacNode; - break; - } - } - } - + protected function lookupPolygon($sPointSQL, $iMaxRank) { @@ -171,8 +127,6 @@ class ReverseGeocode return $aPlacNode; } } - }else{ - return $this->noPolygonfound ($sPointSQL, $iMaxRank); } return $aPoly; } @@ -197,6 +151,22 @@ class ReverseGeocode $fMaxAreaDistance = 1; $bIsTigerStreet = false; + // try with interpolations before continuing + if ($bDoInterpolation && $iMaxRank >= 30 ) { + $aHouse = $this->lookupInterpolation($sPointSQL, $fSearchDiam/3); + + if ($aHouse) { + $oResult = new Result($aHouse['place_id'], Result::TABLE_OSMLINE); + $oResult->iHouseNumber = closestHouseNumber($aHouse); + + $aPlace = $aHouse; + $iParentPlaceID = $aHouse['parent_place_id']; // the street + $iMaxRank = 30; + + return $oResult; + } + }// no interpolation found, continue search + // for POI or street level if ($iMaxRank >= 26) { $sSQL = 'select place_id,parent_place_id,rank_address,country_code,';