2017-09-06 1 views
-1

다른 마커간에 폴리선을 그리려면 내지도를 얻으려고합니다. 아이디어는 6 개의 마커 그룹이 있다는 것입니다. 알파, 브라보, 찰리, 델타, 에코, 폭스 트롯필터링 된 마커를지도에 폴리 라인으로 표시 API

좌표는 XML 문서에 마커를 넣는 PHP 문서로 읽혀지는 데이터베이스에 저장됩니다.

내 XML 출력 데이터는 다음과 같습니다

<markers> 
<marker type="Hint" deelgebied="Echo" dag="zaterdag" tijd="10:30" lat="51.980434" lng="5.653239"/> 
<marker type="Hint" deelgebied="Delta" dag="zaterdag" tijd="10:30" lat="51.872005" lng="5.429794"/> 
<marker type="Hint" deelgebied="Charlie" dag="zaterdag" tijd="10:30" lat="51.850761" lng="5.959484"/> 
<marker type="Hint" deelgebied="Charlie" dag="zaterdag" tijd="19:20" lat="51.852547" lng="5.962409"/> 
<marker type="Hint" deelgebied="Bravo" dag="zaterdag" tijd="10:30" lat="51.935303" lng="6.285142"/> 
<marker type="Hint" deelgebied="Alpha" dag="zaterdag" tijd="10:30" lat="52.091156" lng="5.983163"/> 
<marker type="Hint" deelgebied="Foxtrot" dag="zaterdag" tijd="10:30" lat="52.142597" lng="5.700851"/> 
<marker type="Hunt" deelgebied="Echo" dag="zaterdag" tijd="19:32" lat="51.978531" lng="5.770242"/> 
<marker type="Hint" deelgebied="Foxtrot" dag="zondag" tijd="19:00" lat="52.144386" lng="5.703785"/> 
<marker type="Hint" deelgebied="Echo" dag="zondag" tijd="19:00" lat="51.982224" lng="5.656161"/> 
<marker type="Hint" deelgebied="Delta" dag="zondag" tijd="19:00" lat="51.873802" lng="5.432700"/> 
<marker type="Hint" deelgebied="Charlie" dag="zondag" tijd="19:00" lat="51.853436" lng="0.000000"/> 
<marker type="Hint" deelgebied="Bravo" dag="zondag" tijd="19:00" lat="51.937077" lng="6.288086"/> 
<marker type="Hint" deelgebied="Alpha" dag="zondag" tijd="19:00" lat="52.094730" lng="5.987297"/> 
</markers> 

당신이 볼 수 있듯이, 모든 마커 힌트 또는 사냥 중 하나 인 유형을 가지고있다. 그리고 그들은 'deelgebied'라는 가치를 가지고 있습니다.

지도 및 마커를 표시하는 코드입니다. 마커 외에도 다른 KML 파일이로드됩니다.

<script> 
    var customMarker = { 
    Groep: { 
     icon: 'http://maps.google.com/mapfiles/ms/icons/red-dot.png' 
    }, 
    Hunt: { 
     icon: 'http://maps.google.com/mapfiles/ms/icons/green-dot.png' 
    }, 
    Hint: { 
     icon: 'http://maps.google.com/mapfiles/ms/icons/yellow-dot.png' 
    } 
    }; 

    function initMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
     center: new google.maps.LatLng(<?php echo $mapslat; ?>, <?php echo $mapslng; ?>), 
     zoom: <?php echo $mapszoom; ?> 
    }); 
    var ctaLayer = new google.maps.KmlLayer({ 
     url: '<?php echo $kml; ?>', 
     map: map 
    }); 

    var infoWindow = new google.maps.InfoWindow; 

     downloadUrl('modules/XMLmarkers.php', function(data) { 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName('marker'); 
     Array.prototype.forEach.call(markers, function(markerElem) { 
      var type = markerElem.getAttribute('type'); 
      var deelgebied = markerElem.getAttribute('deelgebied'); 
      var dag = markerElem.getAttribute('dag'); 
      var tijd = markerElem.getAttribute('tijd'); 
      var point = new google.maps.LatLng(
       parseFloat(markerElem.getAttribute('lat')), 
       parseFloat(markerElem.getAttribute('lng'))); 

      var infowincontent = document.createElement('div'); 
      var strong = document.createElement('strong'); 
      strong.textContent = type 
      infowincontent.appendChild(strong); 
      infowincontent.appendChild(document.createElement('br')); 

      var content = dag + ' ' + tijd; 
      var text = document.createElement('text'); 
      text.textContent = content 
      infowincontent.appendChild(text); 
      var icon = customMarker[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon 
      }); 
      marker.addListener('click', function() { 
      infoWindow.setContent(infowincontent); 
      infoWindow.open(map, marker); 
      }); 
     }); 
     var path = []; 
     for (var i = 0; i < markers.length; i++) { 
      var lat = parseFloat(markers[i].getAttribute("lat")); 
      var lng = parseFloat(markers[i].getAttribute("lng")); 
      var point = new google.maps.LatLng(lat,lng); 
      path.push(point); 
     }//finish loop 

     var polyline = new google.maps.Polyline({ 
      path: path, 
      strokeColor: "#FF0000", 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 
     polyline.setMap(map); 
     }); 
    } 


    function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request, request.status); 
     } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
    } 

    function doNothing() {} 
</script> 

지금지도는 모든 마커 사이에 선을 그으므로 '폐기 된'값에는 필터링이 없습니다. 이 코드는 바로 [] VAR 경로 아래의 코드를 대체 할

  for (var i = 0; i < markers.length; i++) { 
      if (markers[i].deelgebied === "Alpha") { 
       var lat = parseFloat(markers[i].getAttribute("lat")); 
       var lng = parseFloat(markers[i].getAttribute("lng")); 
       var point = new google.maps.LatLng(lat,lng); 
       path.push(point); 
      } 

:이를 위해, 나는 루프를 교체하려면 다음 코드를 썼다. 이 코드를 사용하면 맵에서 더 이상 선을 그 으려하지 않습니다. * 참고 : 테스트 목적으로 Alpha 마커를 필터링하는 코드를 작성했습니다.

감사합니다!

답변

0

나는 그것을 알아 냈다.

나는 "deelgebied"에 대한 루프 내부에서 먼저 var를 선언했습니다. 그 후 변수를 특정 값과 비교하여 if 문을 단순화 할 수있었습니다.

var AlphaPath = []; 
     for (var i = 0; i < markers.length; i++) { 
      var markerdeelgebied = markers[i].getAttribute("deelgebied"); 
      if (markerdeelgebied == "Alpha") { 
       var lat = parseFloat(markers[i].getAttribute("lat")); 
       var lng = parseFloat(markers[i].getAttribute("lng")); 
       var point = new google.maps.LatLng(lat,lng); 
       AlphaPath.push(point); 
      } 
     } 
     var AlphaPolyline = new google.maps.Polyline({ 
      path: AlphaPath, 
      strokeColor: "#FF0000", 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 
     AlphaPolyline.setMap(map); 
관련 문제