$sSQL .= ' WHERE osm_type = \'N\'';
$sSQL .= ' AND country_code = \''.$sCountryCode.'\'';
$sSQL .= ' AND rank_address > 0';
- $sSQL .= ' AND rank_address <= ' .Min(25, $iMaxRank);
+ $sSQL .= ' AND rank_address <= ' .$iMaxRank;
$sSQL .= ' AND type != \'postcode\'';
$sSQL .= ' AND name IS NOT NULL ';
$sSQL .= ' and indexed_status = 0 and linked_place_id is null';
protected function lookupPolygon($sPointSQL, $iMaxRank)
{
-
- $oResult = null;
- $aPlace = null;
+ // polygon search begins at suburb-level
+ if ($iMaxRank > 25) $iMaxRank = 25;
+ // no polygon search over country-level
+ if ($iMaxRank < 4) $iMaxRank = 4;
$sSQL = 'SELECT * FROM';
$sSQL .= '(select place_id,parent_place_id,rank_address, rank_search, country_code, geometry';
$sSQL .= ' FROM placex';
$sSQL .= ' WHERE ST_GeometryType(geometry) in (\'ST_Polygon\', \'ST_MultiPolygon\')';
- $sSQL .= ' AND rank_address <= ' .Min(25, $iMaxRank);
+ $sSQL .= ' AND rank_address Between 4 AND ' .$iMaxRank;
$sSQL .= ' AND geometry && '.$sPointSQL;
$sSQL .= ' AND type != \'postcode\' ';
$sSQL .= ' AND name is not null';
$iPlaceID = $aPoly['place_id'];
if ($iRankAddress != $iMaxRank) {
+ //search diameter for the place node search
+ if ($iMaxRank <= 4) {
+ $fSearchDiam = 4;
+ } elseif ($iMaxRank <= 8) {
+ $fSearchDiam = 2;
+ } elseif ($iMaxRank <= 10) {
+ $fSearchDiam = 1;
+ } elseif ($iMaxRank <= 12) {
+ $fSearchDiam = 0.8;
+ } elseif ($iMaxRank <= 17) {
+ $fSearchDiam = 0.6;
+ } elseif ($iMaxRank <= 18) {
+ $fSearchDiam = 0.2;
+ } elseif ($iMaxRank <= 25) {
+ $fSearchDiam = 0.1;
+ }
+
$sSQL = 'SELECT *';
$sSQL .= ' FROM (';
$sSQL .= ' SELECT place_id, rank_address,country_code, geometry,';
if ($iRankAddress = 16) {
// using rank_search because of a better differentiation for place nodes at rank_address 16
$sSQL .= ' AND rank_search > '.$iRankSearch;
- $sSQL .= ' AND rank_search <= ' .Min(25, $iMaxRank);
+ $sSQL .= ' AND rank_search <= ' .$iMaxRank;
$sSQL .= ' AND class = \'place\'';
} else {
$sSQL .= ' AND rank_address > '.$iRankAddress;
- $sSQL .= ' AND rank_address <= ' .Min(25, $iMaxRank);
+ $sSQL .= ' AND rank_address <= ' .$iMaxRank;
}
+ $sSQL .= ' AND ST_DWithin('.$sPointSQL.', geometry, '.$fSearchDiam.')';
$sSQL .= ' AND type != \'postcode\'';
$sSQL .= ' AND name IS NOT NULL ';
$sSQL .= ' and indexed_status = 0 and linked_place_id is null';
$iParentPlaceID = $aPlace['parent_place_id'];
if ($bDoInterpolation && $iMaxRank >= 30) {
+ if ($aPlace['rank_address'] <=27) {
+ $iDistance = 0.001;
+ }
$aHouse = $this->lookupInterpolation($sPointSQL, $iDistance);
if ($aHouse) {
'Could not determine closest place.'
);
if ($aStreet) {
- $iDistance = $aPlace['distance'];
+ $iDistance = $aStreet['distance'];
$iPlaceID = $aStreet['place_id'];
$oResult = new Result($iPlaceID);
$iParentPlaceID = $aStreet['parent_place_id'];