Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как вычислить расстояние между координатами GPS?

Ru Ученик (129), закрыт 15 лет назад
Дополнен 15 лет назад
У меня нет навигатора - мне нужно в программе расчёт сделать.
Вот сам нашёл - весьма точно считает метод - погрешность 0,5%.Хорош для города где расстояния в пределах 100 км максимум.

'Name: great-cirlces.ave
'Function: Calculate distance and initial bearing between points basing on a sphere
'Author: Maxim Dubinin
' sim@gis-lab.info
'Created: 31.05.2006
'Last Update: 02.11.2006
'Notes: This script is also used in Argos-tools for distance calculation

'pnt1, pnt2 - точки между которыми вычисляются расстояния
'pi - число pi, rad - радиус сферы (Земли), num - количество
знаков после запятой
pi = 3.14159265358979
rad = 6372795

'получение координат точек в радианах
lat1 = pnt1.getY*pi/180
lat2 = pnt2.getY*pi/180
long1 = pnt1.getX*pi/180
long2 = pnt2.getX*pi/180

'косинусы и синусы широт и разниц долгот
cl1 = lat1.cos
cl2 = lat2.cos
sl1 = lat1.sin
sl2 = lat2.sin
delta = long2 - long1
cdelta = delta.cos
sdelta = delta.sin

'вычисления длины большого круга
p1 = (cl2*sdelta)^2
p2 = ((cl1*sl2) - (sl1*cl2*cdelta))^2
p3 = (p1 + p2)^0.5
p4 = sl1*sl2
p5 = cl1*cl2*cdelta
p6 = p4 + p5
p7 = p3/p6
anglerad = (p7.atan).SetFormatPrecision (num)
dist = anglerad*rad

'вычисление начального азимута
x = (cl1*sl2) - (sl1*cl2*cdelta)
y = sdelta*cl2 z = (-y/x).ATan.AsDegrees
if (x < 0) then z = z+180 end
z = -(z + 180 mod 360 - 180).AsRadians
anglerad2 = z - ((2*pi)*((z/(2*pi)).floor))
angledeg = (anglerad2*180)/pi

'возврат значений длины большого круга и начального азимута
distlist = {dist, angledeg}
return distlist
Лучший ответ
Александр Николаев. Просветленный (35316) 15 лет назад
Кратчайшее расстояние между двумя точками на земной поверхности (если принять ее за сферу) определяется зависимостью:

cos(d) = sin(φА) ·sin(φB) + cos(φА) ·cos(φB)·cos(λА − λB),

где φА и φB — широты, λА, λB — долготы данных пунктов, d — расстояние между пунктами, измеряемое в радианах длиной дуги большого круга земного шара.
Расстояние между пунктами, измеряемое в километрах, определяется по формуле:

L = d·R,

где R = 6371 км — средний радиус земного шара.
Остальные ответы
Борис Петухов Мудрец (13851) 15 лет назад
А разве в навигаторе такая функция отсутствует?
Александр R9AAA Прокудин Высший разум (101230) 15 лет назад
вот простая программа, как говорится, "с бородой":
http://www.mediafire.com/?1cijmjlnikz
qthloc назвается. . проще вроде как не придумаешь.

Для более точного вычисления надо знать тип проекции и датум при которых производились измерения координат.
Valery Профи (691) 15 лет назад
всё это очень умно, но не практично!
а кто из вас пробовал всё это вычислить, а потом поверить точность этих вычислений?
я пробовал и пришел к выводу, что для расстояний более 10 морских миль погрешность составит около 20 метров для любого способа вычислений. надо только учесть, что:
1. одна минута по широте равна одной морской миле, т. е. 1852 метра
2. расстояние по долготе нужно измерять широтными минутами.
а далее - пифагоровы штаны...
Источник: моя 10 летняя штурманская практика
Похожие вопросы