【问题标题】:How to save map drawing state (Polygon, Polyline, Markers,Marker)如何保存地图绘制状态(多边形、折线、标记、标记)
【发布时间】:2016-11-20 11:16:11
【问题描述】:

我知道这个问题可能会重复

How to save map drawing state (Polygon, Polyline, Markers)

但答案仅显示圆形示例,其他形状呢

Polyline 例如如何检索点将其存储在数组中以供下一步显示 我有这段代码,它工作正常

   <script>
     function initMap() {
        var map = new google.maps.Map(document.getElementById('map'), {
            center: { lat: -34.397, lng: 150.644 },
            zoom: 8
        });

        var drawingManager = new google.maps.drawing.DrawingManager({
            drawingMode: google.maps.drawing.OverlayType.MARKER,
            drawingControl: true,
            drawingControlOptions: {
                position: google.maps.ControlPosition.TOP_CENTER,
                drawingModes: ['marker', 'circle', 'polygon', 'polyline', 'rectangle']
            },
            markerOptions: { icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png' },
            circleOptions: {
                fillColor: '#ffff00',
                fillOpacity: 1,
                strokeWeight: 5,
                clickable: false,
                editable: true,
                zIndex: 1
            }
        });
        drawingManager.setMap(map);
        var circles = [];


        google.maps.event.addDomListener(drawingManager, 'circlecomplete', function (circle) {
            circles.push(circle);
        });

        google.maps.event.addDomListener(savebutton, 'click', function () {
            document.getElementById("savedata").value = "";
            for (var i = 0; i < circles.length; i++) {
                var circleCenter = circles[i].getCenter();
                var circleRadius = circles[i].getRadius();
                document.getElementById("savedata").value += "circle((";
                document.getElementById("savedata").value +=
                  circleCenter.lat().toFixed(3) + "," + circleCenter.lng().toFixed(3);
                document.getElementById("savedata").value += "), ";
                document.getElementById("savedata").value += circleRadius.toFixed(3) + ")\n";

            }
        });

    }

    google.maps.event.addDomListener(window, 'load', initialize);

</script>
 <script src="https://maps.googleapis.com/maps/api/js?key=MyKey&libraries=drawing&callback=initMap"
    async defer></script>

问题是当我尝试通过添加这部分代码来检索折线的坐标时:

            var Lines = [];
        google.maps.event.addDomListener(drawingManager, 'polylinecomplete', function (polyline) {
            Lines.push(Lines);
        });

        google.maps.event.addDomListener(savebutton, 'click', function () {
            document.getElementById("savedata").value = "";
            for (var i = 0; i < Lines.length; i++) {
                document.getElementById("savedata").value += "Line((";
                document.getElementById("savedata").value +=
                 Lines[i].getPath().getArray().toString();
                document.getElementById("savedata").value += "),";
            }
        });

它给我错误 Line2.aspx:91 Uncaught TypeError: Lines[i].getPath is not a function(...)

【问题讨论】:

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


【解决方案1】:

用于检索折线的坐标

假设你有这样的一行

    var line = new google.maps.Polyline({
      path: linePath,
      geodesic: true,
      strokeColor: '#ff0000',
      strokeOpacity: 1,
      strokeWeight: 4,
      editable: true // if you dont want to see the editable point change it to false
    });

这样可以获取路径属性

  myPathArray =  line.getPath().getArray()

或者你可以这样显示内容

  alert(line.getPath().getArray().toString());

然后您可以检查 myPathArray 以获取每个点的 lat、lng 或将数组发送到服务器以进行服务器端拆分和存储

查看您的代码,您应该以这种方式添加新对象

google.maps.event.addDomListener(drawingManager, 'polylinecomplete', function (polyline) {
        Lines.push(polyline);
});

【讨论】:

  • @BentEl-Eslam 。您在数组中添加了错误的引用,因此当尝试检索对象属性时会出现错误..我已经用建议更新了我的答案..希望有用
  • 天哪!非常感谢您。现在它工作正常,但有一个异常说 Uncaught ReferenceError: google is not defined(...) 它不会影响结果,但我不知道它为什么会出现
  • @BentEl-Eslam .. 此异常与您的原始问题无关 .. 这意味着我的回答正确解决了原始问题,而您错误地使用了 DomListeners 。那么将我的答案标记为已接受是正确的。 (。看看这里如何meta.stackexchange.com/questions/5234/…)。最终,您可以发布一个新的有据可查的问题,与您的新错误严格相关
猜你喜欢
  • 2012-06-07
  • 2014-07-30
  • 2020-06-25
  • 1970-01-01
  • 2018-03-08
  • 2016-02-21
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多