nominatim fallback mode for structured queries

This commit is contained in:
Brian Quinion
2014-01-23 14:40:37 +00:00
parent 65ea0efe68
commit 47fdb33adf
2 changed files with 43 additions and 0 deletions

View File

@@ -20,6 +20,7 @@
protected $iLimit = 20; protected $iLimit = 20;
protected $iFinalLimit = 10; protected $iFinalLimit = 10;
protected $iOffset = 0; protected $iOffset = 0;
protected $bFallback = false;
protected $aCountryCodes = false; protected $aCountryCodes = false;
protected $aNearPoint = false; protected $aNearPoint = false;
@@ -117,6 +118,11 @@
$this->iOffset = $iOffset; $this->iOffset = $iOffset;
} }
function setFallback($bFallback = true)
{
$this->bFallback = (bool)$bFallback;
}
function setExcludedPlaceIDs($a) function setExcludedPlaceIDs($a)
{ {
// TODO: force to int // TODO: force to int
@@ -213,6 +219,11 @@
{ {
$this->sQuery = false; $this->sQuery = false;
// Reset
$this->iMinAddressRank = 0;
$this->iMaxAddressRank = 30;
$this->aAddressRankList = array();
$this->aStructuredQuery = array(); $this->aStructuredQuery = array();
$this->sAllowedTypesSQLList = ''; $this->sAllowedTypesSQLList = '';
@@ -232,7 +243,29 @@
$sAllowedTypesSQLList = '(\'place\',\'boundary\')'; $sAllowedTypesSQLList = '(\'place\',\'boundary\')';
} }
} }
}
function fallbackStructuredQuery()
{
if (!$this->aStructuredQuery) return false;
$aParams = $this->aStructuredQuery;
if (sizeof($aParams) == 1) return false;
$aOrderToFallback = array('postalcode', 'street', 'city', 'county', 'state');
foreach($aOrderToFallback as $sType)
{
if (isset($aParams[$sType]))
{
unset($aParams[$sType]);
$this->setStructuredQuery(@$aParams['amenity'], @$aParams['street'], @$aParams['city'], @$aParams['county'], @$aParams['state'], @$aParams['country'], @$aParams['postalcode']);
return true;
}
}
return false;
} }
function getDetails($aPlaceIDs) function getDetails($aPlaceIDs)
@@ -1374,6 +1407,14 @@
// No results? Done // No results? Done
if (!sizeof($aSearchResults)) if (!sizeof($aSearchResults))
{ {
if ($this->bFallback)
{
if ($this->fallbackStructuredQuery())
{
return $this->lookup();
}
}
return array(); return array();
} }

View File

@@ -34,6 +34,8 @@
if (isset($aParams['limit'])) $oGeocode->setLimit((int)$aParams['limit']); if (isset($aParams['limit'])) $oGeocode->setLimit((int)$aParams['limit']);
if (isset($aParams['offset'])) $oGeocode->setOffset((int)$aParams['offset']); if (isset($aParams['offset'])) $oGeocode->setOffset((int)$aParams['offset']);
if (isset($aParams['fallback'])) $oGeocode->setFallback((int)$aParams['fallback']);
// List of excluded Place IDs - used for more acurate pageing // List of excluded Place IDs - used for more acurate pageing
if (isset($aParams['exclude_place_ids']) && $aParams['exclude_place_ids']) if (isset($aParams['exclude_place_ids']) && $aParams['exclude_place_ids'])
{ {