]> git.openstreetmap.org Git - nominatim.git/commitdiff
add structured search to command-line query tool
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 19 Feb 2020 09:20:18 +0000 (10:20 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 19 Feb 2020 10:04:07 +0000 (11:04 +0100)
lib/ParameterParser.php
utils/query.php

index cb03c6cc7c25c77f3b73f3b2347628a328734f83..ae252d6795b9e6f63ff50704c163091fac8ac25a 100644 (file)
@@ -118,4 +118,15 @@ class ParameterParser
         $aLangPrefOrder['type'] = 'type';
         return $aLangPrefOrder;
     }
         $aLangPrefOrder['type'] = 'type';
         return $aLangPrefOrder;
     }
+
+    public function hasSetAny($aParams)
+    {
+        foreach ($aParams as $sParam) {
+            if ($this->getBool($sParam)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 }
 }
index f8047ffcf2ec84f2ed36877f90238b424db630fa..956bb56634bddd79ad295d1b7cd9d75a4fd552f3 100644 (file)
@@ -13,6 +13,13 @@ $aCMDOptions
    array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
 
    array('search', '', 0, 1, 1, 1, 'string', 'Search for given term or coordinate'),
    array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
 
    array('search', '', 0, 1, 1, 1, 'string', 'Search for given term or coordinate'),
+   array('country', '', 0, 1, 1, 1, 'string', 'Structured search: country'),
+   array('state', '', 0, 1, 1, 1, 'string', 'Structured search: state'),
+   array('county', '', 0, 1, 1, 1, 'string', 'Structured search: county'),
+   array('city', '', 0, 1, 1, 1, 'string', 'Structured search: city'),
+   array('street', '', 0, 1, 1, 1, 'string', 'Structured search: street'),
+   array('amenity', '', 0, 1, 1, 1, 'string', 'Structured search: amenity'),
+   array('postalcode', '', 0, 1, 1, 1, 'string', 'Structured search: postal code'),
 
    array('accept-language', '', 0, 1, 1, 1, 'string', 'Preferred language order for showing search results'),
    array('bounded', '', 0, 1, 0, 0, 'bool', 'Restrict results to given viewbox'),
 
    array('accept-language', '', 0, 1, 1, 1, 'string', 'Preferred language order for showing search results'),
    array('bounded', '', 0, 1, 0, 0, 'bool', 'Restrict results to given viewbox'),
@@ -28,20 +35,37 @@ getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
 $oDB = new Nominatim\DB;
 $oDB->connect();
 
 $oDB = new Nominatim\DB;
 $oDB->connect();
 
+if (isset($aCMDResult['nodedupe'])) $aCMDResult['dedupe'] = 'false';
+
 $oParams = new Nominatim\ParameterParser($aCMDResult);
 
 $oParams = new Nominatim\ParameterParser($aCMDResult);
 
-if ($oParams->getBool('search')) {
-    if (isset($aCMDResult['nodedupe'])) $aCMDResult['dedupe'] = 'false';
+$aSearchParams = array(
+                     'search',
+                     'amenity',
+                     'street',
+                     'city',
+                     'county',
+                     'state',
+                     'country',
+                     'postalcode'
+                 );
 
 
-    $oGeocode = new Nominatim\Geocode($oDB);
+if (!$oParams->hasSetAny($aSearchParams)) {
+    showUsage($aCMDOptions, true);
+    return 1;
+}
 
 
-    $oGeocode->setLanguagePreference($oParams->getPreferredLanguages(false));
-    $oGeocode->loadParamArray($oParams);
-    $oGeocode->setQuery($aCMDResult['search']);
+$oGeocode = new Nominatim\Geocode($oDB);
 
 
-    $aSearchResults = $oGeocode->lookup();
+$oGeocode->setLanguagePreference($oParams->getPreferredLanguages(false));
+$oGeocode->loadParamArray($oParams);
 
 
-    echo json_encode($aSearchResults, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)."\n";
+if ($oParams->getBool('search')) {
+    $oGeocode->setQuery($aCMDResult['search']);
 } else {
 } else {
-    showUsage($aCMDOptions, true);
+    $oGeocode->setQueryFromParams($oParams);
 }
 }
+
+$aSearchResults = $oGeocode->lookup();
+
+echo json_encode($aSearchResults, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)."\n";