2012-11-07 5 views
1

나는 아래의 Google지도 코드를 사용하여 PHP로 동적으로 생성 된 XML 파일에서 여러 주소의 마커를 검색하고 플로팅합니다. 코드는 해당 마커에 대한 Google지도 정보 창에 올바른 정보를 표시하는 것 외에는 필요한 모든 작업을 수행합니다. 모든 마커에 대한 마지막 XML 항목/목록 정보를 얻습니다.Google지도 정보 창 xml을 통한 복수 주소

나는 그것을 사용하기 위해 다양한 변형을 시도해 왔지만 운이 없다.

샘플 XML 데이터

<?xml version="1.0" encoding="UTF-8"?> 
<listings> 
<listing> 
    <address>123 Street</address> 
    <city>MANOTICK</city> 
</listing> 
<listing> 
    <address>456 Street</address> 
    <city>MANOTICK</city> 
</listing> 
<listing> 
    <address>111 Avenue</address> 
    <city>MANOTICK</city> 
</listing> 
<listing> 
    <address>777 Avenue</address> 
    <city>Ottawa</city> 
</listing> 
<listing> 
    <address>333 Street</address> 
    <city>Manotick</city> 
</listing> 
</listings> 

구글 맵 코드

function initialize() 
{ 
    var myLatLng = new google.maps.LatLng(45.2340684, -75.6287287); 
    var myOptions = 
    { 
     zoom: 10, 
     mapTypeControl: true, 
     center: myLatLng, 
     zoomControl: true, 
     zoomControlOptions: 
     { 
      style: google.maps.ZoomControlStyle.SMALL 
     }, 
     StreetViewControl: false, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var map = new google.maps.Map(document.getElementById('google_map'), myOptions); 
    var info_window = new google.maps.InfoWindow; 
    google.maps.event.addListener 
    (map, 'click', 
    function() 
    { 
     info_window.close(); 
    }); 


    downloadUrl 
    ('listings.xml', 
    function (listings_data) 
    { 
     var markers = listings_data.documentElement.getElementsByTagName('listing'); 
     var geocoder = new google.maps.Geocoder(); 
     for (var i = 0; i < markers.length; i++) 
     { 
      var address = markers[i].getElementsByTagName('address')[0].firstChild.data; 
      var city = markers[i].getElementsByTagName('city')[0].firstChild.data; 
      var address_google_map = address + ', ' + city + ', ON'; 
      var info_text = address + '<br />' + city + ' ON'; 

      geocoder.geocode 
      ({'address': address_google_map}, 
      function (results) 
      { 
        var marker = new google.maps.Marker 
        ({ 
         map: map, 
         position: results[0].geometry.location 
        }); 
        google.maps.event.addListener 
        (marker, 'click', 
        function() 
        { 
         info_window.setContent(info_text); 
         info_window.open(map, marker); 
        }); 
      }); 
     } 
    }); 
} 

답변

2

당신은 지오 코더의 비동기 성격에 문제가, 당신은 많은 주소를 추가 할 경우 지오 코더에 문제가있는 것 할당량/속도 한도 (특히 코드가 지오 코더의 반환 상태를 보지 않았으므로).

이러한 모든 질문은 관련이 있습니다

가장 간단한 해결 방법은 반환 된 결과와 지오 코더에 전화를 연결하는 함수 클로저를 사용하는 것입니다 :

23,210 그리고 createMarker 기능은 마커와 정보창의 콘텐츠를 연결하기 :

function createMarker(latlng, html) 
{ 
    var marker = new google.maps.Marker 
       ({ 
        map: map, 
        position: latlng 
       }); 
    google.maps.event.addListener(marker, 'click', function() { 
        info_window.setContent(html); 
        info_window.open(map, marker); 
       }); 
} 

만든다 당신의 루프 :

for (var i = 0; i < markers.length; i++) 
{ 
    geocodeAddress(markers[i]); 
} 

Working example

+0

감사합니다. 나는 그것을 작동 시켰지만, 나는 방금 플로팅 된 마커를 바탕으로지도를 중앙에 놓는 것이 가장 좋은 방법이라고 생각했다. 나는 for 루프와'bounds.extend (results [0] .geometry) 바로 뒤에 'CreatesMarker 함수에서'bounds = new google.maps.LatLngBounds();'와'map.fitBounds (bounds) .location);'CreateMarker 함수를 호출 한 후. 댓글에 대한 죄송합니다. 회신을 게시하거나 후속 조치를 취하는 방법을 모르겠습니다. 더 많은 정보 나 질문은 물론 다른 사람들이 사용할 수있게 완성 된 코드도 있습니다. – spiderling

+0

내가 추가 한 작업 샘플을보십시오. 그것은 마커를 중심으로합니다. 후속 작업까지는 질문을 편집 할 수 있습니다 (경계가 맞는 것은 실제로 또 다른 질문입니다 ...) – geocodezip

+0

모든 도움과 실제 사례에 감사드립니다! 잘 작동하고 있습니다. 그것이 큰 문제는 아니지만 xmlParse 함수를 사용할 수는 없습니다. – spiderling