【问题标题】:Google Maps Polygon editing - get latlng position on mouseup谷歌地图多边形编辑 - 在 mouseup 上获取 latlng 位置
【发布时间】:2015-10-26 14:44:05
【问题描述】:

我正在尝试编写一个简单的捕捉功能,用于在 Google Maps v3.9 中编辑多边形

我在地图上有几个多边形,可以一次编辑一个。 当一个是可编辑的时,我还添加了一个侦听器,以便在拖动顶点时触发。

由于google.maps.Polygon 没有拖动事件,我添加了一个mousedown 侦听器,它检查顶点是否在光标下方,如果是,则添加一个mouseup 侦听器。 这个mouseup 监听器中的代码检查所有其他多边形的顶点,如果找到匹配项,则更新拖动的顶点。

这很好用,除了一个问题。使用mouseup 侦听器返回的PolyMouseEventlatLng 属性执行检查。该属性指向顶点被拖动之前的位置,我找不到在新位置引用顶点的方法。

dragListener = google.maps.event.addListener( poly1, "mousedown", function( dragData ) {

    // if dragging a vertex
    if ( dragData.vertex != null ) {

        // perform snap on mouseup
        snapListener = google.maps.event.addListener( poly1, "mouseup", function( mouseData ) {
            var editingVertex = mouseData.vertex;
            var draggedLatLng = mouseData.latLng;

            // code here to compare draggedLatLng with latLng of editingVertex
            // and perform snap, which seems to work fine as is...
        }
    }
}

【问题讨论】:

  • 我正在尝试实现同样的目标,但我找不到任何解决方案...
  • 我写了一个库来解决这个问题。请看my answer here

标签: google-maps-api-3


【解决方案1】:

多边形是路径的集合,路径是 MVCArraysLatLng 对象,因此我们可以在多边形中的每个路径上侦听 set_at 事件,它会告诉我们何时移动了一个点。

poly1.getPaths().forEach(function(path, index){
  google.maps.event.addListener(path, 'set_at', function(index, oldLatLng){
    var newLatLng = path.getAt(index);
    // Now you have both the old and new position
  });
});

如果你知道你的多边形永远不会有超过一个路径(内环),那么你可以这样做:

google.maps.event.addListener(poly1.getPath(), 'set_at', function(index, oldLatLng){
  var newLatLng = path.getAt(index);
});

虽然我推荐第一个,因为您永远不知道具有多条路径的多边形何时会以某种方式潜入。

【讨论】:

  • 这似乎没有做的是让您在拖动顶点时获得顶点的位置,只有当您将顶点放在新位置时才会调用“set_at”事件。有没有人在被拖动时找到一种方法来获取顶点的位置?
猜你喜欢
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2016-02-11
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多