API Карт Google иногда не возвращает Почтовый индекс в AddressDetails - PullRequest
2 голосов
/ 13 августа 2010

Я создал функцию для ввода данных о местоположении, передачи ее в 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

Я собираюсь добавить это на полотенце.Надеюсь, кто-нибудь может помочь!

1 Ответ

1 голос
/ 16 августа 2010

Это было проблемой с тех пор, как существовала служба геокодирования.

Для получения дополнительной информации см. «Отчет об ошибке / запрос функции», который я разместил в системе отслеживания проблем в 2008 году:

http://code.google.com/p/gmaps-api-issues/issues/detail?id=606

В этой теме Памела Фокс и Тор Митчелл - сотрудники Google, которые в то время были частью команды Карт.

Спустя полтора года Google ответил некоторыми улучшениями:

https://groups.google.com/group/google-maps-api/browse_thread/thread/4d0ade19dadcda4f#

и многое улучшилось, но геокодирование - не точная наука.

В любом случае вы можете использовать старую версию геокодера, потому что я получаю почтовый индекс с этим запросом:

http://maps.google.com/maps/api/geocode/xml?sensor=false&address=10437%20Innovation%20Drive,%20Milwaukee,%20WI

Это прямой http-запрос, но API V3 должен возвращать те же данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...