X-Git-Url: https://git.openstreetmap.org/nominatim.git/blobdiff_plain/54129a6f1590a44ef90e7c7ea6d7600c508f3733..5f941407b356fade1cec9671ea04853f7cfdc837:/lib/Geocode.php diff --git a/lib/Geocode.php b/lib/Geocode.php index 35c8541a..e5f3a157 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -133,6 +133,12 @@ $this->aViewBox = array($fLeft, $fBottom, $fRight, $fTop); } + function getViewBoxString() + { + if (!$this->aViewBox) return null; + return $this->aViewBox[0].','.$this->aViewBox[3].','.$this->aViewBox[2].','.$this->aViewBox[1]; + } + function setRoute($aRoutePoints) { $this->aRoutePoints = $aRoutePoints; @@ -212,6 +218,8 @@ function getDetails($aPlaceIDs, $iMinAddressRank = 0, $iMaxAddressRank = 30, $aAddressRankList = false, $sAllowedTypesSQLList = false, $bDeDupe = false) { + if (sizeof($aPlaceIDs) == 0) return array(); + $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$this->aLangPrefOrder))."]"; // Get the details for display (is this a redundant extra step?) @@ -291,7 +299,7 @@ $sCountryCodesSQL = false; if ($this->aCountryCodes && sizeof($this->aCountryCodes)) { - $sCountryCodesSQL = join(',', $this->aCountryCodes); + $sCountryCodesSQL = join(',', array_map('addQuotes', $this->aCountryCodes)); } // Hack to make it handle "new york, ny" (and variants) correctly @@ -319,7 +327,7 @@ $sViewboxSmallSQL = "ST_SetSRID(ST_MakeBox2D(ST_Point(".(float)$this->aViewBox[0].",".(float)$this->aViewBox[1]."),ST_Point(".(float)$this->aViewBox[2].",".(float)$this->aViewBox[3].")),4326)"; $sViewboxLargeSQL = "ST_SetSRID(ST_MakeBox2D(ST_Point(".(float)$aBigViewBox[0].",".(float)$aBigViewBox[1]."),ST_Point(".(float)$aBigViewBox[2].",".(float)$aBigViewBox[3].")),4326)"; - $bBoundingBoxSearch = true; + $bBoundingBoxSearch = $this->bBoundedSearch; } // Route SQL @@ -349,7 +357,7 @@ failInternalError("Could not get large viewbox.", $sSQL, $sViewboxLargeSQL); } $sViewboxLargeSQL = "'".$sViewboxLargeSQL."'::geometry"; - $bBoundingBoxSearch = true; + $bBoundingBoxSearch = $this->bBoundedSearch; } // Do we have anything that looks like a lat/lon pair? @@ -385,7 +393,7 @@ } $aSearchResults = array(); - if ($sQuery || $aStructuredQuery) + if ($sQuery || $this->aStructuredQuery) { // Start with a blank search $aSearches = array( @@ -971,11 +979,12 @@ if (CONST_Debug) { echo "
Search Loop, group $iGroupLoop, loop $iQueryLoop"; } if (CONST_Debug) _debugDumpGroupedSearches(array($iGroupedRank => array($aSearch)), $aValidTokens); - // Must have a location term + // No location term? if (!sizeof($aSearch['aName']) && !sizeof($aSearch['aAddress']) && !$aSearch['fLon']) { if ($aSearch['sCountryCode'] && !$aSearch['sClass'] && !$aSearch['sHouseNumber']) { + // Just looking for a country by code - look it up if (4 >= $this->iMinAddressRank && 4 <= $this->iMaxAddressRank) { $sSQL = "select place_id from placex where calculated_country_code='".$aSearch['sCountryCode']."' and rank_search = 4"; @@ -1334,7 +1343,10 @@ { // Just interpret as a reverse geocode $iPlaceID = geocodeReverse((float)$this->aNearPoint[0], (float)$this->aNearPoint[1]); - $aSearchResults = $this->getDetails(array($iPlaceID)); + if ($iPlaceID) + $aSearchResults = $this->getDetails(array($iPlaceID)); + else + $aSearchResults = array(); } // No results? Done