Как Расчитать Расстояние Между Географическими Координатами?
Алексис
14.10.2010 17:29
Даны две точки:
N 55*52’52.04″ E 037*41’35.55″ и N 55*52’45.45″ E 037*41’42.71″
Как точно расчитать между ними расстояние?
Ответов: 6
Алексис
17.02.2006 в 14:58
СергейСумароков, 17.02.2006 12:56, сказал(а):
Const WGS84 = 6378.137
Function rad2km(dblRadians As Double) As Double
rad2km = dblRadians * WGS84
End Function
Function gcDistance(dblLat1 As Double, ByVal dblLon1 As Double, dblLat2 As Double, ByVal dblLon2 As Double) As Double
' Вычисляет расстояние между двумя точками, заданными географическими координатами
' Принимает координаты в радианах, возвращает расстояние в радианах
dblLon1 = dblLon1 * (-1)
dblLon2 = dblLon2 * (-1)
gcDistance = 2 * ASin(Sqr((Sin((dblLat1 - dblLat2) / 2)) ^ 2 _
+ Cos(dblLat1) * Cos(dblLat2) * (Sin((dblLon1 - dblLon2) / 2)) ^ 2))
End Function
И не говорите мне, что это слишком сложно для вас… 😉
Да… 😛
kolobok
17.02.2006 в 14:13
Кулькулятор 🙂 где то в файлах лежит, посмотри. Есть формулы но наизусть непомню, надо в учебниках смотреть.
СергейСумароков
17.02.2006 в 14:56
Const WGS84 = 6378.137
Function rad2km(dblRadians As Double) As Double
rad2km = dblRadians * WGS84
End Function
Function gcDistance(dblLat1 As Double, ByVal dblLon1 As Double, dblLat2 As Double, ByVal dblLon2 As Double) As Double
' Вычисляет расстояние между двумя точками, заданными географическими координатами
' Принимает координаты в радианах, возвращает расстояние в радианах
dblLon1 = dblLon1 * (-1)
dblLon2 = dblLon2 * (-1)
gcDistance = 2 * ASin(Sqr((Sin((dblLat1 - dblLat2) / 2)) ^ 2 _
+ Cos(dblLat1) * Cos(dblLat2) * (Sin((dblLon1 - dblLon2) / 2)) ^ 2))
End Function
И не говорите мне, что это слишком сложно для вас… 😉
Bor
17.02.2006 в 18:42
Или проводим от центра Земли в эти точки вектора и находим угол между этими векторами, тогда умножив угол на радиус Земли найдем расстояние между точками (длину дуги).
Длина дуги: L=Rz*Y; где Y угол между векторами, Rz — радиус Земли.
Угол найдем из школьной формулы (скалярное произведение векторов поможет нам): cos Y = (x1*x2+y1*y2+z1*z2)/(r1*r2);
Преобразование сферических координат в прямоугольные:
Если считать прямоугольные координаты по WGS84 http://www.wgs84.com…4/downloads.htm, разбив угол между векторами на участки, а затем проинтегрировать, то получится точность аналогичная калькулятору CAICA http://www.caica.ru/aerocalk.htm.
Сообщение изменено: Bor (17 Февраль 2006 — 18:48)
Serge
17.02.2006 в 21:20
есть формула для расчёта длины ортодромии:
cos S=sin (широта1)*sin (широта2)+cos (ibhjnf1)*cos (широта2)*cos (долгота2-долгота1)
после чего S получишь в угловой мере… переведёшь в радианы и умножишь на радиус Земли (6372,9)км… и всё 🙂
СергейСумароков, 17.02.2006 12:56, сказал(а):
И не говорите мне, что это слишком сложно для вас… 😉
Да… 😛
И не говорите мне, что это слишком сложно для вас… 😉
Длина дуги: L=Rz*Y; где Y угол между векторами, Rz — радиус Земли.
Угол найдем из школьной формулы (скалярное произведение векторов поможет нам): cos Y = (x1*x2+y1*y2+z1*z2)/(r1*r2);
Преобразование сферических координат в прямоугольные:
z=Rz*sin(широта);
x=Rz*cos(широта)*cos(долгота);
y=Rz*cos(широта)*sin(долгота);
Ну и теорема Пифагора: r^2=x*x+y*y+z*z;
Если считать прямоугольные координаты по WGS84 http://www.wgs84.com…4/downloads.htm, разбив угол между векторами на участки, а затем проинтегрировать, то получится точность аналогичная калькулятору CAICA http://www.caica.ru/aerocalk.htm.
Сообщение изменено: Bor (17 Февраль 2006 — 18:48)
cos S=sin (широта1)*sin (широта2)+cos (ibhjnf1)*cos (широта2)*cos (долгота2-долгота1)
после чего S получишь в угловой мере… переведёшь в радианы и умножишь на радиус Земли (6372,9)км… и всё 🙂
теория
Сообщение изменено: -arra- (21 Февраль 2006 — 15:27)