javascript - 添加一个点以扩展多边形而不将其附加到 Google map 中?

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

我正在 Google map 中通过可以拖动以 reshape 形状的标记构建多边形。因此,当有 3 个标记时,将绘制多边形,并在形状中附加更多标记,扩展它。当用户只想遵循简单的顺时针/逆时针模式时,这很好,但当他想通过其边缘之一扩展多边形时,它会附加标记,扭曲自身。

Normal appending marker

在此示例中,如果我们添加标记 1、2 和 3,它将绘制一个简单的三 Angular 形。但是,如果添加标记 4,多边形就会自行扭曲。

相反,我希望在添加 4 时将其插入标记 1 和 2 之间,如下图所示:

Wanted appending marker

基本上,在多边形的顶点数组中,而不是:

[
    //marker 1 position,
    //marker 2 position,
    //marker 3 position,
    //current marker 4 position
]

我想要:

[
    //marker 1 position,
    //desired marker 4 position
    //marker 2 position,
    //marker 3 position
]

因此多边形将展开而不是扭曲自身。

有办法实现吗?或者我只需要告诉用户顺时针/逆时针构建他的多边形?

最佳答案

一般解决方案(找到一个中心点,使用几何库 computeHeading 方法从该点开始按航向顺序对点进行排序)。

给定一个包含代表多边形顶点的 google.maps.Marker 对象的数组 gmarkers:

function sortPoints2Polygon() {
      if (polyline) polyline.setMap(null);
      points = [];
      var bounds = new google.maps.LatLngBounds(); 
      for (var i=0; i < gmarkers.length; i++) {
        points.push(gmarkers[i].getPosition());
    bounds.extend(gmarkers[i].getPosition());
      }
      var center = bounds.getCenter();
      var bearing = [];
      for (var i=0; i < points.length; i++) {
        points[i].bearing = google.maps.geometry.spherical.computeHeading(center,points[i]);
      }
      points.sort(bearingsort);
      polyline = new google.maps.Polygon({
        map: map,
        paths:points, 
        fillColor:"#FF0000",
        strokeWidth:2, 
        fillOpacity:0.5, 
        strokeColor:"#0000FF",
        strokeOpacity:0.5
      });
}

function bearingsort(a,b) {
  return (a.bearing - b.bearing);
}

working example (starts with 3 random points)

关于javascript - 添加一个点以扩展多边形而不将其附加到 Google map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047932/

相关文章:

javascript - 如何在javascript中合并两个对象数组

javascript - 鼠标移开后,JQuery 将某些内容返回到原始位置时遇到问题

javascript - 将路径参数传递给 React 上下文提供者

android - 更改 map View 中指南针的位置

android - 来自服务器的带有数字标记的谷歌地图

javascript - Google Maps API v3 draggableCursor 选项,例如位置

javascript - 添加 ajax 后 JQuery 不起作用(Node.js、PUG)

google-maps - 谷歌反向地理编码 - 如何捕捉到最近的完整邮政编码

javascript - 添加大量标记时,Google Maps API V3 非常慢

google-maps - Google Places API - 计算给定半径内纬度/经度周围的地点总数?