#php #xml #google-maps #geocoding
#php #xml #google-карты #геокодирование
Вопрос:
Это действительно странно и ставит меня в тупик. У меня есть PHP-скрипт, который собирает данные из формы ввода адреса, форматирует их для службы геокодирования googlemaps, а затем загружает xml, возвращаемый этой службой, и извлекает из него широту / lng. Странно то, что некоторые адреса возвращают сообщение о том, что URL не загружается, но когда я копирую точную строку echod, которую отправляет скрипт, и вставляю ее в свой браузер, я действительно получаю XML-файл. У кого-нибудь есть идеи, что здесь может происходить?
Вот строка, которая выводится эхом. Может быть, кто-нибудь может сказать мне, что PHP не нравится в этом URL?
http://maps.google.com/maps/geo?output=xmlamp;key=ABQIAAAAZe-W-lkccZSM2qC_Ci4JnBS97eShVNVCdPw2dK9jd_Ls-9Sg7hSJTMXMmezqrmN9bDDbO_CSRwChtwamp;q=285 East Grand Avenue, Fox Lake, IL, 60020 amp; sensor=true_or_false
Вот сценарий:
//This section sends HTTP geocode to google and recieves the XML
$googlekey = "ABQIAAAAZe-W-lkccZSM2qC_Ci4JnBS97eShVNVCdPw2dK9jd_Ls-9Sg7hSJTMXMmezqrmN9bDDbO_CSRwChtw";
$mapAddress = urlencode($barAddress).", ".$barCity.", ".$barState.", ".$barZip;
echo $mapAddress."<br />";
$googleURL = "http://maps.google.com/maps/geo?output=xmlamp;key=".$googlekey."amp;q=".$mapAddress."amp;sensor=true_or_false";
echo $googleURL."<br />";
$googlexml = simplexml_load_file($googleURL) or die("url not loading<br />");
$status = $googlexml - > Response - > Status - > code;
if (strcmp($status, "200") == 0) {
echo "barID:".$barID;
// Successful geocode
$coordinates = $googlexml - > Response - > Placemark - > Point - > coordinates;
$coordinatesSplit = split(",", $coordinates);
// Format: Longitude, Latitude, Altitude
$lat = $coordinatesSplit[1];
$lng = $coordinatesSplit[0];
echo "lat:".$lat." lon:".$lng;
$xmlUpdate = "/".$barID."/".$barID.".xml";
//This is the final query that updates
$updateQuery = sprintf("UPDATE userBars "." SET lat = '%s', lng = '%s', barXML = '%s' "." WHERE barID = '%s';", mysql_real_escape_string($lat), mysql_real_escape_string($lng), mysql_real_escape_string($xmlUpdate), mysql_real_escape_string($barID));
$updateResult = mysql_query($updateQuery);
if ($updateResult) {
echo "Successfully Geocoded!<br />";
} else {
echo "Geocode Not Successful!";
}
} else {
echo "Geocode Failed.";
}
}
} else {
echo "Error retrieving barID. Files and entries were not created successfully.<br />";
}
Комментарии:
1. Ого! Размещение этой ссылки на этом форуме просто заставило меня понять, что это потому, что я не кодировал URL для города, и любой город с отдельными названиями отбрасывал ее. Решена!
2. Просто примечание: очистка координат с помощью shell-скрипта работает без google-ключа.