X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/91d72617e6d90dac20968ac34b6d981226280ffe..d45524cbfb299f5004a03c52802c64749c5ad212:/website/search.php diff --git a/website/search.php b/website/search.php index 11c98c69..776cfa78 100755 --- a/website/search.php +++ b/website/search.php @@ -1,57 +1,50 @@ setLanguagePreference($aLangPrefOrder); - if (isset($_GET['addressdetails'])) $oGeocode->setIncludeAddressDetails((bool)$_GET['addressdetails']); - if (isset($_GET['bounded'])) $oGeocode->setBounded((bool)$_GET['bounded']); - if (isset($_GET['dedupe'])) $oGeocode->setDedupe((bool)$_GET['dedupe']); - - if (isset($_GET['limit'])) $oGeocode->setLimit((int)$_GET['limit']); - if (isset($_GET['offset'])) $oGeocode->setOffset((int)$_GET['offset']); - - // Format for output - $sOutputFormat = 'html'; - if (isset($_GET['format']) && ($_GET['format'] == 'html' || $_GET['format'] == 'xml' || $_GET['format'] == 'json' || $_GET['format'] == 'jsonv2')) + if (CONST_Search_ReversePlanForAll + || isset($aLangPrefOrder['name:de']) + || isset($aLangPrefOrder['name:ru']) + || isset($aLangPrefOrder['name:ja']) + || isset($aLangPrefOrder['name:pl'])) { - $sOutputFormat = $_GET['format']; + $oGeocode->setReverseInPlan(true); } + // Format for output + $sOutputFormat = getParamSet('format', array('html', 'xml', 'json', 'jsonv2'), 'html'); + // Show / use polygons if ($sOutputFormat == 'html') { - if (isset($_GET['polygon'])) $oGeocode->setIncludePolygonAsText((bool)$_GET['polygon']); + $oGeocode->setIncludePolygonAsText(getParamBool('polygon')); } else { - $bAsPoints = (boolean)isset($_GET['polygon']) && $_GET['polygon']; - $bAsGeoJSON = (boolean)isset($_GET['polygon_geojson']) && $_GET['polygon_geojson']; - $bAsKML = (boolean)isset($_GET['polygon_kml']) && $_GET['polygon_kml']; - $bAsSVG = (boolean)isset($_GET['polygon_svg']) && $_GET['polygon_svg']; - $bAsText = (boolean)isset($_GET['polygon_text']) && $_GET['polygon_text']; + $bAsPoints = getParamBool('polygon'); + $bAsGeoJSON = getParamBool('polygon_geojson'); + $bAsKML = getParamBool('polygon_kml'); + $bAsSVG = getParamBool('polygon_svg'); + $bAsText = getParamBool('polygon_text'); if ( ( ($bAsGeoJSON?1:0) - + ($bAsKML?1:0) - + ($bAsSVG?1:0) - + ($bAsText?1:0) - + ($bAsPoints?1:0) - ) > CONST_PolygonOutput_MaximumTypes) + + ($bAsKML?1:0) + + ($bAsSVG?1:0) + + ($bAsText?1:0) + + ($bAsPoints?1:0) + ) > CONST_PolygonOutput_MaximumTypes) { if (CONST_PolygonOutput_MaximumTypes) { @@ -63,124 +56,75 @@ } exit; } - $oGeocode->setIncludePolygonAsText($bAsPoints); + $oGeocode->setIncludePolygonAsPoints($bAsPoints); $oGeocode->setIncludePolygonAsText($bAsText); $oGeocode->setIncludePolygonAsGeoJSON($bAsGeoJSON); $oGeocode->setIncludePolygonAsKML($bAsKML); $oGeocode->setIncludePolygonAsSVG($bAsSVG); } - // List of excluded Place IDs - used for more acurate pageing - if (isset($_GET['exclude_place_ids']) && $_GET['exclude_place_ids']) - { - foreach(explode(',',$_GET['exclude_place_ids']) as $iExcludedPlaceID) - { - $iExcludedPlaceID = (int)$iExcludedPlaceID; - if ($iExcludedPlaceID) $aExcludePlaceIDs[$iExcludedPlaceID] = $iExcludedPlaceID; - } - $oGeocode->setExcludedPlaceIds($aExcludePlaceIDs); - } + // Polygon simplification threshold (optional) + $oGeocode->setPolygonSimplificationThreshold(getParamFloat('polygon_threshold', 0.0)); - // Only certain ranks of feature - if (isset($_GET['featureType'])) $oGeocode->setFeatureType($_GET['featureType']); - if (isset($_GET['featuretype'])) $oGeocode->setFeatureType($_GET['featuretype']); + $oGeocode->loadParamArray($_GET); - // Country code list - if (isset($_GET['countrycodes'])) + if (CONST_Search_BatchMode && isset($_GET['batch'])) { - $aCountryCodes = array(); - foreach(explode(',',$_GET['countrycodes']) as $sCountryCode) + $aBatch = json_decode($_GET['batch'], true); + $aBatchResults = array(); + foreach($aBatch as $aBatchParams) { - if (preg_match('/^[a-zA-Z][a-zA-Z]$/', $sCountryCode)) - { - $aCountryCodes[] = strtolower($sCountryCode); - } + $oBatchGeocode = clone $oGeocode; + $oBatchGeocode->loadParamArray($aBatchParams); + $oBatchGeocode->setQueryFromParams($aBatchParams); + $aSearchResults = $oBatchGeocode->lookup(); + $aBatchResults[] = $aSearchResults; } - $oGeocode->setCountryCodeList($aCountryCodes); - } - - if (isset($_GET['viewboxlbrt']) && $_GET['viewboxlbrt']) - { - $aCoOrdinatesLBRT = explode(',',$_GET['viewboxlbrt']); - $oGeocode->setViewBox($aCoOrdinatesLBRT[0], $aCoOrdinatesLBRT[1], $aCoOrdinatesLBRT[2], $aCoOrdinatesLBRT[3]); - } - - if (isset($_GET['viewbox']) && $_GET['viewbox']) - { - $aCoOrdinatesLTRB = explode(',',$_GET['viewbox']); - $oGeocode->setViewBox($aCoOrdinatesLTRB[0], $aCoOrdinatesLTRB[3], $aCoOrdinatesLTRB[2], $aCoOrdinatesLTRB[1]); + include(CONST_BasePath.'/lib/template/search-batch-json.php'); + exit; } - - if (isset($_GET['route']) && $_GET['route'] && isset($_GET['routewidth']) && $_GET['routewidth']) + else { - $aPoints = explode(',',$_GET['route']); - if (sizeof($aPoints) % 2 != 0) + if (!getParamString('q') && isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'][0] == '/') { - userError("Uneven number of points"); - exit; + $sQuery = substr(rawurldecode($_SERVER['PATH_INFO']), 1); + + // reverse order of '/' separated string + $aPhrases = explode('/', $sQuery); + $aPhrases = array_reverse($aPhrases); + $sQuery = join(', ',$aPhrases); + $oGeocode->setQuery($sQuery); } - $fPrevCoord = false; - $aRoute = array(); - foreach($aPoints as $i => $fPoint) + else { - if ($i%2) - { - $aRoute[] = array((float)$fPoint, $fPrevCoord); - } - else - { - $fPrevCoord = (float)$fPoint; - } + $oGeocode->setQueryFromParams($_GET); } - $oGeocode->setRoute($aRoute); } - // Search query - $sQuery = (isset($_GET['q'])?trim($_GET['q']):''); - if (!$sQuery && isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'][0] == '/') - { - $sQuery = substr($_SERVER['PATH_INFO'], 1); - - // reverse order of '/' separated string - $aPhrases = explode('/', $sQuery); - $aPhrases = array_reverse($aPhrases); - $sQuery = join(', ',$aPhrases); - } - if (!$sQuery) - { - $oGeocode->setStructuredQuery(@$_GET['amenity'], @$_GET['street'], @$_GET['city'], @$_GET['county'], @$_GET['state'], @$_GET['country'], @$_GET['postalcode']); - } - else - { - $oGeocode->setQuery($sQuery); - } - - $hLog = logStart($oDB, 'search', $sQuery, $aLangPrefOrder); - - if (isset($_GET['batch'])) - { - $aBatch = json_decode($_GET['batch'], true); - foreach($aBatch as $aItem) { - var_dump($aItem); - } - exit; - } + $hLog = logStart($oDB, 'search', $oGeocode->getQueryString(), $aLangPrefOrder); $aSearchResults = $oGeocode->lookup(); if ($aSearchResults === false) $aSearchResults = array(); - $sDataDate = $oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"); - + if ($sOutputFormat=='html') + { + $sDataDate = $oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"); + } logEnd($oDB, $hLog, sizeof($aSearchResults)); $bAsText = $oGeocode->getIncludePolygonAsText(); $sQuery = $oGeocode->getQueryString(); + $sViewBox = $oGeocode->getViewBoxString(); + $bShowPolygons = (isset($_GET['polygon']) && $_GET['polygon']); + $aExcludePlaceIDs = $oGeocode->getExcludedPlaceIDs(); - $sMoreURL = CONST_Website_BaseURL.'search?format='.urlencode($sOutputFormat).'&exclude_place_ids='.join(',',$oGeocode->getExcludedPlaceIDs()); + $sMoreURL = CONST_Website_BaseURL.'search.php?format='.urlencode($sOutputFormat).'&exclude_place_ids='.join(',',$oGeocode->getExcludedPlaceIDs()); if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) $sMoreURL .= '&accept-language='.$_SERVER["HTTP_ACCEPT_LANGUAGE"]; - if (isset($_GET['polygon']) && isset($_GET['polygon'])) $sMoreURL .= '&polygon=1'; + if ($bShowPolygons) $sMoreURL .= '&polygon=1'; if ($oGeocode->getIncludeAddressDetails()) $sMoreURL .= '&addressdetails=1'; - if (isset($_GET['viewbox']) && $_GET['viewbox']) $sMoreURL .= '&viewbox='.urlencode($_GET['viewbox']); + if ($oGeocode->getIncludeExtraTags()) $sMoreURL .= '&extratags=1'; + if ($oGeocode->getIncludeNameDetails()) $sMoreURL .= '&namedetails=1'; + if ($sViewBox) $sMoreURL .= '&viewbox='.urlencode($sViewBox); if (isset($_GET['nearlat']) && isset($_GET['nearlon'])) $sMoreURL .= '&nearlat='.(float)$_GET['nearlat'].'&nearlon='.(float)$_GET['nearlon']; $sMoreURL .= '&q='.urlencode($sQuery);