【问题标题】:Save drawn polygon in googlemaps api在谷歌地图 api 中保存绘制的多边形
【发布时间】:2017-09-10 22:10:40
【问题描述】:

大家好,我尝试从谷歌地图 api 保存绘制的多边形,但我不知道如何。我想保存多边形(坐标或路径并将它们作为表单发送。这就是我所拥有的到目前为止,我试图阅读文档,但我无法理解。

<script>
    function initMap() {
        var map = new google.maps.Map(document.getElementById('map'), {
            center: {lat: 46.435812, lng: 27.639917},
            zoom: 17,
            mapTypeId: 'hybrid'});

       var drawingManager = new google.maps.drawing.DrawingManager({
           drawingMode: google.maps.drawing.OverlayType.MARKER,
           drawingControl: true,
           drawingControlOptions: {
               position: google.maps.ControlPosition.TOP_CENTER,
               drawingModes: ['polygon']
           },
       });

       drawingManager.setMap(map);
    };
</script>

编辑:

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

【问题讨论】:

标签: javascript google-maps


【解决方案1】:

对于多边形,执行与类似问题中相同的操作:Saving coordinates and data from Google maps in a database,只需对多边形使用适当的事件 (polygoncomplete) 并通过路径进行处理,将所有坐标添加到适当的形式字段:

google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
  var coordStr = "";
  for (var i = 0; i < polygon.getPath().getLength(); i++) {
    coordStr += polygon.getPath().getAt(i).toUrlValue(6) + ";";
    console.log(coordStr);
    document.getElementById('coords').value = coordStr;
  }
});

proof of concept fiddle

代码 sn-p:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: 46.435812,
      lng: 27.639917
    },
    zoom: 17,
    mapTypeId: 'hybrid'
  });

  var drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: ['polygon']
    },
  });
  google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
    var coordStr = "";
    for (var i = 0; i < polygon.getPath().getLength(); i++) {
      coordStr += polygon.getPath().getAt(i).toUrlValue(6) + ";";
    }
    document.getElementById('coords').value = coordStr;
  });
  drawingManager.setMap(map);
};
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing"></script>
<input id="coords" style="width:600px" />
<div id="map"></div>

【讨论】:

  • 没关系 "google.maps.event.addDomListener(window, "load", initMap);"应该在 initMap 中。现在它正在工作
  • 不,这不应该在initMap 函数中。如果您在 Google Maps Javascript API 的包含中包含 callback=initMap(当 API 完成加载时会异步调用 initMap),那么您不需要该行。
  • 如果这回答了您的问题,请accept it
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 2014-07-21
  • 2012-05-31
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多