谷歌地图api v3国际日期线折线上的中心点

时间:2012-09-12 16:30:46

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

我正在回答我自己的问题(希望对你有利),但这就是问题所在:

我创建了一个包含折线的世界地图(在Google maps API v3中)。其中一些行跨越IDL(国际日期行)。我想在我的一些线上放置方向箭头,每条线的中心有一个箭头。在跨越IDL的线上,通过将2个端点平均在一起计算出的箭头中心:     (latlng1.lat()+ latlng2.lat()/ 2),(latlng1.lng()+ latlng2.lng()/ 2) 在世界各地以相反的方式绘制线条,在地图上留下浮动箭头,而不是在实际线条的中心。

我最初寻找一个公式来获得该行的反转并以某种方式确定使用了哪一个。但它太依赖于地图显示。如果我第一次将它们转换为像素,我甚至可以看到是否可以从线的终点获得中心,但数据转换对结果没有影响。

所以我考虑在折线上寻找一个交叉方法,通过一个点来检查 - 如果不是,从反向线找到中心点(我认为这将是180-center.lng() )但折线上没有交叉方法。所以我开始研究bounds对象,因为在bounds上有一些交集/包含方法。

因此,对于相对无证的问题,这是一个非常简单的解决方案:

(用于检索边界的功能归功于Ben Appleton,ty):

function getBoundsForPoly(poly) {
  var bounds = new google.maps.LatLngBounds;
  poly.getPath().forEach(function(latLng) {
  bounds.extend(latLng);
  });
  return bounds;
}

var poly_bounds = MapAbstraction.get_poly_bounds(line);
var center_point =poly_bounds.getCenter();

然后我可以将我的center_point传递给我的标记创建工具,以在线条的实际中心生成箭头,而不必担心它的绘制方式。

0 个答案:

没有答案