我正在尝试找到一个函数 lng = f(lat),它可以帮助我在2个给定的GPS坐标之间画一条线,(lat1,lng1)和(lat2,lng2)。
我尝试过传统的笛卡尔公式y = mx + b,其中m =(y2-y1)/(x2-x1),但GPS坐标似乎没那么表现。
什么是可以帮助我实现目标的公式/算法。
PS:我正在使用谷歌地图API,但如果可能的话,让我们保持这种实现不可知。
更新:我的实现是错误的,似乎算法实际上正如一些答案所述。我的坏:(
答案 0 :(得分:2)
您想要做的事情应该实际工作。但请记住,如果北在顶部,水平(x)轴是LONGITUDE,垂直(y)轴是LATITUDE(我想你可能会对此感到困惑)。
如果将线参数化为lat = func(long),那么当经度变化而经度变化时,垂直线(即那些正好向南的线)会遇到麻烦。
因此我宁愿使用另一种参数化:
long(alpha) = long_1 + alpha * (long_2 - long_1)
lat(alpha) = lat_1 + alpha * (lat_2 - lat_1)
并将alpha
从0更改为1.
这与great circle(球体上的最短路径)并不完全一致,但是你所看到的区域越小,差异就越小(正如其他人在这里指出的那样)。
答案 1 :(得分:0)
这是我使用的距离公式可能会有所帮助。这是使用javascript。
function Distance(lat1, lat2, lon1, lon2) {
var R = 6371; // km
var dLat = toRad(lat2 - lat1);
var dLon = toRad(lon2 - lon1);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c * 0.621371;
var r = Math.round(d * 100) / 100;
return r;
}
答案 2 :(得分:0)
对于短距离,地球曲率没有显着差异,使用常规二维几何图形绘制线条可以正常工作。
对于较长距离,两条线之间的最短路径不会在地图上以直线投影,而是以曲线形式投影。 (例如,从瑞典到阿拉斯加的最短路径将直接通过极点,而不是经过加拿大和冰岛。)您必须使用三维几何在球体表面上绘制一条线,然后将其投影到地图与地图投影在地图上的方式相同。
答案 3 :(得分:0)
您的目标是找到这个等式还是实际画一条线?
如果是后者,由于您使用的是Maps API,请指定geodesic: true
并使用Polyline
绘制:
http://code.google.com/apis/maps/documentation/javascript/reference.html#Polyline