mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-15 19:07:58 +00:00
finally fix adminitrative spelling error, disable fast_update on indexes by default (performance), fixes for incremental updates on new codebase
This commit is contained in:
@@ -24,7 +24,11 @@
|
||||
array('load-data', '', 0, 1, 0, 0, 'bool', 'Copy data to live tables from import table'),
|
||||
array('import-tiger-data', '', 0, 1, 0, 0, 'bool', 'Import tiger data (not included in \'all\')'),
|
||||
array('calculate-postcodes', '', 0, 1, 0, 0, 'bool', 'Calculate postcode centroids'),
|
||||
array('create-roads', '', 0, 1, 0, 0, 'bool', 'Calculate postcode centroids'),
|
||||
array('osmosis-init', '', 0, 1, 0, 0, 'bool', 'Generate default osmosis configuration'),
|
||||
array('osmosis-init-date', '', 0, 1, 1, 1, 'string', 'Generate default osmosis configuration'),
|
||||
array('index', '', 0, 1, 0, 0, 'bool', 'Index the data'),
|
||||
array('index-output', '', 0, 1, 1, 1, 'string', 'File to dump index information to'),
|
||||
);
|
||||
getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
|
||||
|
||||
@@ -42,9 +46,20 @@
|
||||
$iInstances = getProcessorCount();
|
||||
echo "WARNING: resetting threads to $iInstances\n";
|
||||
}
|
||||
if (isset($aCMDResult['osm-file']) && !isset($aCMDResult['osmosis-init-date']))
|
||||
{
|
||||
$sBaseFile = basename($aCMDResult['osm-file']);
|
||||
if (preg_match('#^planet-([0-9]{2})([0-9]{2})([0-9]{2})[.]#', $sBaseFile, $aMatch))
|
||||
{
|
||||
$iTime = mktime(0, 0, 0, $aMatch[2], $aMatch[3], '20'.$aMatch[1]);
|
||||
$iTime -= (60*60*24);
|
||||
$aCMDResult['osmosis-init-date'] = date('Y-m-d', $iTime).'T22:00:00Z';
|
||||
}
|
||||
}
|
||||
|
||||
if ($aCMDResult['create-db'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Create DB\n";
|
||||
$bDidSomething = true;
|
||||
$oDB =& DB::connect(CONST_Database_DSN, false);
|
||||
if (!PEAR::isError($oDB))
|
||||
@@ -56,6 +71,7 @@
|
||||
|
||||
if ($aCMDResult['create-db'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Create DB (2)\n";
|
||||
$bDidSomething = true;
|
||||
// TODO: path detection, detection memory, etc.
|
||||
|
||||
@@ -77,7 +93,10 @@
|
||||
|
||||
if ($aCMDResult['import-data'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Import\n";
|
||||
$bDidSomething = true;
|
||||
|
||||
if (!file_exists(CONST_BasePath.'/osm2pgsql/osm2pgsql')) fail("please download and build osm2pgsql");
|
||||
passthru(CONST_BasePath.'/osm2pgsql/osm2pgsql -lsc -O gazetteer -C 10000 --hstore -d nominatim '.$aCMDResult['osm-file']);
|
||||
|
||||
$oDB =& getDB();
|
||||
@@ -87,6 +106,7 @@
|
||||
|
||||
if ($aCMDResult['create-functions'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Functions\n";
|
||||
$bDidSomething = true;
|
||||
if (!file_exists(CONST_BasePath.'/module/nominatim.so')) fail("nominatim module not built");
|
||||
$sTemplate = file_get_contents(CONST_BasePath.'/sql/functions.sql');
|
||||
@@ -96,6 +116,7 @@
|
||||
|
||||
if ($aCMDResult['create-tables'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Tables\n";
|
||||
$bDidSomething = true;
|
||||
pgsqlRunScriptFile(CONST_BasePath.'/sql/tables.sql');
|
||||
|
||||
@@ -107,10 +128,15 @@
|
||||
|
||||
if ($aCMDResult['create-partitions'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Partitions\n";
|
||||
$bDidSomething = true;
|
||||
echo "here";
|
||||
$oDB =& getDB();
|
||||
echo "there";
|
||||
$sSQL = 'select partition from country_name order by country_code';
|
||||
var_dump($sSQL);
|
||||
$aPartitions = $oDB->getCol($sSQL);
|
||||
var_dump($aPartitions);
|
||||
if (PEAR::isError($aPartitions))
|
||||
{
|
||||
fail($aPartitions->getMessage());
|
||||
@@ -121,9 +147,11 @@
|
||||
preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER);
|
||||
foreach($aMatches as $aMatch)
|
||||
{
|
||||
var_dump($aMatch);
|
||||
$sResult = '';
|
||||
foreach($aPartitions as $sPartitionName)
|
||||
{
|
||||
var_dump($sPartitionName);
|
||||
$sResult .= str_replace('-partition-', $sPartitionName, $aMatch[1]);
|
||||
}
|
||||
$sTemplate = str_replace($aMatch[0], $sResult, $sTemplate);
|
||||
@@ -134,6 +162,7 @@
|
||||
|
||||
if ($aCMDResult['load-data'] || $aCMDResult['all'])
|
||||
{
|
||||
echo "Load Data\n";
|
||||
$bDidSomething = true;
|
||||
|
||||
$oDB =& getDB();
|
||||
@@ -180,6 +209,35 @@
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
if ($aCMDResult['create-roads'])
|
||||
{
|
||||
$bDidSomething = true;
|
||||
|
||||
$oDB =& getDB();
|
||||
$aDBInstances = array();
|
||||
for($i = 0; $i < $iInstances; $i++)
|
||||
{
|
||||
$aDBInstances[$i] =& getDB(true);
|
||||
if (!pg_query($aDBInstances[$i]->connection, 'set enable_bitmapscan = off')) fail(pg_last_error($oDB->connection));
|
||||
$sSQL = 'select count(*) from (select insertLocationRoad(partition, place_id, country_code, geometry) from ';
|
||||
$sSQL .= 'placex where osm_id % '.$iInstances.' = '.$i.' and rank_search between 26 and 27 and class = \'highway\') as x ';
|
||||
if ($aCMDResult['verbose']) echo "$sSQL\n";
|
||||
if (!pg_send_query($aDBInstances[$i]->connection, $sSQL)) fail(pg_last_error($oDB->connection));
|
||||
}
|
||||
$bAnyBusy = true;
|
||||
while($bAnyBusy)
|
||||
{
|
||||
$bAnyBusy = false;
|
||||
for($i = 0; $i < $iInstances; $i++)
|
||||
{
|
||||
if (pg_connection_busy($aDBInstances[$i]->connection)) $bAnyBusy = true;
|
||||
}
|
||||
sleep(1);
|
||||
echo '.';
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
if ($aCMDResult['import-tiger-data'])
|
||||
{
|
||||
$bDidSomething = true;
|
||||
@@ -193,7 +251,6 @@
|
||||
foreach(glob(CONST_BasePath.'/data/tiger2009/*.sql') as $sFile)
|
||||
{
|
||||
echo $sFile.': ';
|
||||
if ((int)basename($sFile) <= 53033) continue;
|
||||
$hFile = fopen($sFile, "r");
|
||||
$sSQL = fgets($hFile, 100000);
|
||||
$iLines = 0;
|
||||
@@ -243,7 +300,7 @@
|
||||
$sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,country_code,";
|
||||
$sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from (select country_code,postcode,";
|
||||
$sSQL .= "avg(st_x(st_centroid(geometry))) as x,avg(st_y(st_centroid(geometry))) as y ";
|
||||
$sSQL .= "from place where postcode is not null group by country_code,postcode) as x";
|
||||
$sSQL .= "from placex where postcode is not null group by country_code,postcode) as x";
|
||||
if (!pg_query($oDB->connection, $sSQL)) fail(pg_last_error($oDB->connection));
|
||||
|
||||
$sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,country_code,geometry) ";
|
||||
@@ -252,10 +309,26 @@
|
||||
if (!pg_query($oDB->connection, $sSQL)) fail(pg_last_error($oDB->connection));
|
||||
}
|
||||
|
||||
if (($aCMDResult['osmosis-init'] || $aCMDResult['all']) && isset($aCMDResult['osmosis-init-date']))
|
||||
{
|
||||
$bDidSomething = true;
|
||||
|
||||
if (!file_exists(CONST_BasePath.'/osmosis-0.38/bin/osmosis')) fail("please download osmosis");
|
||||
if (file_exists(CONST_BasePath.'/settings/configuration.txt')) echo "settings/configuration.txt already exists\n";
|
||||
else passthru(CONST_BasePath.'/osmosis-0.38/bin/osmosis --read-replication-interval-init '.CONST_BasePath.'/settings');
|
||||
|
||||
$sDate = $aCMDResult['osmosis-init-date'];
|
||||
$sStateFile = file_get_contents('http://toolserver.org/~mazder/replicate-sequences/?'.$sDate);
|
||||
if (!$sStateFile || strlen($sStateFile) > 1000) fail("unable to obtain state file");
|
||||
file_put_contents(CONST_BasePath.'/settings/state.txt', $sStateFile);
|
||||
}
|
||||
|
||||
if ($aCMDResult['index'] || $aCMDResult['all'])
|
||||
{
|
||||
$bDidSomething = true;
|
||||
passthru(CONST_BasePath.'/nominatim/nominatim -i -d nominatim -t '.$iInstances);
|
||||
$sOutputFile = '';
|
||||
if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output'];
|
||||
passthru(CONST_BasePath.'/nominatim/nominatim -i -d nominatim -t '.$iInstances.$sOutputFile);
|
||||
}
|
||||
|
||||
if (!$bDidSomething)
|
||||
@@ -307,15 +380,22 @@
|
||||
$hProcess = proc_open($sCMD, $aDescriptors, $ahPipes);
|
||||
if (!is_resource($hProcess)) fail('unable to start pgsql');
|
||||
|
||||
echo "write";
|
||||
fwrite($ahPipes[0], $sScript);
|
||||
echo "close";
|
||||
fclose($ahPipes[0]);
|
||||
echo "done";
|
||||
|
||||
// TODO: error checking
|
||||
while(!feof($ahPipes[1]))
|
||||
{
|
||||
echo "read";
|
||||
echo fread($ahPipes[1], 4096);
|
||||
}
|
||||
echo "done";
|
||||
fclose($ahPipes[1]);
|
||||
|
||||
echo "done1";
|
||||
proc_close($hProcess);
|
||||
echo "done2";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user