X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/347f8e57c7c62de865b1bb35e72de7e3b2550d48..7879ad44cd1e36ae1235c3dcdfd9e477491813e4:/utils/setup.php diff --git a/utils/setup.php b/utils/setup.php index eff7b71b..4ed343df 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -1,7 +1,8 @@ #!/usr/bin/php -Cq connection, 'TRUNCATE placex')) fail(pg_last_error($oDB->connection)); echo '.'; + if (!pg_query($oDB->connection, 'TRUNCATE location_property_osmline')) fail(pg_last_error($oDB->connection)); + echo '.'; if (!pg_query($oDB->connection, 'TRUNCATE place_addressline')) fail(pg_last_error($oDB->connection)); echo '.'; if (!pg_query($oDB->connection, 'TRUNCATE place_boundingbox')) fail(pg_last_error($oDB->connection)); @@ -444,27 +447,70 @@ echo "Load Data\n"; $aDBInstances = array(); + + $aQueriesPlacex = array(); + $aQueriesOsmline = array(); + // the query is divided into parcels, so that the work between the processes, i.e. the DBInstances, will be evenly distributed + $iNumberOfParcels = 100; + for($i = 0; $i < $iNumberOfParcels; $i++) + { + $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, '; + $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, '; + $sSQL .= 'geometry) select * from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and not '; + $sSQL .= '(class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\');'; + array_push($aQueriesPlacex, $sSQL); + $sSQL = 'select insert_osmline (osm_id, housenumber, street, addr_place, postcode, country_code, '; + $sSQL .= 'geometry) from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and '; + $sSQL .= 'class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\''; + array_push($aQueriesOsmline, $sSQL); + } + for($i = 0; $i < $iInstances; $i++) { $aDBInstances[$i] =& getDB(true); - $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, '; - $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, '; - $sSQL .= 'geometry) select * from place where osm_id % '.$iInstances.' = '.$i; - if ($aCMDResult['verbose']) echo "$sSQL\n"; - if (!pg_send_query($aDBInstances[$i]->connection, $sSQL)) fail(pg_last_error($oDB->connection)); } - $bAnyBusy = true; - while($bAnyBusy) + // now execute the query blocks, in the first round for placex, then for osmline, + // because insert_osmline depends on the placex table + echo 'Inserting from place to placex.'; + $aQueries = $aQueriesPlacex; + for($j = 0; $j < 2; $j++) { - $bAnyBusy = false; - for($i = 0; $i < $iInstances; $i++) + $bAnyBusy = true; + while($bAnyBusy) { - if (pg_connection_busy($aDBInstances[$i]->connection)) $bAnyBusy = true; + $bAnyBusy = false; + + for($i = 0; $i < $iInstances; $i++) + { + if (pg_connection_busy($aDBInstances[$i]->connection)) + { + $bAnyBusy = true; + } + else if (count($aQueries) > 0) + { + $query = array_pop($aQueries); + if (!pg_send_query($aDBInstances[$i]->connection, $query)) + { + fail(pg_last_error($oDB->connection)); + } + else + { + pg_get_result($aDBInstances[$i]->connection); + $bAnyBusy = true; + } + } + } + sleep(1); + echo '.'; + } + echo "\n"; + if ($j == 0) //for the second round with osmline + { + echo 'Inserting from place to osmline.'; + $aQueries = $aQueriesOsmline; } - sleep(1); - echo '.'; } - echo "\n"; + echo "Reanalysing database...\n"; pgsqlRunScript('ANALYSE'); } @@ -551,7 +597,6 @@ $sSQL .= "avg(st_x(st_centroid(geometry))) as x,avg(st_y(st_centroid(geometry))) as y "; $sSQL .= "from placex where postcode is not null group by calculated_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,calculated_country_code,geometry) "; $sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,'us',"; $sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from us_postcode"; @@ -573,16 +618,16 @@ } else { - if (file_exists(CONST_BasePath.'/settings/configuration.txt')) + if (file_exists(CONST_InstallPath.'/settings/configuration.txt')) { echo "settings/configuration.txt already exists\n"; } else { - passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings'); + passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_InstallPath.'/settings'); // update osmosis configuration.txt with our settings - passthru("sed -i 's!baseUrl=.*!baseUrl=".CONST_Replication_Url."!' ".CONST_BasePath.'/settings/configuration.txt'); - passthru("sed -i 's:maxInterval = .*:maxInterval = ".CONST_Replication_MaxInterval.":' ".CONST_BasePath.'/settings/configuration.txt'); + passthru("sed -i 's!baseUrl=.*!baseUrl=".CONST_Replication_Url."!' ".CONST_InstallPath.'/settings/configuration.txt'); + passthru("sed -i 's:maxInterval = .*:maxInterval = ".CONST_Replication_MaxInterval.":' ".CONST_InstallPath.'/settings/configuration.txt'); } // Find the last node in the DB @@ -636,7 +681,7 @@ echo "Getting state file: $sRepURL\n"; $sStateFile = file_get_contents($sRepURL); if (!$sStateFile || strlen($sStateFile) > 1000) fail("unable to obtain state file"); - file_put_contents(CONST_BasePath.'/settings/state.txt', $sStateFile); + file_put_contents(CONST_InstallPath.'/settings/state.txt', $sStateFile); echo "Updating DB status\n"; pg_query($oDB->connection, 'TRUNCATE import_status'); $sSQL = "INSERT INTO import_status VALUES('".$aRepMatch[2]."')"; @@ -657,7 +702,7 @@ $bDidSomething = true; $sOutputFile = ''; if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output']; - $sBaseCmd = CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port'].' -t '.$iInstances.$sOutputFile; + $sBaseCmd = CONST_InstallPath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port'].' -t '.$iInstances.$sOutputFile; passthruCheckReturn($sBaseCmd.' -R 4'); if (!$aCMDResult['index-noanalyse']) pgsqlRunScript('ANALYSE'); passthruCheckReturn($sBaseCmd.' -r 5 -R 25'); @@ -709,14 +754,14 @@ fail("Target directory does not exist."); } - @symlink(CONST_BasePath.'/website/details.php', $sTargetDir.'/details.php'); - @symlink(CONST_BasePath.'/website/reverse.php', $sTargetDir.'/reverse.php'); - @symlink(CONST_BasePath.'/website/search.php', $sTargetDir.'/search.php'); - @symlink(CONST_BasePath.'/website/search.php', $sTargetDir.'/index.php'); - @symlink(CONST_BasePath.'/website/lookup.php', $sTargetDir.'/lookup.php'); - @symlink(CONST_BasePath.'/website/deletable.php', $sTargetDir.'/deletable.php'); - @symlink(CONST_BasePath.'/website/polygons.php', $sTargetDir.'/polygons.php'); - @symlink(CONST_BasePath.'/website/status.php', $sTargetDir.'/status.php'); + @symlink(CONST_InstallPath.'/website/details.php', $sTargetDir.'/details.php'); + @symlink(CONST_InstallPath.'/website/reverse.php', $sTargetDir.'/reverse.php'); + @symlink(CONST_InstallPath.'/website/search.php', $sTargetDir.'/search.php'); + @symlink(CONST_InstallPath.'/website/search.php', $sTargetDir.'/index.php'); + @symlink(CONST_InstallPath.'/website/lookup.php', $sTargetDir.'/lookup.php'); + @symlink(CONST_InstallPath.'/website/deletable.php', $sTargetDir.'/deletable.php'); + @symlink(CONST_InstallPath.'/website/polygons.php', $sTargetDir.'/polygons.php'); + @symlink(CONST_InstallPath.'/website/status.php', $sTargetDir.'/status.php'); @symlink(CONST_BasePath.'/website/images', $sTargetDir.'/images'); @symlink(CONST_BasePath.'/website/js', $sTargetDir.'/js'); @symlink(CONST_BasePath.'/website/css', $sTargetDir.'/css');