+
+ echo "Creating indexes\n";
+ pgsqlRunScriptFile(CONST_BasePath.'/sql/tiger_import_finish.sql');
+ }
+
+ if ($aCMDResult['calculate-postcodes'] || $aCMDResult['all'])
+ {
+ $bDidSomething = true;
+ $oDB =& getDB();
+ if (!pg_query($oDB->connection, 'DELETE from placex where osm_type=\'P\'')) fail(pg_last_error($oDB->connection));
+ $sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,country_code,geometry) ";
+ $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 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) ";
+ $sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,'us',";
+ $sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from us_postcode";
+ 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;
+ $oDB =& getDB();
+
+ if (!file_exists(CONST_Osmosis_Binary)) fail("please download osmosis");
+ if (file_exists(CONST_BasePath.'/settings/configuration.txt')) echo "settings/configuration.txt already exists\n";
+ else passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings');
+
+ $sDate = $aCMDResult['osmosis-init-date'];
+ $aDate = date_parse_from_format("Y-m-d\TH-i", $sDate);
+ $sURL = 'http://toolserver.org/~mazder/replicate-sequences/?';
+ $sURL .= 'Y='.$aDate['year'].'&m='.$aDate['month'].'&d='.$aDate['day'];
+ $sURL .= '&H='.$aDate['hour'].'&i='.$aDate['minute'].'&s=0';
+ $sURL .= '&stream=minute';
+ echo "Getting state file: $sURL\n";
+ $sStateFile = file_get_contents($sURL);
+ if (!$sStateFile || strlen($sStateFile) > 1000) fail("unable to obtain state file");
+ file_put_contents(CONST_BasePath.'/settings/state.txt', $sStateFile);
+ echo "Updating DB status\n";
+ pg_query($oDB->connection, 'TRUNCATE import_status');
+ $sSQL = "INSERT INTO import_status VALUES('".$sDate."')";
+ pg_query($oDB->connection, $sSQL);
+
+ }
+
+ if ($aCMDResult['index'] || $aCMDResult['all'])
+ {
+ $bDidSomething = true;
+ $sOutputFile = '';
+ if (isset($aCMDResult['index-output'])) $sOutputFile = ' -F '.$aCMDResult['index-output'];
+ $sBaseCmd = CONST_BasePath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -t '.$iInstances.$sOutputFile;
+ passthruCheckReturn($sBaseCmd.' -R 4');
+ if (!$aCMDResult['index-noanalyse']) pgsqlRunScript('ANALYSE');
+ passthruCheckReturn($sBaseCmd.' -r 5 -R 25');
+ if (!$aCMDResult['index-noanalyse']) pgsqlRunScript('ANALYSE');
+ passthruCheckReturn($sBaseCmd.' -r 26');
+ }
+
+ if ($aCMDResult['create-search-indices'] || $aCMDResult['all'])
+ {
+ echo "Search indices\n";
+ $bDidSomething = true;
+ $oDB =& getDB();
+ $sSQL = 'select partition from country_name order by country_code';
+ $aPartitions = $oDB->getCol($sSQL);
+ if (PEAR::isError($aPartitions))
+ {
+ fail($aPartitions->getMessage());
+ }
+ $aPartitions[] = 0;
+
+ $sTemplate = file_get_contents(CONST_BasePath.'/sql/indices.src.sql');
+ preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER);
+ foreach($aMatches as $aMatch)
+ {
+ $sResult = '';
+ foreach($aPartitions as $sPartitionName)
+ {
+ $sResult .= str_replace('-partition-', $sPartitionName, $aMatch[1]);
+ }
+ $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate);
+ }
+
+ pgsqlRunScript($sTemplate);
+ }
+
+ if (isset($aCMDResult['create-website']))
+ {
+ $bDidSomething = true;
+ $sTargetDir = $aCMDResult['create-website'];
+ if (!is_dir($sTargetDir))
+ {
+ echo "You must create the website directory before calling this function.\n";
+ 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/images', $sTargetDir.'/images');
+ @symlink(CONST_BasePath.'/website/js', $sTargetDir.'/js');
+ echo "Symlinks created\n";