From cbddfcde5b1613949d173ccd751efc4018969a18 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Wed, 19 Feb 2020 10:20:18 +0100 Subject: [PATCH] add structured search to command-line query tool --- lib/ParameterParser.php | 11 +++++++++++ utils/query.php | 42 ++++++++++++++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/lib/ParameterParser.php b/lib/ParameterParser.php index cb03c6cc..ae252d67 100644 --- a/lib/ParameterParser.php +++ b/lib/ParameterParser.php @@ -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; + } } diff --git a/utils/query.php b/utils/query.php index f8047ffc..956bb566 100644 --- a/utils/query.php +++ b/utils/query.php @@ -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"; -- 2.45.2