transliterate($sLabel)); } else { $sTrans = null; } $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); switch (trim($aMatch[4])) { case 'near': echo "select getorcreate_amenityoperator(make_standard_name('".pg_escape_string($sLabel)."'), '$sTrans', '$sClass', '$sType', 'near');\n"; break; case 'in': echo "select getorcreate_amenityoperator(make_standard_name('".pg_escape_string($sLabel)."'), '$sTrans', '$sClass', '$sType', 'in');\n"; break; default: echo "select getorcreate_amenity(make_standard_name('".pg_escape_string($sLabel)."'), '$sTrans', '$sClass', '$sType');\n"; break; } } } } echo 'create index idx_placex_classtype on placex (class, type);'; foreach ($aPairs as $aPair) { 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;'; }