]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge branch 'master' of github.com:twain47/Nominatim
authorBrian Quinion <brian.quinion@mapquest.com>
Thu, 23 Jan 2014 14:40:42 +0000 (14:40 +0000)
committerBrian Quinion <brian.quinion@mapquest.com>
Thu, 23 Jan 2014 14:40:42 +0000 (14:40 +0000)
lib/Geocode.php
website/search.php

index 48518dd340e5ef1ed9083a1cd787023ba8fb6a26..e3fa25b690f63c86507522567a25f6b5a92503ec 100644 (file)
@@ -20,6 +20,7 @@
                protected $iLimit = 20;
                protected $iFinalLimit = 10;
                protected $iOffset = 0;
+               protected $bFallback = false;
 
                protected $aCountryCodes = false;
                protected $aNearPoint = false;
                        $this->iOffset = $iOffset;
                }
 
+               function setFallback($bFallback = true)
+               {
+                       $this->bFallback = (bool)$bFallback;
+               }
+
                function setExcludedPlaceIDs($a)
                {
                        // TODO: force to int
                {
                        $this->sQuery = false;
 
+                       // Reset
+                       $this->iMinAddressRank = 0;
+                       $this->iMaxAddressRank = 30;
+                       $this->aAddressRankList = array();
+
                        $this->aStructuredQuery = array();
                        $this->sAllowedTypesSQLList = '';
 
                                        $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)
                        // No results? Done
                        if (!sizeof($aSearchResults))
                        {
+                               if ($this->bFallback)
+                               {
+                                       if ($this->fallbackStructuredQuery())
+                                       {
+                                               return $this->lookup();
+                                       }
+                               }
+
                                return array();
                        }
 
index 7e96e10e629ce7a208687190af3dc64477b25852..d4004ddbc3a40ba41e1a8c9edc232ff3761a7898 100755 (executable)
@@ -34,6 +34,8 @@
                if (isset($aParams['limit'])) $oGeocode->setLimit((int)$aParams['limit']);
                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
                if (isset($aParams['exclude_place_ids']) && $aParams['exclude_place_ids'])
                {