2010-12-13 18:55:52 +03:00
|
|
|
#!/usr/bin/php -Cq
|
|
|
|
<?php
|
|
|
|
|
|
|
|
require_once(dirname(dirname(__FILE__)).'/lib/init-cmd.php');
|
|
|
|
ini_set('memory_limit', '800M');
|
2012-02-14 02:37:03 +04:00
|
|
|
ini_set('display_errors', 'stderr');
|
2010-12-13 18:55:52 +03:00
|
|
|
|
|
|
|
$aCMDOptions = array(
|
|
|
|
"Import and export special phrases",
|
|
|
|
array('help', 'h', 0, 1, 0, 0, false, 'Show Help'),
|
|
|
|
array('quiet', 'q', 0, 1, 0, 0, 'bool', 'Quiet output'),
|
|
|
|
array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
|
|
|
|
|
|
|
|
array('wiki-import', '', 0, 1, 0, 0, 'bool', 'Create nominatim db'),
|
|
|
|
);
|
|
|
|
getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
|
|
|
|
|
|
|
|
$aLanguageIn = array(
|
|
|
|
'af',
|
|
|
|
'ar',
|
|
|
|
'br',
|
|
|
|
'ca',
|
|
|
|
'cs',
|
|
|
|
'de',
|
|
|
|
'en',
|
|
|
|
'es',
|
|
|
|
'et',
|
|
|
|
'eu',
|
|
|
|
'fa',
|
|
|
|
'fi',
|
|
|
|
'fr',
|
|
|
|
'gl',
|
|
|
|
'hr',
|
|
|
|
'hu',
|
|
|
|
'ia',
|
|
|
|
'is',
|
|
|
|
'it',
|
|
|
|
'ja',
|
|
|
|
'mk',
|
|
|
|
'nl',
|
|
|
|
'no',
|
|
|
|
'pl',
|
|
|
|
'ps',
|
|
|
|
'pt',
|
|
|
|
'ru',
|
|
|
|
'sk',
|
|
|
|
'sv',
|
|
|
|
'uk',
|
|
|
|
'vi',
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($aCMDResult['wiki-import'])
|
|
|
|
{
|
2011-01-05 17:07:26 +03:00
|
|
|
$aPairs = array();
|
|
|
|
|
2010-12-13 18:55:52 +03:00
|
|
|
foreach($aLanguageIn as $sLanguage)
|
|
|
|
{
|
|
|
|
$sURL = 'http://wiki.openstreetmap.org/wiki/Special:Export/Nominatim/Special_Phrases/'.strtoupper($sLanguage);
|
|
|
|
$sWikiPageXML = file_get_contents($sURL);
|
2011-01-05 17:07:26 +03:00
|
|
|
if (preg_match_all('#\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([\\-YN])#', $sWikiPageXML, $aMatches, PREG_SET_ORDER))
|
2010-12-13 18:55:52 +03:00
|
|
|
{
|
|
|
|
foreach($aMatches as $aMatch)
|
|
|
|
{
|
|
|
|
$sLabel = $aMatch[1];
|
|
|
|
$sClass = $aMatch[2];
|
|
|
|
$sType = $aMatch[3];
|
2012-02-14 02:37:03 +04:00
|
|
|
# hack around a bug where building=yes was imported with
|
|
|
|
# quotes into the wiki
|
|
|
|
$sType = preg_replace('/"/', '', $sType);
|
|
|
|
# sanity check, in case somebody added garbage in the wiki
|
|
|
|
if (preg_match('/^\\w+$/', $sClass) < 1 ||
|
|
|
|
preg_match('/^\\w+$/', $sType) < 1) {
|
|
|
|
trigger_error("Bad class/type for language $sLanguage: $sClass=$sType");
|
|
|
|
exit;
|
|
|
|
}
|
2011-01-05 17:07:26 +03:00
|
|
|
$aPairs[$sClass.'|'.$sType] = array($sClass, $sType);
|
2010-12-13 18:55:52 +03:00
|
|
|
|
|
|
|
switch(trim($aMatch[4]))
|
|
|
|
{
|
|
|
|
case 'near':
|
|
|
|
echo "select getorcreate_amenityoperator(make_standard_name('".pg_escape_string($sLabel)."'), '$sClass', '$sType', 'near');\n";
|
|
|
|
break;
|
|
|
|
case 'in':
|
2011-01-05 17:07:26 +03:00
|
|
|
echo "select getorcreate_amenityoperator(make_standard_name('".pg_escape_string($sLabel)."'), '$sClass', '$sType', 'in');\n";
|
2010-12-13 18:55:52 +03:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
echo "select getorcreate_amenity(make_standard_name('".pg_escape_string($sLabel)."'), '$sClass', '$sType');\n";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-01-05 17:07:26 +03:00
|
|
|
|
2012-02-19 14:33:21 +04:00
|
|
|
echo "create index idx_placex_classtype on placex (class, type);\n";
|
2012-01-29 03:27:25 +04:00
|
|
|
|
2011-01-05 17:07:26 +03:00
|
|
|
foreach($aPairs as $aPair)
|
|
|
|
{
|
2011-01-21 13:40:44 +03:00
|
|
|
if ($aPair[1] == 'highway') continue;
|
2011-01-05 17:07:26 +03:00
|
|
|
|
2012-02-19 14:33:21 +04:00
|
|
|
echo "drop table if exists place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1]).";\n";
|
2011-01-05 17:07:26 +03:00
|
|
|
echo "create table place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." as ";
|
|
|
|
echo "select place_id as place_id,st_centroid(geometry) as centroid from placex where ";
|
2012-01-29 03:27:25 +04:00
|
|
|
echo "class = '".pg_escape_string($aPair[0])."' and type = '".pg_escape_string($aPair[1])."';\n";
|
2011-01-05 17:07:26 +03:00
|
|
|
|
|
|
|
echo "CREATE INDEX idx_place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])."_centroid ";
|
|
|
|
echo "ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." USING GIST (centroid);\n";
|
|
|
|
|
|
|
|
echo "CREATE INDEX idx_place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])."_place_id ";
|
|
|
|
echo "ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." USING btree(place_id);\n";
|
|
|
|
|
2012-02-19 14:33:21 +04:00
|
|
|
echo "GRANT SELECT ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." TO \"www-data\";\n";
|
2011-01-21 13:40:44 +03:00
|
|
|
|
2011-01-05 17:07:26 +03:00
|
|
|
}
|
2012-01-29 03:27:25 +04:00
|
|
|
|
2012-02-19 14:33:21 +04:00
|
|
|
echo "drop index idx_placex_classtype;\n";
|
2010-12-13 18:55:52 +03:00
|
|
|
}
|