Я создал функцию для ввода данных о местоположении, передачи ее в API Карт Google Javascript V2 и возврата нормализованного адреса широты / долготы / , который мне придется разбить на разные поля в базе данных (например, город,государственный, почтовый) .Мне требуется по крайней мере уровень 5 / точность почтового индекса для ввода, чтобы возвращаемые данные из Google всегда имели ...
- Страна
- Город (Населенный пункт)
- Штат (Административный Район)
- Почтовый
- Шир / Длинный
Вот некоторая информация о структуре объекта JSON, котораяGoogle возвращается.http://code.google.com/apis/maps/documentation/javascript/v2/services.html#Geocoding_Structured
Проблема : в некоторых случаях Placemark.AddressDetails не будет включать почтовый индекс, а суммарный Placemark.address будет включать почтовый индекс.
ДляНапример, следующие примеры ввода вернут почтовый код внутри Placemark.address, но не Placemark.AddressDetails;
- 10437 Innovation Drive, Милуоки, Висконсин 53226
- MOMA
- Эмпайр Стейт Билдинг -> это фактически возвращает почтовый код внутри какой-то странной "DependentLocality" вSubAdministrativeArea.Locality
Вот мой код устранения неполадок:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- You must insert your maps API script here. -->
<script language="javascript" type="text/javascript" src="http://www.json.org/json2.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
var geocoder = new GClientGeocoder();
$.geolocateAddress = function(address)
{
geocoder.getLocations(address, function(response)
{
if (response != null && response.Placemark != undefined)
{
var placemark = response.Placemark[0];
// Placemark has Post code or higher accuracy -> http://code.google.com/apis/maps/documentation/javascript/v2/reference.html#GGeoAddressAccuracy
if (placemark.AddressDetails.Accuracy >= 5)
{
alert(placemark.address);
try {
alert(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
} catch (err) {
alert('What the deuce? Why is there no postal code?... I bet you the placemark.address has the postal code.');
alert(JSON.stringify(placemark));
}
} else {
alert('Sorry, this requires at least a postal code input for accuracy')
}
} else {
alert('Failed to geo locate address');
}
});
};
$("#location").blur(function(event)
{
var address = $("#location").val();
$.geolocateAddress(address);
});
});
</script>
<form action="" method="get">
<input title="Location" type="text" value="" id="location" />
</form>
Фу ... Есть что-то, чего я просто не понимаю в схеме меток Google Maps?Смогу ли я решить эту проблему путем обновления до API Карт Google Javascript V3?(Объекты V2 JSON кажутся более интуитивно понятными, IMO) http://code.google.com/apis/maps/documentation/javascript/services.html
Я собираюсь добавить это на полотенце.Надеюсь, кто-нибудь может помочь!