我试图找到一种功能LNG = F(LAT),这将有助于我打2个给出GPS坐标,之间的线(LAT1,lng1)和(LAT2 ,lng2)。功能2之间GPS坐标线
我试过了传统的笛卡尔公式y = mx + b其中m =(y2-y1)/(x2-x1),但是GPS坐标看起来并不像那样。
什么是公式/算法,可以帮助我实现我的目标。 PS:我正在使用Google地图API,但如果可能的话让我们保持此实现不可知。
UPDATE:我的实现是错误的,它似乎算法实际上正如所述的一些答案。我的坏:(
我试图找到一种功能LNG = F(LAT),这将有助于我打2个给出GPS坐标,之间的线(LAT1,lng1)和(LAT2 ,lng2)。功能2之间GPS坐标线
我试过了传统的笛卡尔公式y = mx + b其中m =(y2-y1)/(x2-x1),但是GPS坐标看起来并不像那样。
什么是公式/算法,可以帮助我实现我的目标。 PS:我正在使用Google地图API,但如果可能的话让我们保持此实现不可知。
UPDATE:我的实现是错误的,它似乎算法实际上正如所述的一些答案。我的坏:(
你想要做的实际上应该工作。请记住然而,如果北方之上,水平(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(球体上的最短路径),但更小的你正在寻找的区域中,不显着的差异将是重合(正如其他海报在此指出的那样)。
这是我使用的距离公式,可能有所帮助。这是使用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;
}
这是两个点之间地球曲率上的距离的“半马氏公式”。这怎么能帮助他画出一条线? – LarsH 2010-09-30 20:22:28
对于短距离,其中地球曲率没有显着差异,使用常规的二维几何图形绘制线条时可以很好地工作。
对于较长的距离,两条直线之间的最短路线不会在地图上显示为直线,而会以曲线形式显示。 (例如,从瑞典到阿拉斯加的最短路线将直线穿越极点,而不是过去的加拿大和冰岛。)您必须使用三维几何图形在球体表面绘制一条线,然后将其投影到地图与地图投影在地图上的方式相同。
你的目标是找到这个方程还是要划一条线?
如果是后者,因为你使用Google Maps API,指定geodesic: true
,并绘制一个Polyline
:
http://code.google.com/apis/maps/documentation/javascript/reference.html#Polyline
谢谢,但我实际上是试图给标记添加动画。 – 2010-10-12 21:15:09
答案取决于你的要求,如果你告诉我们,这将显露您当前的尝试未能满足您的期望的方式。你的意思是“似乎没有这样的行为”? – LarsH 2010-09-30 19:34:02