|
расчет растояния по координатам. |
|
|
|
Apr 30 2013, 15:39
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(alexdos @ Apr 30 2013, 18:28)  Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит. Для таких дистанций можно считать Землю плоской и расстояние считать по Пифагору, с учётом того что дельта растояния по долготе зависит от широты. Цитата(alexdos @ Apr 30 2013, 18:28)  Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты. Мало данных: если у вас PC или Cortex-M4F - можно работать с плавучкой и будет всё равно быстро, если что-то типа PIC16 - то совсем по другому - работать лучше с целыми величинами. Опять же в какое время должен вложится обсчёт? Ещё момент - нужно ли учитывать что полушария бывают западное и восточное?
|
|
|
|
|
Apr 30 2013, 15:58
|
Гуру
     
Группа: Свой
Сообщений: 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 довольно быстро.
|
|
|
|
|
Apr 30 2013, 16:56
|
Местный
  
Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856

|
Цитата(_Артём_ @ Apr 30 2013, 19:34)  Почему через арксинус? Sqrt недостаточно? Или точность выше? расчет будет проводится на STM32f100. Вот и я думаю, зачем усложнения в вычислениях косинусами, арксинусами. По сути задача на моё мнение сводится к вычислению гипотенузы в треугольнике. Где гипотенуза искомое расстояние, а катеты, разница между координатами (проэкции на широту и долготу). Учитывая что это все растояния будут не более 500 метров, точность не высокая, даже ошибка в пару метров устроит, то можно все упростить.
|
|
|
|
|
May 1 2013, 06:40
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

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

Профессионал
    
Группа: Свой
Сообщений: 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); }
|
|
|
|
|
May 1 2013, 10:42
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(GeGeL @ May 1 2013, 09:40)  Все равно косинус нужен Можно затабулировать с каким-то шагом, например для каждого градуса. Цитата(GeGeL @ May 1 2013, 09:40)  есть хорошие целочисленные алгоритмы для MC, уже обсуждалось в этой ветке около года назад. Что за тема?
|
|
|
|
|
May 1 2013, 12:51
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
May 3 2013, 11:00
|
Местный
  
Группа: Свой
Сообщений: 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 это легкая задача.
|
|
|
|
|
May 22 2013, 20:44
|

Профессионал
    
Группа: Свой
Сообщений: 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 это легкая задача. Было бы интересно проверить на своем приемнике - не планируете опубликовать ?
|
|
|
|
|
May 23 2013, 21:30
|

Участник

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

|
Доброй ночи, всем пользователям модемов от Телит, предлагается новый сервис M2M Locatе, для определения местоположения модуля по базовым станциям, причем все вычисления проходят на стороне сервиса M2M locate. Более подробно об этом сервисе можно прочитать по ссылке - Telit M2M LocateЖелаю удачи!
|
|
|
|
|
May 24 2013, 17:04
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(Telit_Sprt @ May 24 2013, 00:30)  вычисления проходят на стороне сервиса А можно поподробнее алгоритм? ТА хоть используется? Цитата А тестовых целях сервис предоставляется в свободном доступе, но с ограничением до 10 запросов в сутки с одного модуля. Как то даже неконкурентно в сравнении с тем же Quectel: у них все бесплатно и неограниченно...
|
|
|
|
|
May 24 2013, 19:56
|

Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 12-11-10
Из: СПБ
Пользователь №: 60 836

|
Цитата(GeGeL @ May 24 2013, 21:04)  Как то даже неконкурентно в сравнении с тем же Quectel: у них все бесплатно и неограниченно... да нет конечно. бесплатный сервис планируется. мы же не самоубийцы... в тестовых целях сервис пока идет с ограничением до 10 запросов в сутки. Кстати насколько мне известно, симоком и квактель юзают открытый и непонятный открытый сервер вроде гугля, на котором непонятно как и что считается и конечно без гарантий всяких. ну типа завтра мы съехали и досвидос сервису. а у нас используется свой телитовский сервак за который отвечает компания, P.S. подразделению модулей Телит в этом году 10 лет!
|
|
|
|
|
May 27 2013, 06:55
|

Участник

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

|
Цитата(x893 @ May 25 2013, 00:06)  Не могу найти кнопки - Использоватть или Регистрация для использования сервиса не требуется регистрации, нужно только обновить модуль до Февральской прошивки. По командам отписался на странице новости.
|
|
|
|
|
Jun 11 2013, 05:53
|
Участник

Группа: Участник
Сообщений: 44
Регистрация: 1-10-12
Из: Санкт-Петербург
Пользователь №: 73 753

|
Цитата(alexdos @ Apr 30 2013, 19:28)  Подскажите где почитать про расчет растояния по координатам, нужно упрощенная формула, для растояний до 500 метров, точность не шибкая, и пару метров устрит. Но чтоб просто и быстро. Нужно знать приблизился ли обьект с жпс на какоето растояния до статической координаты. Координат будет штук 500, а может и больше. Со стороны SIMCom - все достаточно просто. Почитайте статью из БТ - http://mt-system.ru/sites/default/files/docs/bt_10_28_2.pdfточность очень приблизительная и зависит от плотности расположения базовых станций того или иного оператора в данной местности. Это связано с тем, что модуль определяет координаты базовой станции с которой работает в данный момент. P.s. по вопросу "открытого и непонятного сервера вроде гугля". Чет у меня доверие к надежности работы, доступности серверу Googla больше, пади и серверов у него в разы больше...
Сообщение отредактировал Relax - Jun 11 2013, 05:55
|
|
|
|
|
Jun 11 2013, 06:32
|
Местный
  
Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856

|
Цитата(Relax @ Jun 11 2013, 08:53)  точность очень приблизительная и зависит от плотности расположения базовых станций того или иного оператора в данной местности. Это связано с тем, что модуль определяет координаты базовой станции с которой работает в данный момент. Тема немного стала уходить в сторону. Могу доложить некоторые изыскания. Во первых должен немного сказать про то для какой задачи. И условия задачи. Основная цель, определения попадания обьекта в заданную область от тзвестной координаты. Область круг, растояние до координаты от места положения обьекта будет радиус. Обьект движущийся, машина. Расчет растояния нужно в пределах одного города. При средней скорости 40 км/ч и получение координат с частотой 1 раз в сек. обьект успевает изменить свое положение на 11 метров. Поэтому смысла вычислять растояние с точностью до миллиметры нет. Поэтому, в "гугля" было "спрошено" сколько приходится растояния на изменения на еденицу по широте и долготе. Взяты координаты двух точек и растояние между ними расчитаны двумя способами. 1. "спросили" у то го же гугля, растояние получилось 3226.7025001787 метров 2. Расчитано по теореме пифагора, по разнице координат, получилось 3222.5241770131 метров Разница составила 4.178323165782 метров, что составляет 0.1295% ошибки. При этом "растояния на изменения на еденицу по широте и долготе" было взято от места удалённого на 200 км. При такой ошибке расчетов, упрощение расчетов, вполне возможно для решения моей задачи.
Сообщение отредактировал alexdos - Jun 11 2013, 06:34
|
|
|
|
|
Jun 11 2013, 22:03
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(alexdos @ Jun 11 2013, 10:32)  Поэтому, в "гугля" было "спрошено" сколько приходится растояния на изменения на еденицу по широте и долготе. А смысл спрашивать у Гугла? На градус по долготе приходится всегда одинаковое расстояние (длина меридиана разделить на 360). На градус по широте можете брать то же значение (земля - шар), умноженное на косинус долготы. Далее - по Пифагору. На одном расчете получите точность в доли процента при расстояния в километры. Но если, например, делаете одометр в самом трекере, то надо принять меры для предупреждения накопления ошибок и корректного округления. У меня получалась точность одометра около 1-2% на суточном пробеге.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|