2

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

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

我最初寻求一个公式来获取线的反向并以某种方式确定使用了哪个。但它过于依赖地图显示。我什至想看看如果我首先将它们转换为像素,是否可以从线的端点获得中心,但数据转换对结果没有影响。

所以我然后想在折线上寻找一个相交方法,通过一个点来检查 - 如果不是,从反向线找到中心点(我相信会是 180-center.lng())但是那里不是折线上的交集方法。所以我开始研究边界对象,因为边界上有一些交集/包含方法。

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

(检索边界的功能归功于 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 传递给我的标记创建工具,以在线的实际中心生成箭头,而不必担心它是以哪种方式绘制的。

4

0 回答 0