1

V2는 사용되지 않으며 더 이상지도에 xml 파일의 모든 포인터를 표시하는구글 맵 XML 파일

대신 내 사이트에 대한 작동하기 때문에 나는 구글지도 API v3의 주변에 재생 된 마지막 노드를 가져옵니다 해당 페이지와 관련된 현재 마커를 표시하고 싶습니다. 이벤트에 대한 정보를 표시하고 xml 파일에서 가져온 해당 이벤트에 대한 맵을 표시하고자하는 이벤트 페이지가 있습니다.

나는 URL에 id를 지정해야하지만, URL에 id가 설정되어 있지 않으면 어떻게해야합니까?

www.mysite.com/events.php는 내 ID가 없기 때문에지도가 표시되지 않지만 www.mysite.com/events.php?id=1을 사용하면지도가 표시됩니다.

은 내가 필요한 것은 ID가 URL에 있는지 확인하는 것입니다 보여되지 않은 경우, 여기

는 구글 코드입니다 가장 최근의 것 대신으로 XML 파일과 쇼의 마지막 마커를 찾을 수 URL에있는 ID가 있는지 확인하는 추가 사항과 함께

function load() { 
      var map = new google.maps.Map(document.getElementById("map"), { 
      center: new google.maps.LatLng(50.618438, -3.420304), 
      zoom: 13, 
      mapTypeId: 'roadmap' 
      }); 
      var infoWindow = new google.maps.InfoWindow; 

      // Change this depending on the name of your PHP file 
      downloadUrl("results.xml", function(data) { 
      var xml = data.responseXML; 
      var the_id = gup('id'); 

      var markers = xml.documentElement.getElementsByTagName("marker"); 
      var last = markers.length-1; 

      for (var i = 0; i < markers.length; i++) { 
       if (markers[i].hasAttribute('id')) { 
        //if there is, test its value 
        if (markers[i].getAttribute('id') == the_id) { 
          var name = markers[i].getAttribute("name"); 
          var address = markers[i].getAttribute("address"); 
          var type = markers[i].getAttribute("type"); 
          var point = new google.maps.LatLng(
           parseFloat(markers[i].getAttribute("lat")), 
           parseFloat(markers[i].getAttribute("lng"))); 
          var html = "<b>" + name + "</b> <br/>" + address; 
          var icon = customIcons[type] || {}; 
          var marker = new google.maps.Marker({ 
          map: map, 
          position: point, 
          icon: icon.icon, 
          shadow: icon.shadow 
          }); 

         bindInfoWindow(marker, map, infoWindow, html); 
        } 
        else { 
         var name = markers[last].getAttribute("name"); 
          var address = markers[last].getAttribute("address"); 
          var type = markers[last].getAttribute("type"); 
          var point = new google.maps.LatLng(
           parseFloat(markers[last].getAttribute("lat")), 
           parseFloat(markers[last].getAttribute("lng"))); 
          var html = "<b>" + name + "</b> <br/>" + address; 
          var icon = customIcons[type] || {}; 
          var marker = new google.maps.Marker({ 
          map: map, 
          position: point, 
          icon: icon.icon, 
          shadow: icon.shadow 
          }); 

         bindInfoWindow(marker, map, infoWindow, html); 
        } 

       } 
      } 
      }); 
     } 

나는 t는 지난 XML 마커로에 대한 루프의 I를 교체해야하지만

를 작동하지 않고 여기

function gup(name) { 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return results[1]; 
} 

은 내가 확인할 필요가 있다고 생각 URL에서 ID를 가져옵니다 기능입니다 id가 존재하지 않으면, 마지막 마커를 얻는다.

+0

마지막 마커의 ID는 'markerers [markers.length-1] .getAttribute ('id ')'입니다.하지만 질문은 될 수 없습니까? – Tomalak

+0

당신이 의미하는 바를 안다고 생각하지만 10 개의 마커가 있다고 말하면서 다른 마커 뒤에 마커를 가져야합니다. 따라서 마커가 있어야합니다. [9] obvisously -1로 – AdRock

+0

마커가 10 개이면 'markerers.length '는 10이됩니다. 이것은 -1을 사용하여 마지막 것을 검색해야 함을 의미합니다. – Tomalak

답변

1

아 ... 한 가지는 "else"절이 잘못된 수준에 있고 (잘못된 경우 if에 연결됨). ID가 인 모든 마커에 대해 이 for 루프 내부에 있기 때문에 한번 운동을합니다. 최소한 for 루프에서 else를 이동해야합니다.

그러나 for 루프도 필요하지 않습니다. 대신 하나가 바로 ID를 가지고있는 검사 마커 요소를 통해 반복의, getElementById(id)를 사용

var the_id = gup('id'); 
var respDoc = data.responseXML.documentElement 
var the_marker = respDoc.getElementById(the_id); 
// If the_id is '' then there will be no such marker, and the_marker will be 
// null, which is "falsy". 
if (!the_marker) { 
    var markers = respDoc.getElementsByTagName("marker"); 
    // check whether there are any markers. 
    if (markers.length < 1) return; // avoid errors 
    the_marker = markers[markers.length - 1]; 
} 
// Now do what you need to with the_marker.getAttribute("name") etc. 
// This is just your code, with markers[i] replaced by the_marker: 
var name = the_marker.getAttribute("name"); 
var address = the_marker.getAttribute("address"); 
var type = the_marker.getAttribute("type"); 
var point = new google.maps.LatLng(
    parseFloat(the_marker.getAttribute("lat")), 
    parseFloat(the_marker.getAttribute("lng"))); 
var html = "<b>" + name + "</b> <br/>" + address; 
var icon = customIcons[type] || {}; 
var marker = new google.maps.Marker({ 
    map: map, 
    position: point, 
    icon: icon.icon, 
    shadow: icon.shadow 
}); 

bindInfoWindow(marker, map, infoWindow, html); 

(테스트되지 않은.)

마지막으로, 당신이 사용하고있는 GUP()가 창에서 찾고 있습니다 것으로 나타났습니다 .location.href, 현재 웹 페이지의 URL입니다. 그 무엇입니까? OK, 그냥 확인 ...

+0

그래도 문제가 해결되지 않으면 "작동하지 않음"에 대해 좀 더 자세히 알아야 할 수 있습니다. 이드가있을 때 작동합니까? 아니면 절대? 작동하지 않으면 실제로 어떻게됩니까? – LarsH

+0

테스트 할 수 있도록 코드를 편집 해 주실 수 있습니까?당신이 코멘트를 가지고있는 곳 // 이제 당신이 the_marker.getAttribute ("name") 등으로 무엇을 할 필요가 있는지, 나는지도의 일부 vars를 설정하면 가장 안쪽에있는 모든 것을 할 필요가있다. – AdRock

+0

글쎄, 좋아. 몇 분 안에 편집 된 답변. 나는 당신의 코드를 복사하고 마커 [x]를 the_marker로 대체 할뿐입니다. – LarsH

관련 문제