2010-09-30 70 views
2

我试图找到一种功能LNG = F(LAT),这将有助于我打2个给出GPS坐标,之间的线(LAT1,lng1)(LAT2 ,lng2)功能2之间GPS坐标线

我试过了传统的笛卡尔公式y = mx + b其中m =(y2-y1)/(x2-x1),但是GPS坐标看起来并不像那样。

什么是公式/算法,可以帮助我实现我的目标。 PS:我正在使用Google地图API,但如果可能的话让我们保持此实现不可知。

UPDATE:我的实现是错误的,它似乎算法实际上正如所述的一些答案。我的坏:(

schema

+0

答案取决于你的要求,如果你告诉我们,这将显露您当前的尝试未能满足您的期望的方式。你的意思是“似乎没有这样的行为”? – LarsH 2010-09-30 19:34:02

回答

2

你想要做的实际上应该工作。请记住然而,如果北方之上,水平(X)轴的经度和垂直什么(Y)轴如果你将参数化为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(球体上的最短路径),但更小的你正在寻找的区域中,不显着的差异将是重合(正如其他海报在此指出的那样)。

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

这是两个点之间地球曲率上的距离的“半马氏公式”。这怎么能帮助他画出一条线? – LarsH 2010-09-30 20:22:28

0

对于短距离,其中地球曲率没有显着差异,使用常规的二维几何图形绘制线条时可以很好地工作。

对于较长的距离,两条直线之间的最短路线不会在地图上显示为直线,而会以曲线形式显示。 (例如,从瑞典到阿拉斯加的最短路线将直线穿越极点,而不是过去的加拿大和冰岛。)您必须使用三维几何图形在球体表面绘制一条线,然后将其投影到地图与地图投影在地图上的方式相同。