2010-12-13 18:55:52 +03:00
#!/usr/bin/php -Cq
< ? php
2016-09-04 04:19:48 +03:00
require_once ( dirname ( dirname ( __FILE__ )) . '/settings/settings.php' );
require_once ( CONST_BasePath . '/lib/init-cmd.php' );
ini_set ( 'memory_limit' , '800M' );
ini_set ( 'display_errors' , 'stderr' );
2016-09-10 22:10: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 ( 'countries' , '' , 0 , 1 , 0 , 0 , 'bool' , 'Create import script for country codes and names' ),
array ( 'wiki-import' , '' , 0 , 1 , 0 , 0 , 'bool' , 'Create import script for search phrases ' ),
);
2016-09-08 04:16:22 +03:00
getCmdOpt ( $_SERVER [ 'argv' ], $aCMDOptions , $aCMDResult , true , true );
2016-09-04 04:19:48 +03:00
2016-09-08 04:16:22 +03:00
include ( CONST_InstallPath . '/settings/phrase_settings.php' );
2016-09-04 04:19:48 +03: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 " ;
2016-09-08 04:16:22 +03:00
foreach ( $aLanguageIn as $sLanguage ) {
2016-09-04 04:19:48 +03:00
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 " ;
}
}
2016-09-08 04:16:22 +03:00
if ( $aCMDResult [ 'wiki-import' ]) {
2016-09-04 04:19:48 +03:00
$aPairs = array ();
2016-09-08 04:16:22 +03:00
foreach ( $aLanguageIn as $sLanguage ) {
2016-09-04 04:19:48 +03:00
$sURL = 'http://wiki.openstreetmap.org/wiki/Special:Export/Nominatim/Special_Phrases/' . strtoupper ( $sLanguage );
$sWikiPageXML = file_get_contents ( $sURL );
2016-09-08 04:16:22 +03:00
if ( preg_match_all ( '#\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([^|]+) \\|\\| ([\\-YN])#' , $sWikiPageXML , $aMatches , PREG_SET_ORDER )) {
foreach ( $aMatches as $aMatch ) {
2016-09-04 04:19:48 +03:00
$sLabel = trim ( $aMatch [ 1 ]);
$sClass = trim ( $aMatch [ 2 ]);
$sType = trim ( $aMatch [ 3 ]);
# 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 ;
}
# 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 ;
}
$aPairs [ $sClass . '|' . $sType ] = array ( $sClass , $sType );
2016-09-08 04:16:22 +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' :
echo " select getorcreate_amenityoperator(make_standard_name(' " . pg_escape_string ( $sLabel ) . " '), ' $sClass ', ' $sType ', 'in'); \n " ;
break ;
default :
echo " select getorcreate_amenity(make_standard_name(' " . pg_escape_string ( $sLabel ) . " '), ' $sClass ', ' $sType '); \n " ;
break ;
2016-09-04 04:19:48 +03:00
}
}
2012-02-27 00:32:40 +04:00
}
}
2016-09-04 04:19:48 +03:00
echo " create index idx_placex_classtype on placex (class, type); " ;
2016-09-08 04:16:22 +03:00
foreach ( $aPairs as $aPair ) {
2016-09-04 04:19:48 +03:00
echo " create table place_classtype_ " . pg_escape_string ( $aPair [ 0 ]) . " _ " . pg_escape_string ( $aPair [ 1 ]);
if ( CONST_Tablespace_Aux_Data )
echo " tablespace " . CONST_Tablespace_Aux_Data ;
echo " as select place_id as place_id,st_centroid(geometry) as centroid from placex where " ;
echo " class = ' " . pg_escape_string ( $aPair [ 0 ]) . " ' and type = ' " . pg_escape_string ( $aPair [ 1 ]) . " ' " ;
echo " ; \n " ;
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) " ;
if ( CONST_Tablespace_Aux_Index )
echo " tablespace " . CONST_Tablespace_Aux_Index ;
echo " ; \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) " ;
if ( CONST_Tablespace_Aux_Index )
echo " tablespace " . CONST_Tablespace_Aux_Index ;
echo " ; \n " ;
echo " GRANT SELECT ON place_classtype_ " . pg_escape_string ( $aPair [ 0 ]) . " _ " . pg_escape_string ( $aPair [ 1 ]) . ' TO "' . CONST_Database_Web_User . " \" ; \n " ;
}
echo " drop index idx_placex_classtype; " ;
}