реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> расчет растояния по координатам.
alexdos
сообщение Apr 30 2013, 15:28
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит. Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты. Координат будет штук 500, а может и больше.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 30 2013, 15:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(alexdos @ Apr 30 2013, 18:28) *
Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит.

Для таких дистанций можно считать Землю плоской и расстояние считать по Пифагору, с учётом того что дельта растояния по долготе зависит от широты.

Цитата(alexdos @ Apr 30 2013, 18:28) *
Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты.

Мало данных: если у вас PC или Cortex-M4F - можно работать с плавучкой и будет всё равно быстро, если что-то типа PIC16 - то совсем по другому - работать лучше с целыми величинами. Опять же в какое время должен вложится обсчёт?



Ещё момент - нужно ли учитывать что полушария бывают западное и восточное?
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 30 2013, 15:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(alexdos @ Apr 30 2013, 19:28) *
Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит. Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты. Координат будет штук 500, а может и больше.


Я вот так считаю:
Код
#include <math.h>

double sdlat, sdlon, dist;
volatile double lat, clat, lon, clon;

clat = 57.60904722 * M_PI / 180.0;
clon = 39.82411944 * M_PI / 180.0;

lat = 57.6083 * M_PI / 180.0;
lon = 39.82488333 * M_PI / 180.0;

sdlat = sin((lat - clat) / 2.0);
sdlon = sin((lon - clon) / 2.0);
dist = 2.0 * asin(sqrt(sdlat * sdlat + cos(clat) * cos(lat) * sdlon * sdlon)) * 6367444.6571225;


На Cortex-M4F довольно быстро.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 30 2013, 16:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(adnega @ Apr 30 2013, 18:58) *
Я вот так считаю:
Код
dist = 2.0 * asin(sqrt(sdlat * sdlat + cos(clat) * cos(lat) * sdlon * sdlon)) * 6367444.6571225;

Почему через арксинус? Sqrt недостаточно? Или точность выше?
Go to the top of the page
 
+Quote Post
alexdos
сообщение Apr 30 2013, 16:56
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(_Артём_ @ Apr 30 2013, 19:34) *
Почему через арксинус? Sqrt недостаточно? Или точность выше?


расчет будет проводится на STM32f100.
Вот и я думаю, зачем усложнения в вычислениях косинусами, арксинусами. По сути задача на моё мнение сводится к вычислению гипотенузы в треугольнике. Где гипотенуза искомое расстояние, а катеты, разница между координатами (проэкции на широту и долготу). Учитывая что это все растояния будут не более 500 метров, точность не высокая, даже ошибка в пару метров устроит, то можно все упростить.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение May 1 2013, 06:40
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(_Артём_ @ Apr 30 2013, 18:39) *
Для таких дистанций можно считать Землю плоской и расстояние считать по Пифагору, с учётом того что дельта растояния по долготе зависит от широты.

Все равно косинус нужен, но есть хорошие целочисленные алгоритмы для MC, уже обсуждалось в этой ветке около года назад.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 1 2013, 06:44
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(alexdos @ Apr 30 2013, 18:28) *
Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит. Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты. Координат будет штук 500, а может и больше.


Давно пользуемся таким методом.

Код
#define Pi 3.14159265358979

//вычисление расстояния между двумя точками
unsigned int calcDist(double Lat1, double Long1, double Lat2, double Long2)
{
  double Lat1_Radi=0, Lat_metr=0, Long_metr=0, Res=0;


  Lat1_Radi = 111112*cos( (Pi*Lat1)/180 );


  Lat_metr = (Lat1*111112) - (Lat2*111112);

  Long_metr = (Long1*Lat1_Radi) - (Long2*Lat1_Radi);

  Res = sqrt( (Lat_metr*Lat_metr) + (Long_metr*Long_metr) );
  return ((unsigned int) Res);
}
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 1 2013, 10:42
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(GeGeL @ May 1 2013, 09:40) *
Все равно косинус нужен

Можно затабулировать с каким-то шагом, например для каждого градуса.
Цитата(GeGeL @ May 1 2013, 09:40) *
есть хорошие целочисленные алгоритмы для MC, уже обсуждалось в этой ветке около года назад.

Что за тема?
Go to the top of the page
 
+Quote Post
V_G
сообщение May 1 2013, 11:48
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Гораздо лучше, быстрее и точнее считать расстояния не по географическим, а по прямоугольным координатам. Все GPS-приемники считают в XYZ (относительно центра Земли), но в стандартном NMEA вывод наружу прямоугольных координат не предусмотрен. Приходится переключаться на бинарные протоколы.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение May 1 2013, 12:51
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Формулы здесь: http://gis-lab.info/qa/great-circles.html Алгоритм проще писать с плавающей точкой. Переписывать с фиксированной IMHO заметный маразм (float работает и на PIC18 но тянет за собой много мат. функций в ПЗУ). Понадобятся: синус и косинус, корень квадратный и atan2 -- всё кордиком (если вручную, с фикс. точкой). Но, повторюсь, маразм, ибо с плавающей может даже быстрей считаться (для фикс. точки разрядность бОльшая).

Если памяти на float нет (double не нужен и медленее, cosf() вместо cos() и т.п.), то остаётся только считать на плоскости. В 16 битах расстояния до ~65км с погрешностью до 500м на больших расстояниях. Понадобятся корень квадратный (32 бита кордиком) и косинус (12 бит кордиком).


Сообщение отредактировал Frolov Kirill - May 1 2013, 12:55
Go to the top of the page
 
+Quote Post
GeGeL
сообщение May 3 2013, 11:00
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(GeGeL @ May 1 2013, 09:40) *
...есть хорошие целочисленные алгоритмы для MC, уже обсуждалось в этой ветке около года назад.


Цитата(_Артём_ @ May 1 2013, 13:42) *
Что за тема?


Тема по стояночному дрейфу координат:
http://electronix.ru/forum/index.php?showtopic=96786
Кстати, таки получилось у меня сделать хороший фильтр стояночных звезд. Вкратце: использую очередь с адаптируемым размером, обсчитываю по оригинальному фильтрующему
алгоритму всю группу накопленных в ней точек (фрейм). В итоге подавляет как быстрый, так и медленный дрейф, последовательно приближаясь к средней координате. Но даже при медленном начале движения с маневрами четко фиксирует и выдает начало трека. Вместе с использованием отправки точек по перемещению (тоже адаптируемому) и по повороту дает очень плавный трек без никаких артефактов даже в условиях города (помехи, застройка). А при быстром относительно равномерном движении размер очереди (и латентность фильтра) минимальны.
Проверено на Quectel M12 под OCPU: для его 32bit ARM7 это легкая задача.
Go to the top of the page
 
+Quote Post
x893
сообщение May 22 2013, 20:44
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Цитата(GeGeL @ May 3 2013, 15:00) *
Тема по стояночному дрейфу координат:
http://electronix.ru/forum/index.php?showtopic=96786
Кстати, таки получилось у меня сделать хороший фильтр стояночных звезд. Вкратце: использую очередь с адаптируемым размером, обсчитываю по оригинальному фильтрующему
алгоритму всю группу накопленных в ней точек (фрейм). В итоге подавляет как быстрый, так и медленный дрейф, последовательно приближаясь к средней координате. Но даже при медленном начале движения с маневрами четко фиксирует и выдает начало трека. Вместе с использованием отправки точек по перемещению (тоже адаптируемому) и по повороту дает очень плавный трек без никаких артефактов даже в условиях города (помехи, застройка). А при быстром относительно равномерном движении размер очереди (и латентность фильтра) минимальны.
Проверено на Quectel M12 под OCPU: для его 32bit ARM7 это легкая задача.


Было бы интересно проверить на своем приемнике - не планируете опубликовать ?
Go to the top of the page
 
+Quote Post
GeGeL
сообщение May 23 2013, 18:46
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Пока нет, к сожалению: алгоритм работает в составе коммерческого софта.
Go to the top of the page
 
+Quote Post
Telit_Sprt
сообщение May 23 2013, 21:30
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 21-01-13
Пользователь №: 75 273



Доброй ночи,
всем пользователям модемов от Телит, предлагается новый сервис M2M Locatе, для определения местоположения модуля по базовым станциям, причем все вычисления проходят на стороне сервиса M2M locate. Более подробно об этом сервисе можно прочитать по ссылке - Telit M2M Locate

Желаю удачи!
Go to the top of the page
 
+Quote Post
GeGeL
сообщение May 24 2013, 17:04
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(Telit_Sprt @ May 24 2013, 00:30) *
вычисления проходят на стороне сервиса

А можно поподробнее алгоритм? ТА хоть используется?

Цитата
А тестовых целях сервис предоставляется в свободном доступе, но с ограничением до 10 запросов в сутки с одного модуля.

Как то даже неконкурентно в сравнении с тем же Quectel: у них все бесплатно и неограниченно...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 13:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016