From: Sarah Hoffmann Date: Mon, 12 Feb 2018 20:21:09 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~345 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/2bf546fbf4a4e3509978d3360060a3d2dc665c5c?hp=-c Merge remote-tracking branch 'upstream/master' --- 2bf546fbf4a4e3509978d3360060a3d2dc665c5c diff --combined CMakeLists.txt index 267784c3,91200022..d532bf55 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@@ -19,8 -19,8 +19,8 @@@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_ project(nominatim) set(NOMINATIM_VERSION_MAJOR 3) - set(NOMINATIM_VERSION_MINOR 0) - set(NOMINATIM_VERSION_PATCH 1) + set(NOMINATIM_VERSION_MINOR 1) + set(NOMINATIM_VERSION_PATCH 0) set(NOMINATIM_VERSION "${NOMINATIM_VERSION_MAJOR}.${NOMINATIM_VERSION_MINOR}.${NOMINATIM_VERSION_PATCH}") @@@ -93,14 -93,6 +93,14 @@@ set(CUSTOMFILE website/reverse.php website/search.php website/status.php + website/403.html + website/509.html + website/crossdomain.xml + website/favicon.ico + website/last_update.php + website/nominatim.xml + website/robots.txt + website/taginfo.json utils/blocks.php utils/country_languages.php utils/imports.php diff --combined lib/Geocode.php index 8276fe98,d5647c76..643af8e1 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@@ -19,7 -19,7 +19,7 @@@ class Geocod protected $bIncludeAddressDetails = false; protected $aExcludePlaceIDs = array(); - protected $bReverseInPlan = false; + protected $bReverseInPlan = true; protected $iLimit = 20; protected $iFinalLimit = 10; @@@ -225,14 -225,14 +225,14 @@@ $aViewbox = $oParams->getStringList('viewboxlbrt'); if ($aViewbox) { if (count($aViewbox) != 4) { - userError("Bad parmater 'viewboxlbrt'. Expected 4 coordinates."); + userError("Bad parameter 'viewboxlbrt'. Expected 4 coordinates."); } $this->setViewbox($aViewbox); } else { $aViewbox = $oParams->getStringList('viewbox'); if ($aViewbox) { if (count($aViewbox) != 4) { - userError("Bad parmater 'viewbox'. Expected 4 coordinates."); + userError("Bad parameter 'viewbox'. Expected 4 coordinates."); } $this->setViewBox($aViewbox); } else { @@@ -479,9 -479,9 +479,9 @@@ osm_id: id of corresponding OSM object class: general object class (corresponds to tag key of primary OSM tag) type: subclass of object (corresponds to tag value of primary OSM tag) - admin_level: see http://wiki.openstreetmap.org/wiki/Admin_level + admin_level: see https://wiki.openstreetmap.org/wiki/Admin_level rank_search: rank in search hierarchy - (see also http://wiki.openstreetmap.org/wiki/Nominatim/Development_overview#Country_to_street_level) + (see also https://wiki.openstreetmap.org/wiki/Nominatim/Development_overview#Country_to_street_level) rank_address: rank in address hierarchy (determines orer in address) place_id: internal key (may differ between different instances) country_code: ISO country code @@@ -535,9 -535,9 +535,9 @@@ // Conflicts between US state abreviations and various words for 'the' in different languages if (isset($this->aLangPrefOrder['name:en'])) { - $sQuery = preg_replace('/(^|,)\s*il\s*(,|$)/', '\1illinois\2', $sQuery); - $sQuery = preg_replace('/(^|,)\s*al\s*(,|$)/', '\1alabama\2', $sQuery); - $sQuery = preg_replace('/(^|,)\s*la\s*(,|$)/', '\1louisiana\2', $sQuery); + $sQuery = preg_replace('/(^|,)\s*il\s*(,|$)/i', '\1illinois\2', $sQuery); + $sQuery = preg_replace('/(^|,)\s*al\s*(,|$)/i', '\1alabama\2', $sQuery); + $sQuery = preg_replace('/(^|,)\s*la\s*(,|$)/i', '\1louisiana\2', $sQuery); } // Do we have anything that looks like a lat/lon pair? diff --combined lib/lib.php index 6c56d5d9,e283e836..d7ccf2d2 --- a/lib/lib.php +++ b/lib/lib.php @@@ -530,11 -530,12 +530,12 @@@ function parseLatLon($sQuery $sFound = $aData[0]; $fQueryLat = ($aData[1]=='N'?1:-1) * ($aData[2] + $aData[3]/60 + $aData[4]/3600); $fQueryLon = ($aData[5]=='E'?1:-1) * ($aData[6] + $aData[7]/60 + $aData[8]/3600); - } elseif (preg_match('/\\s*([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″" ]+([NS])[, ]+([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″" ]+([EW])\\s*/', $sQuery, $aData)) { - /* 1 2 3 4 5 6 7 8 + } elseif (preg_match('/\\s*([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+[0-9.]*)[″" ]+([NS])[, ]+([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+[0-9.]*)[″" ]+([EW])\\s*/', $sQuery, $aData)) { + /* 1 2 3 4 5 6 7 8 * degrees decimal seconds * 40 26 46 N 79 58 56 W * 40° 26′ 46″ N, 79° 58′ 56″ W + * 40° 26′ 46.78″ N, 79° 58′ 56.89″ W */ $sFound = $aData[0]; $fQueryLat = ($aData[4]=='N'?1:-1) * ($aData[1] + $aData[2]/60 + $aData[3]/3600); @@@ -584,10 -585,10 +585,10 @@@ function geometryText2Points($geometry_ // preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); // - } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) { +/* } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) { // preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); - // + */ } elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#', $geometry_as_text, $aMatch)) { // $aPolyPoints = createPointsAroundCenter($aMatch[1], $aMatch[2], $fRadius); diff --combined sql/functions.sql index 70580408,1829c63d..396487b1 --- a/sql/functions.sql +++ b/sql/functions.sql @@@ -2200,7 -2200,9 +2200,9 @@@ BEGI -- To paraphrase, if there isn't an existing item, OR if the admin level has changed IF existingplacex.osm_type IS NULL OR - (coalesce(existingplacex.admin_level, 15) != coalesce(NEW.admin_level, 15) AND existingplacex.class = 'boundary' AND existingplacex.type = 'administrative') + (existingplacex.class = 'boundary' AND + ((coalesce(existingplacex.admin_level, 15) != coalesce(NEW.admin_level, 15) AND existingplacex.type = 'administrative') OR + (existingplacex.type != NEW.type))) THEN IF existingplacex.osm_type IS NOT NULL THEN @@@ -2503,7 -2505,7 +2505,7 @@@ BEGI select placex.place_id, osm_type, osm_id, name, CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class, CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type, - admin_level, fromarea, isaddress, + admin_level, fromarea, isaddress and linked_place_id is NULL as isaddress, CASE WHEN address_place_id = for_place_id AND rank_address = 0 THEN 100 WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address, distance,country_code,postcode from place_addressline join placex on (address_place_id = placex.place_id) diff --combined utils/update.php index e3555488,cd907d75..62c07fac --- a/utils/update.php +++ b/utils/update.php @@@ -13,6 -13,7 +13,7 @@@ $aCMDOption array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'), array('init-updates', '', 0, 1, 0, 0, 'bool', 'Set up database for updating'), + array('check-for-updates', '', 0, 1, 0, 0, 'bool', 'Check if new updates are available'), array('import-osmosis', '', 0, 1, 0, 0, 'bool', 'Import updates once'), array('import-osmosis-all', '', 0, 1, 0, 0, 'bool', 'Import updates forever'), array('no-index', '', 0, 1, 0, 0, 'bool', 'Do not index the new data'), @@@ -39,7 -40,6 +40,7 @@@ getCmdOpt($_SERVER['argv'], $aCMDOptions, $aResult, true, true); if (!isset($aResult['index-instances'])) $aResult['index-instances'] = 1; + if (!isset($aResult['index-rank'])) $aResult['index-rank'] = 0; date_default_timezone_set('Etc/UTC'); @@@ -56,7 -56,7 +57,7 @@@ if ($iCacheMemory + 500 > getTotalMemor echo "WARNING: resetting cache memory to $iCacheMemory\n"; } $sOsm2pgsqlCmd = CONST_Osm2pgsql_Binary.' -klas --number-processes 1 -C '.$iCacheMemory.' -O gazetteer -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port']; - if (!is_null(CONST_Osm2pgsql_Flatnode_File)) { + if (!is_null(CONST_Osm2pgsql_Flatnode_File) && CONST_Osm2pgsql_Flatnode_File) { $sOsm2pgsqlCmd .= ' --flat-nodes '.CONST_Osm2pgsql_Flatnode_File; } @@@ -99,6 -99,17 +100,17 @@@ if ($aResult['init-updates']) echo "Done. Database updates will start at sequence $aOutput[0] ($sWindBack)\n"; } + if ($aResult['check-for-updates']) { + $aLastState = chksql($oDB->getRow('SELECT sequence_id FROM import_status')); + + if (!$aLastState['sequence_id']) { + fail('Updates not set up. Please run ./utils/update.php --init-updates.'); + } + + system(CONST_BasePath.'/utils/check_server_for_updates.py '.CONST_Replication_Url.' '.$aLastState['sequence_id'], $iRet); + exit($iRet); + } + if (isset($aResult['import-diff']) || isset($aResult['import-file'])) { // import diffs and files directly (e.g. from osmosis --rri) $sNextFile = isset($aResult['import-diff']) ? $aResult['import-diff'] : $aResult['import-file']; @@@ -252,7 -263,8 +264,8 @@@ if ($aResult['index']) if ($aResult['import-osmosis'] || $aResult['import-osmosis-all']) { // if (strpos(CONST_Replication_Url, 'download.geofabrik.de') !== false && CONST_Replication_Update_Interval < 86400) { - fail("Error: Update interval too low for download.geofabrik.de. Please check install documentation (http://nominatim.org/release-docs/latest/Import-and-Update#setting-up-the-update-process)\n"); + fail('Error: Update interval too low for download.geofabrik.de. ' . + "Please check install documentation (http://nominatim.org/release-docs/latest/Import-and-Update#setting-up-the-update-process)\n"); } $sImportFile = CONST_InstallPath.'/osmosischange.osc'; @@@ -289,7 -301,9 +302,9 @@@ $iNextSeq = (int) $aLastState['sequence_id']; unset($aOutput); echo "$sCMDDownload -I $iNextSeq\n"; - unlink($sImportFile); + if (file_exists($sImportFile)) { + unlink($sImportFile); + } exec($sCMDDownload.' -I '.$iNextSeq, $aOutput, $iResult); if ($iResult == 3) {