如何在谷歌地图中找到一条线的中点
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
【讨论】:
以上是关于如何在谷歌地图中找到一条线的中点的主要内容,如果未能解决你的问题,请参考以下文章