2012-01-27 2 views
1

JavaScript Google Maps API V3Google Maps API JS: пытается преобразовать адрес в Lat Long

Я пытаюсь преобразовать адрес в широту/долготу с помощью geocode от Google Maps API v3, но это не работает.

Остальная часть кода работает нормально.

Я уверен, что это очень простая проблема!

код

 var map; 
    function initialize() { 
      var infoWindow = new google.maps.InfoWindow; 
      var myLatLng = new google.maps.LatLng(-23.000516, -43.413473); 
      var myOptions = { 
       zoom: 15, 
       center: myLatLng, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 

    map = new google.maps.Map(document.getElementById('mapa'), myOptions); 

     // Download do XML 
     downloadUrl("http://podium.pvidesign.com.br/mapa/casas.xml", function(data) { 
      var icone = 'http://podium.pvidesign.com.br/mapa/imagens/casa.png'; 
      var imoveis = data.documentElement.getElementsByTagName("imovel"); 
       for (var i = 0; i < imoveis.length; i++) { 
        //var latlng = new google.maps.LatLng(parseFloat(imoveis[i].getAttribute("lat")), parseFloat(imoveis[i].getAttribute("lng"))); 
        var logradouro = imoveis[i].getAttribute("logradouro"); 
        var endereco = imoveis[i].getAttribute("endereco"); 
        var numero = imoveis[i].getAttribute("numero"); 
        var bairro = imoveis[i].getAttribute("bairro"); 
        var cidade = imoveis[i].getAttribute("cidade"); 
        var imagem = imoveis[i].getAttribute("img"); 
        var end_completo = logradouro + " " + endereco + ", " + numero + ", " + bairro + ", " + cidade; 
        var nome = imoveis[i].getAttribute("nome"); 
        var desc = imoveis[i].getAttribute("desc"); 
        var html = "<b>" + nome + "</b><br>" + "<img src='" + imagem + "'><br>" + desc + "<br>" + end_completo; 

        // Coletando Lat e Long atraves do endereço 
        var geocoder = new google.maps.Geocoder(); 
        geocoder.geocode({'address': end_completo}, function(results, status) { 

          var latLong = results[0].geometry.location; 

        }); // Fim Coletando 

        var houseMarker = new google.maps.Marker({ 
         title:nome, 
         position:latLong, 
         map:map, 
         icon:icone 
        }); 
       bindInfoWindow(houseMarker, map, infoWindow, html); 
       } 
      }); 

     // Balão de informação 
     function bindInfoWindow(houseMarker, map, infoWindow, html) { 
      google.maps.event.addListener(houseMarker, 'mouseover', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(map, houseMarker); 
      }); 
      google.maps.event.addListener(houseMarker, 'mouseout', function() { 
      infoWindow.close(); 
      }); 
     }; 

    }; 

ответ

2

Перевод с Португальский (дикий догадка), похоже, что вы пытаетесь геокодировать адрес, который содержит: улица, адрес, номер, район и город. Это может быть слишком много, я бы попробовал только улицу, номер, город и посмотреть, поможет ли это.

Кроме того, ваш код очень оптимистично, в коде ответа нет кода состояния. Вы должны проверить на Status Codes в response, если это не google.maps.GeocoderStatus.OK, то ответа не будет.

Пробуйте Google Maps API v3 Geocoder Tool с различными вводом образцов (из ваших данных), чтобы увидеть, как он себя ведет, могут возникнуть проблемы с тем, как вы форматируете адрес, сами данные и т. Д. Попробуйте сделать ваши адреса похожими на то, d использовать для отправки пакета.

Также имейте в виду, что при загрузке карты ваш подход будет иметь возможность геокодирования до 10 адресов. Если вам нужно показать больше, вам, вероятно, потребуется использовать геокодирование на стороне сервера. Посмотрите на статью Geocoding Strategies и убедитесь, что вы используете правильный сервис для вашего прецедента.

Смежные вопросы