如何在谷歌地图中找到一条线的中点

Posted

技术标签:

【中文标题】如何在谷歌地图中找到一条线的中点【英文标题】:How to find middle point of a line in google map 【发布时间】:2014-09-05 01:22:23 【问题描述】:

我正在尝试获取一条线的中点(矩形多边形中的一条线),但以下代码没有给我正确的答案。数量太少了。有人可以帮忙吗?

代码从这里修改:http://www.yourhomenow.com/house/haversine.html

var p1 = myRectPolygon.getPath().getAt(0);
var p2 = myRectPolygon.getPath().getAt(3);

var lat1 = p1.lat().toRad();
var lat2 = p2.lat().toRad();
var lon1 = p1.lng().toRad();
var dLon = (p2.lng() - p1.lng()).toRad();


var Bx = Math.cos(lat2) * Math.cos(dLon);
var By = Math.cos(lat2) * Math.sin(dLon);
lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2),
                  Math.sqrt((Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By ) ); 
lon3 = lon1.toRad() + Math.atan2(By, Math.cos(lat1) + Bx);

var mid_latLng = new google.maps.LatLng(lat3, lon3);

【问题讨论】:

【参考方案1】:

您将 lon1 转换为 rad 两次:

你声明:

 var lon1 = p1.lng().toRad();

然后你会这样做:

 lon3 = lon1.toRad() + Math.atan2(By, Math.cos(lat1) + Bx);

试试改成

 lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

我还发现了这个解决方案 (Using the Haversine Formula in javascript),它表明执行以下操作可能无法正常工作

(lon2-lon1).toRad();

改为做类似的事情

var dLonDeg = lon2-lon1
var dlon    = dLonDeg.toRad()

【讨论】:

【参考方案2】:

您可以使用geometry library 来计算中点:

var p1 = myRectPolygon.getPath().getAt(0);
var p2 = myRectPolygon.getPath().getAt(3);

var mid_latLng = google.maps.geometry.spherical.computeOffset(p1,
     google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 2,
     google.maps.geometry.spherical.computeHeading(p1, p2));

proof of concept fiddle

【讨论】:

以上是关于如何在谷歌地图中找到一条线的中点的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery在谷歌地图上的两点之间画一条线?

如何在谷歌地图上画线

如何在Android上使用谷歌地图或mapquest动态突出显示道路的一侧(或在旁边画一条线)

如何在谷歌地图中找到当前的缩放级别?

如何在谷歌地图中找到我的应用程序的用户?

如何在谷歌地图中找到前往某个区域的 LatLng?