Вычисление расстояний на сфере
Добавлено: 07 июн 2006, 00:58
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
Далее почему-то идут x, y, z ???'получение координат точек в радианах
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
Непонятно как z (в основном трудность с пониманием синтаксиса Avenue):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
это хорошо, но раз использовали статью, то почему бы не сослаться на нее в своей?tarantyl писал(а):Воспользовался данной статьей и написал функционал для mysql
Забыл написать, это про 3-ю формулу.neilsagitov писал(а):Что-то не так у меня считает или я чего-то не понял.
Довольно старое заблуждение. На самом деле теорема гаверсинусов для малых расстояний не имеет значительных преимуществ перед теоремой косинусов. С точки зрения математики гаверсинус есть перенормированный косинус:Формула гаверсинусов используется, чтобы избежать проблем с небольшими расстояниями.
Код: Выделить всё
hav x = (1 − cos x) / 2
Код: Выделить всё
x x_c − x x_h − x
5.96046e−08 3.52909e−23 −4.41055e−24
2.98023e−08 4.41055e−24 1.10183e−24
1.49012e−08 5.50915e−25 1.37325e−25
7.45058e−09 −7.45058e−09 1.69637e−26
3.72529e−09 −3.72529e−09 2.01948e−27
1.86265e−09 −1.86265e−09 2.01948e−28