]> 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;
     }
+
+    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('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'),
@@ -28,20 +35,37 @@ getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
 $oDB = new Nominatim\DB;
 $oDB->connect();
 
+if (isset($aCMDResult['nodedupe'])) $aCMDResult['dedupe'] = 'false';
+
 $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 {
-    showUsage($aCMDOptions, true);
+    $oGeocode->setQueryFromParams($oParams);
 }
+
+$aSearchResults = $oGeocode->lookup();
+
+echo json_encode($aSearchResults, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)."\n";