【问题标题】:Google Maps Javascript and working with Polygons crossing +/-180 meridian [duplicate]Google Maps Javascript 并使用穿过 +/-180 子午线的多边形 [重复]
【发布时间】:2014-05-13 20:39:35
【问题描述】:

在谷歌地图上使用多边形时,可能会出现多边形会与地图重叠的情况。例如,当走到地图的右边缘,并放置点创建一个框,左点在地图的右边缘,右点在地图的左边缘重复(作为地图可以无限水平平移)。

也就是说,我会看到接近 +180 和 -180 极端值的点,例如:

[50, 178] top left
[50, -178] top right
[-50, -178] bottom right
[-50, 178] bottom left

这是从polygon.getPath()点的循环中取出时提供的数据。

google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
polySelected = true;
coords = new Array();
polygon.getPath().forEach(function (l, index) {
coords[index]="("+l.lat()+","+l.lng()+")"
});
}

根据这些数据,无法判断这些点是否真的穿过 180 子午线。如果我取出“左上”、“右上”,您将无法辨别用户的第二个点是向右(过 180)还是向左(形成一个非常大的框)。

有没有办法解决这个问题?比如没有像那样的“包装”坐标 [50, 182]?处理跨越边界并有数据表示的标准方法是什么?

谢谢!

编辑 - 这不是关闭多边形并让坐标捕捉到一个非常大的区域的情况。这种情况适用于法线多边形手动闭合,创建一个小的方形多边形,但是一个穿过地图水平重复并且结果坐标与穿过重复 180 子午线的多边形或非常宽的多边形无法区分(但垂直没有不同)并覆盖相反的区域。我希望我可以用图片来帮助解释,但我还没有这个功能。

回答 我没有办法回答我自己的问题,但是我已经想通了并想分享。我意识到您不能绘制纵向延伸超过 180 度的多边形的边缘。知道这一点,如果您有两个相差大于 180 的点,它会穿过 +/-180 子午线。

感谢所有提供支持的人!

【问题讨论】:

  • google.maps.LatLng class 支持可选的 noWrap 参数。多边形往往会走最短的路径,即使它穿过子午线,如果你想让它们走很长的路,你需要插入额外的顶点。
  • 谢谢,我确实注意到了这一点,但是我正在使用 google.maps.drawing.DrawingManager 来创建多边形,但我还没有看到实现它的方法。

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


【解决方案1】:

你可以这样做:

var longitude = l.lng();
while (longitude > 180)
    longitude -= 360; // e.g. 182 and 542 become -178, which is the equivalent longitude
while (longitude < -180)
    longitude += 360;

coords[index]="("+l.lat()+","+longitude+")";

只要您的纬度在 90 到 -90 之间。如果不是,您也需要解决这个问题...如果您需要帮助,请告诉我。

【讨论】:

  • 你真的不想像经度一样包裹纬度......无论如何我不认为这是OP正在寻找的。​​span>
  • 地理:为什么不考虑纬度?它从-90到90,纬度92就像-88纬度不是吗?如果不是这个,您认为 OP 正在寻找什么?
  • 92 度是北极以北,-88 度是南极正北,它们相距甚远,而纬度-181 度和+179 度是同一个地方。
  • 啊,你是对的。您不能对纬度使用相同的技术。
  • 嗨,我查看了提出的其他解决方案,但我认为这不适用于我的问题。经度永远不会超过 180,这是我的问题的一部分。我希望坐标延伸到外面,所以我可以区分我的多边形实际上是一个刚刚超过 180 标记的小多边形,而不是一个延伸到地图大部分而不是 180 子午线的巨大多边形。
猜你喜欢
  • 2011-06-11
  • 2021-09-28
  • 1970-01-01
  • 2018-03-09
  • 2018-10-31
  • 1970-01-01
  • 2016-07-20
  • 2021-09-16
  • 1970-01-01
相关资源
最近更新 更多