我试图获得一条线的中间点(矩形多边形中的一条线),但是下面的代码并没有给出正确的答案。这个数字太小了。有人可以帮忙吗?
代码从此处修改: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);
答案 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));