X-Git-Url: https://git.openstreetmap.org/nominatim.git/blobdiff_plain/4a321487f3d44241242a1729ab4d137df1f57bfb..cfb0f3f94ced30b8b44390367e07bc9b0cec787d:/utils/setup.php diff --git a/utils/setup.php b/utils/setup.php index dcce1ead..06216587 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -38,6 +38,7 @@ $aCMDOptions array('index', '', 0, 1, 0, 0, 'bool', 'Index the data'), array('index-noanalyse', '', 0, 1, 0, 0, 'bool', 'Do not perform analyse operations during index (EXPERT)'), array('create-search-indices', '', 0, 1, 0, 0, 'bool', 'Create additional indices required for search and update'), + array('create-country-names', '', 0, 1, 0, 0, 'bool', 'Create default list of searchable country names'), array('drop', '', 0, 1, 0, 0, 'bool', 'Drop tables needed for updates, making the database readonly (EXPERIMENTAL)'), ); getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true); @@ -123,8 +124,12 @@ if ($aCMDResult['setup-db'] || $aCMDResult['all']) { echo 'Postgis version found: '.$fPostgisVersion."\n"; if ($fPostgisVersion < 2.1) { - // Function was renamed in 2.1 and throws an annoying deprecation warning + // Functions were renamed in 2.1 and throw an annoying deprecation warning pgsqlRunScript('ALTER FUNCTION st_line_interpolate_point(geometry, double precision) RENAME TO ST_LineInterpolatePoint'); + pgsqlRunScript('ALTER FUNCTION ST_Line_Locate_Point(geometry, geometry) RENAME TO ST_LineLocatePoint'); + } + if ($fPostgisVersion < 2.2) { + pgsqlRunScript('ALTER FUNCTION ST_Distance_Spheroid(geometry, geometry, spheroid) RENAME TO ST_DistanceSpheroid'); } pgsqlRunScriptFile(CONST_BasePath.'/data/country_name.sql'); @@ -158,7 +163,8 @@ if ($aCMDResult['import-data'] || $aCMDResult['all']) { $osm2pgsql = CONST_Osm2pgsql_Binary; if (!file_exists($osm2pgsql)) { - echo "Please download and build osm2pgsql.\nIf it is already installed, check the path in your local settings (settings/local.php) file.\n"; + echo "Check CONST_Osm2pgsql_Binary in your local settings file.\n"; + echo "Normally you should not need to set this manually.\n"; fail("osm2pgsql not found in '$osm2pgsql'"); } @@ -340,7 +346,11 @@ if ($aCMDResult['load-data'] || $aCMDResult['all']) { } // used by getorcreate_word_id to ignore frequent partial words - if (!pg_query($oDB->connection, 'CREATE OR REPLACE FUNCTION get_maxwordfreq() RETURNS integer AS $$ SELECT '.CONST_Max_Word_Frequency.' as maxwordfreq; $$ LANGUAGE SQL IMMUTABLE')) fail(pg_last_error($oDB->connection)); + $sSQL = 'CREATE OR REPLACE FUNCTION get_maxwordfreq() RETURNS integer AS '; + $sSQL .= '$$ SELECT '.CONST_Max_Word_Frequency.' as maxwordfreq; $$ LANGUAGE SQL IMMUTABLE'; + if (!pg_query($oDB->connection, $sSQL)) { + fail(pg_last_error($oDB->connection)); + } echo ".\n"; // pre-create the word list @@ -590,6 +600,32 @@ if ($aCMDResult['create-search-indices'] || $aCMDResult['all']) { pgsqlRunScript($sTemplate); } +if ($aCMDResult['create-country-names'] || $aCMDResult['all']) { + echo 'Creating search index for default country names'; + $bDidSomething = true; + + pgsqlRunScript("select getorcreate_country(make_standard_name('uk'), 'gb')"); + pgsqlRunScript("select getorcreate_country(make_standard_name('united states'), 'us')"); + pgsqlRunScript("select count(*) from (select getorcreate_country(make_standard_name(country_code), country_code) from country_name where country_code is not null) as x"); + pgsqlRunScript("select count(*) from (select getorcreate_country(make_standard_name(name->'name'), country_code) from country_name where name ? 'name') as x"); + + $sSQL = 'select count(*) from (select getorcreate_country(make_standard_name(v), country_code) from (select country_code, skeys(name) as k, svals(name) as v from country_name) x where k '; + if (CONST_Languages) { + $sSQL .= 'in '; + $sDelim = '('; + foreach (explode(',', CONST_Languages) as $sLang) { + $sSQL .= $sDelim."'name:$sLang'"; + $sDelim = ','; + } + $sSQL .= ')'; + } else { + // all include all simple name tags + $sSQL .= "like 'name:%'"; + } + $sSQL .= ') v'; + pgsqlRunScript($sSQL); +} + if ($aCMDResult['drop']) { // The implementation is potentially a bit dangerous because it uses // a positive selection of tables to keep, and deletes everything else.