function google_geocode_country_list in Location 7.5
Same name and namespace in other branches
- 5.3 geocoding/google.inc \google_geocode_country_list()
- 5 geocoding/google.inc \google_geocode_country_list()
- 6.3 geocoding/google.inc \google_geocode_country_list()
- 7.3 geocoding/google.inc \google_geocode_country_list()
- 7.4 geocoding/google.inc \google_geocode_country_list()
Return the list of ISO3166 codes supported by this geocoder. Coverage list: http://gmaps-samples.googlecode.com/svn/trunk/mapcoverage_filtered.html Coverage list feed: http://spreadsheets.google.com/feeds/list/p9pdwsai2hDMsLkXsoM05KQ/defaul...
File
- geocoding/
google.inc, line 48 - Google geocoder.
Code
function google_geocode_country_list() {
// Get the google data from the feed.
$xml = google_geocode_country_list_xml();
// Loop through google data and find all valid entries.
$regionclean = array();
foreach ($xml->entry as $region) {
$pos = strpos($region->content, 'geocoding:') + 11;
$geocoding = substr($region->content, $pos, strpos($region->content, ',', $pos) - $pos);
if (strpos($geocoding, "Yes") !== FALSE) {
$regionclean[] = t(htmlentities($region->title));
}
}
// Get the countries list and clean it up so that names will match to google.
// The regex removes parenthetical items so that both of the "Congo" entries
// and the "Coco Islands" work.
// The $countriesfixes overwrites values in the Drupal API countries list
// with values that will match to google's entries.
// "Sao Tome and Principe" are non-accented in the Drupal API so the entry
// here is to match the htmlentities() fix in the foreach loop below.
// Note: it may be neccessary to adjust/add to the fixes list in the future
// if google adds countries that don't match the Drupal API list for whatever
// reason.
$countries = location_get_iso3166_list();
$regex = "#[ (].*[)]#e";
$cntryclean = preg_replace($regex, "", $countries);
$countriesfixes = array_merge($cntryclean, array(
"hk" => t("China"),
"mo" => t("China"),
"pn" => t("Pitcairn Islands"),
"wf" => t("Wallis Futuna"),
"st" => t("São Tomé and Príncipe"),
));
// Compare new google data found to fixed country name values and return
// matches with abbreviations as keys.
$googlematched = array_intersect($countriesfixes, $regionclean);
// Compare new keys to original Drupal API and return the array with the
// original name values.
$fixedkeys = array_intersect_key($countries, $googlematched);
return array_keys($fixedkeys);
}