【问题标题】:Drawing multiple Polygons on Google Maps API V3 from XML File从 XML 文件在 Google Maps API V3 上绘制多个多边形
【发布时间】:2017-03-27 13:00:59
【问题描述】:

我实际上绘制了一个带有多个标记的地图,这些标记是从 XML 文件中解析出来的。此外,我在地图上绘制了两个多边形。坐标在脚本中是硬编码的,我也想从 XML 文件中加载多边形坐标。这是我的实际代码:

<script type="text/javascript">

var customIcons = {
warning: {
icon: 'https://scoo.me/img/marker_warning.png'
},
activate: {
icon: 'https://scoo.me/img/marker_activate.png'
}
};

function load() {
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 12,
scrollwheel: false,
mapTypeId: 'roadmap',
mapTypeControl: false
});

var infoWindow = new google.maps.InfoWindow;
downloadUrl("../xml/vehicles_service_required.php", function(data) {';
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
  var VehicleID = markers[i].getAttribute("VehicleID");
  var VehicleLabel = markers[i].getAttribute("VehicleLabel");
  var ServiceRequired = markers[i].getAttribute("ServiceRequired");
  var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("lat")),
      parseFloat(markers[i].getAttribute("lng")));
  bounds.extend(point);
  var html = "<b>Roller-Nr. " + VehicleLabel + "</b> <br/>(ID-" + VehicleID + ")";
  var icon = 'https://scoo.me/img/marker_activate.png';
  //var icon = {};
  if (ServiceRequired == "0") {
    icon = 'https://scoo.me/img/marker_warning.png';
  } else if (ServiceRequired == "-1") {
    icon = 'https://scoo.me/img/marker_activate.png';     
  }

  var marker = new google.maps.Marker({
    map: map,
    position: point,
    //icon: 'https://scoo.me/img/marker_warning.png'
    icon: icon
  });
  bindInfoWindow(marker, map, infoWindow, html);
}
map.fitBounds(bounds);

// Polyglon Munich

var muenchen = new google.maps.Polygon({
            paths: [
            new google.maps.LatLng(48.163108,11.588816),
            new google.maps.LatLng(48.169462,11.595339),
            new google.maps.LatLng(48.173069,11.599073),
            new google.maps.LatLng(48.176016,11.592807),
            new google.maps.LatLng(48.182455,11.599373)],
            strokeColor: '#21a9e1',
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: '#21a9e1',
            fillOpacity: 0.2,
            map: map
        });

// Geschäftsgebiet Cologne
        var koeln = new google.maps.Polygon({
            paths: [
            new google.maps.LatLng(50.9558045,6.9741296),
            new google.maps.LatLng(50.9567777,6.9755029),
            new google.maps.LatLng(50.9579266,6.9736361),
            new google.maps.LatLng(50.9574265,6.9724559),
            new google.maps.LatLng(50.9596701,6.9679069),
            new google.maps.LatLng(50.9600215,6.9656538)],
            strokeColor: '#21a9e1',
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: '#21a9e1',
            fillOpacity: 0.2,
            map: map
        });
  });
}

function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}

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>

我的 Polgon 的 XML 看起来像:

<subdivisions>
    <subdivision Name="Muenchen">
        <coord lat="48.163108" lng="11.588816"/>
        <coord lat="48.169462" lng="11.595339"/>
        <coord lat="48.173069" lng="11.599073"/>
        <coord lat="48.176016" lng="11.592807"/>
        <coord lat="48.182455" lng="11.599373"/>
    </subdivision>
    <subdivision Name="Koeln">
        <coord lat="50.9558045" lng="6.9741296"/>
        <coord lat="50.9567777" lng="6.9755029"/>
        <coord lat="50.9579266" lng="6.9736361"/>
        <coord lat="50.9574265" lng="6.9724559"/>
        <coord lat="50.9596701" lng="6.9679069"/>
        <coord lat="50.9600215" lng="6.9656538"/>
        <coord lat="50.9627245" lng="6.9615983"/>
        <coord lat="50.9651706" lng="6.9538736"/>
        <coord lat="50.9664139" lng="6.9517493"/>
    </subdivision>
</subdivisions>

谁能给我一个示例,如何在我的脚本中为 polyglone 实现 XML。提前谢谢!

【问题讨论】:

    标签: javascript xml google-maps google-maps-api-3 polygon


    【解决方案1】:

    这是构建 lat-lng 对象列表并将结果保存为 latlnglists 的代码。

    var DOMParser = new DOMParser();
    var xmltext = `
    <subdivisions>
        <subdivision Name="Muenchen">
            <coord lat="48.163108" lng="11.588816"/>
            <coord lat="48.169462" lng="11.595339"/>
            <coord lat="48.173069" lng="11.599073"/>
            <coord lat="48.176016" lng="11.592807"/>
            <coord lat="48.182455" lng="11.599373"/>
        </subdivision>
        <subdivision Name="Koeln">
            <coord lat="50.9558045" lng="6.9741296"/>
            <coord lat="50.9567777" lng="6.9755029"/>
            <coord lat="50.9579266" lng="6.9736361"/>
            <coord lat="50.9574265" lng="6.9724559"/>
            <coord lat="50.9596701" lng="6.9679069"/>
            <coord lat="50.9600215" lng="6.9656538"/>
            <coord lat="50.9627245" lng="6.9615983"/>
            <coord lat="50.9651706" lng="6.9538736"/>
            <coord lat="50.9664139" lng="6.9517493"/>
        </subdivision>
    </subdivisions>`;
    var doc = DOMParser.parseFromString( xmltext, "application/xml" );
    var docElem = doc.documentElement;
    var subdiv = docElem.getElementsByTagName('subdivision');
    
    var latlnglists = []; //for lists of lat-lng objs
    
    for (var i = 0; i < subdiv.length; i++) {
        var name = subdiv[i].getAttribute("Name");
        //console.log(name);
        var coord = subdiv[i].getElementsByTagName('coord');
    
        var latlngs = [];
        for (var k = 0; k < coord.length; k++) {
            var lat = coord[k].getAttribute("lat");
            var lng = coord[k].getAttribute("lng");
            //console.log("lat, lng: " + lat + ", " + lng);
            latlngs.push({lat: lat, lng: lng});
        }
        latlnglists.push(latlngs);
    }
    

    这部分使用 latlnglists[i],其中 i=(0,1),作为构建多边形的路径值。

    var muenchen = new google.maps.Polygon({
                paths: latlnglists[0],
                strokeColor: '#21a9e1',
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: '#21a9e1',
                fillOpacity: 0.2,
                map: map
            });
    var koeln = new google.maps.Polygon({
                paths: latlnglists[1],
                strokeColor: '#21a9e1',
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: '#21a9e1',
                fillOpacity: 0.2,
                map: map
    });
    

    编辑

    要将我的代码改编为您的代码,请按以下步骤操作:

    1. 删除两个多边形的代码 (var muenchen + var koeln)。它将替换为我的代码。
    2. 将我的代码的第二条语句更改为var xmltext = data.responseText;
    3. 用我所有的代码替换已删除的代码。

    【讨论】:

    • 感谢@Swatchai 的精彩回复。我只是想知道如何在“var xmltext”处实现生成我的 XML 数据的 php 文件(此处示例:scoo.me/test_tmp/test.php)。这应该用 'downloadUrl("scoo.me/test_tmp/test.php", function(data)' 来实现吗?
    • 我必须将代码放在脚本中的什么位置?
    猜你喜欢
    • 2014-07-09
    • 2012-06-08
    • 1970-01-01
    • 2011-03-24
    • 2014-05-09
    • 2012-04-08
    • 1970-01-01
    • 2011-11-08
    • 2015-06-03
    相关资源
    最近更新 更多