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' ),
2012-07-10 17:36:17 +04:00
array ( 'countries' , '' , 0 , 1 , 0 , 0 , 'bool' , 'Create import script for country codes and names' ),
2012-02-27 00:32:40 +04:00
array ( 'wiki-import' , '' , 0 , 1 , 0 , 0 , 'bool' , 'Create import script for search phrases ' ),
2010-12-13 18:55:52 +03:00
);
getCmdOpt ( $_SERVER [ 'argv' ], $aCMDOptions , $aCMDResult , true , true );
2012-03-21 23:59:35 +04:00
include ( CONST_BasePath . '/settings/phrase_settings.php' );
2010-12-13 18:55:52 +03:00
2012-02-27 00:32:40 +04:00
if ( $aCMDResult [ 'countries' ]) {
echo " select getorcreate_country(make_standard_name('uk'), 'gb'); \n " ;
echo " select getorcreate_country(make_standard_name('united states'), 'us'); \n " ;
echo " select count(*) from (select getorcreate_country(make_standard_name(country_code), country_code) from country_name where country_code is not null) as x; \n " ;
echo " select count(*) from (select getorcreate_country(make_standard_name(get_name_by_language(country_name.name,ARRAY['name'])), country_code) from country_name where get_name_by_language(country_name.name, ARRAY['name']) is not null) as x; \n " ;
foreach ( $aLanguageIn as $sLanguage )
{
echo " select count(*) from (select getorcreate_country(make_standard_name(get_name_by_language(country_name.name,ARRAY['name: " . $sLanguage . " '])), country_code) from country_name where get_name_by_language(country_name.name, ARRAY['name: " . $sLanguage . " ']) is not null) as x; \n " ;
}
}
2010-12-13 18:55:52 +03:00
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 )
{
2012-05-31 00:19:49 +04:00
$sLabel = trim ( $aMatch [ 1 ]);
$sClass = trim ( $aMatch [ 2 ]);
$sType = trim ( $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 ;
2012-03-21 03:40:35 +04:00
}
# blacklisting: disallow certain class/type combinations
if ( isset ( $aTagsBlacklist [ $sClass ]) && in_array ( $sType , $aTagsBlacklist [ $sClass ])) {
# fwrite(STDERR, "Blacklisted: ".$sClass."/".$sType."\n");
continue ;
}
# whitelisting: if class is in whitelist, allow only tags in the list
if ( isset ( $aTagsWhitelist [ $sClass ]) && ! in_array ( $sType , $aTagsWhitelist [ $sClass ])) {
# fwrite(STDERR, "Non-Whitelisted: ".$sClass."/".$sType."\n");
continue ;
}
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-27 00:32:40 +04:00
echo " create index idx_placex_classtype on placex (class, type); " ;
2012-01-29 03:27:25 +04:00
2011-01-05 17:07:26 +03:00
foreach ( $aPairs as $aPair )
{
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-27 00:32:40 +04:00
echo " GRANT SELECT ON place_classtype_ " . pg_escape_string ( $aPair [ 0 ]) . " _ " . pg_escape_string ( $aPair [ 1 ]) . " TO \" www-data \" ; " ;
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-27 00:32:40 +04:00
echo " drop index idx_placex_classtype; " ;
2010-12-13 18:55:52 +03:00
}