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

时间:2014-09-05 01:22:23

标签: google-maps maps

我试图获得一条线的中间点(矩形多边形中的一条线),但是下面的代码并没有给出正确的答案。这个数字太小了。有人可以帮忙吗?

代码从此处修改: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);

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

您可以使用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