Google Maps Geocoder, чтобы вернуть состояние - PullRequest
3 голосов
/ 21 июля 2011

Я использую геокодер google maps для геокодирования почтового индекса, и я хочу, чтобы он возвращал состояние, в котором находится почтовый индекс, и сохранял его в переменной «local». Я получаю сообщение об ошибке, указывающее, что local не определен. Почему?

см. Код ниже:

var address=document.getElementById("address").value;
var radius=document.getElementById("radius").value;
var latitude=40;
var longitude=0;
var local;
geocoder.geocode( { 'address': address}, function(results, status){
if (status==google.maps.GeocoderStatus.OK){
latlng=(results[0].geometry.location);
latitude=latlng.lat();
longitude=latlng.lng();
//store the state abbreviation in the variable local
local=results[0].address_components.types.adminstrative_area_level_1;
}   

else{
    alert("Geocode was not successful for the following reason: " + status);
}
});

Ответы [ 2 ]

5 голосов
/ 22 июля 2011

Я думаю, что проблема в том, что address_components , вероятно, будет иметь более одного компонента, и порядок не обязательно одинаков для всех почтовых индексов. Таким образом, вы должны перебрать результаты, чтобы найти правильный.

<html xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder = new google.maps.Geocoder();
function test()
{
    var address=document.getElementById("address").value;
    var local = document.getElementById("local");
    var latitude=40;
    var longitude=0;
    geocoder.geocode( { 'address': address}, function(results, status)
    {
        if (status==google.maps.GeocoderStatus.OK)
        {
            latlng=(results[0].geometry.location);
            latitude=latlng.lat();
            longitude=latlng.lng();
            //store the state abbreviation in the variable local
            for(var ix=0; ix< results[0].address_components.length; ix++)
            {
                if (results[0].address_components[ix].types[0] == "administrative_area_level_1")
                {
                    local.value=results[0].address_components[ix].short_name;
                }
            }
        }
        else
        {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
}
</script>
</head>
<body>
    <input type='text' id='address' value='84102' />
    <input type='text' id='local' value='' />
    <a href='#' onclick="test();" >try</a>
</body>
</html>
0 голосов
/ 23 июля 2011

Где проверяется значение переменной local?Я не видел этого в вашем примере кода.

Если из функции обратного вызова нет ничего странного.Запрос к геокодеру выполняется асинхронно.Так что это может быть неопределенным даже после запуска запроса.Вам нужно поместить код, который работает с переменной local в функцию обратного вызова.

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