]> git.openstreetmap.org Git - nominatim.git/commitdiff
php: prefer structured over free-form query
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 1 Aug 2023 15:54:59 +0000 (17:54 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 1 Aug 2023 15:54:59 +0000 (17:54 +0200)
This counters some problematic queries where street + housenumber
is put in the q parameter and then city, country etc into
structured parameters.

lib-php/Geocode.php

index 20edd9a5fe35485155011dadd591a5ea19b55a9f..3529d8356e774c61603a2e5cb941b0c076ea0a93 100644 (file)
@@ -257,19 +257,21 @@ class Geocode
     public function setQueryFromParams($oParams)
     {
         // Search query
-        $sQuery = $oParams->getString('q');
-        if (!$sQuery) {
-            $this->setStructuredQuery(
-                $oParams->getString('amenity'),
-                $oParams->getString('street'),
-                $oParams->getString('city'),
-                $oParams->getString('county'),
-                $oParams->getString('state'),
-                $oParams->getString('country'),
-                $oParams->getString('postalcode')
-            );
-        } else {
-            $this->setQuery($sQuery);
+        $this->setStructuredQuery(
+            $oParams->getString('amenity'),
+            $oParams->getString('street'),
+            $oParams->getString('city'),
+            $oParams->getString('county'),
+            $oParams->getString('state'),
+            $oParams->getString('country'),
+            $oParams->getString('postalcode')
+        );
+        if (!$this->sQuery) {
+            $sQuery = $oParams->getString('q');
+
+            if ($sQuery) {
+                $this->setQuery($sQuery);
+            }
         }
     }
 
@@ -294,26 +296,28 @@ class Geocode
     {
         $this->sQuery = false;
 
-        // Reset
-        $this->iMinAddressRank = 0;
-        $this->iMaxAddressRank = 30;
-        $this->aAddressRankList = array();
-
-        $this->aStructuredQuery = array();
-        $this->sAllowedTypesSQLList = false;
-
-        $this->loadStructuredAddressElement($sAmenity, 'amenity', 26, 30, false);
-        $this->loadStructuredAddressElement($sStreet, 'street', 26, 30, false);
-        $this->loadStructuredAddressElement($sCity, 'city', 14, 24, false);
-        $this->loadStructuredAddressElement($sCounty, 'county', 9, 13, false);
-        $this->loadStructuredAddressElement($sState, 'state', 8, 8, false);
-        $this->loadStructuredAddressElement($sPostalCode, 'postalcode', 5, 11, array(5, 11));
-        $this->loadStructuredAddressElement($sCountry, 'country', 4, 4, false);
-
-        if (!empty($this->aStructuredQuery)) {
-            $this->sQuery = join(', ', $this->aStructuredQuery);
-            if ($this->iMaxAddressRank < 30) {
-                $this->sAllowedTypesSQLList = '(\'place\',\'boundary\')';
+        if ($sAmenity || $sStreet || $sCity || $sCounty || $sState || $sCountry || $sPostalCode) {
+            // Reset
+            $this->iMinAddressRank = 0;
+            $this->iMaxAddressRank = 30;
+            $this->aAddressRankList = array();
+
+            $this->aStructuredQuery = array();
+            $this->sAllowedTypesSQLList = false;
+
+            $this->loadStructuredAddressElement($sAmenity, 'amenity', 26, 30, false);
+            $this->loadStructuredAddressElement($sStreet, 'street', 26, 30, false);
+            $this->loadStructuredAddressElement($sCity, 'city', 14, 24, false);
+            $this->loadStructuredAddressElement($sCounty, 'county', 9, 13, false);
+            $this->loadStructuredAddressElement($sState, 'state', 8, 8, false);
+            $this->loadStructuredAddressElement($sPostalCode, 'postalcode', 5, 11, array(5, 11));
+            $this->loadStructuredAddressElement($sCountry, 'country', 4, 4, false);
+
+            if (!empty($this->aStructuredQuery)) {
+                $this->sQuery = join(', ', $this->aStructuredQuery);
+                if ($this->iMaxAddressRank < 30) {
+                    $this->sAllowedTypesSQLList = '(\'place\',\'boundary\')';
+                }
             }
         }
     }