谷歌地图Javascript和与多边形交叉+/- 180子午线

时间:2014-05-13 20:39:36

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

在谷歌地图上处理多边形时,可能会出现多边形穿过地图重叠的情况。例如,当转到地图的右边缘,并放置点以创建一个框时,地图右边缘的左边点和地图重复的左边缘上的右边的点(如地图可以无限水平平移。)

那就是说,我会看到接近+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子午线。

感谢所有提供支持的人!

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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之间。如果不是,你也需要解决这个问题......如果你需要帮助,请告诉我。