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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Несколько вопросов по обработке NMEA
Alt.F4
сообщение Jul 17 2011, 04:30
Сообщение #1


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Добрый день.
$GPRMC,181057.000,A,5545.2389,N,03745.6063,E,0.47,74.50,190311,,,A*51
1. Подскажите пожалуйста, какое максимальное кол-во символов в следующих параметрах NMEA полученных от GPS-применика:
а) Широта
в) Долгота
с) Скорость
2. Как можно рассчитать расстояние между 2-мя полученными координатами широты/долготы?
Спасибо.

Сообщение отредактировал Alt.F4 - Jul 17 2011, 04:32
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 17 2011, 05:56
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



1) зачем вам символы - вырезайте между запятыми. Я в своём парсере так и делал.
2) Когда для диплома "навигатор" делал , сделал так:

Поиск расстояния между 2 координатами.

// Константы, используемые для вычисления смещения и расстояния
const double D2R=0.017453; // Константа для преобразования градусов в радианы
const double R2D=57.295781; // Константа для преобразования радиан в градусы
const double a=6378137.0; // Основные полуоси
const double b=6356752.314245; // Неосновные полуоси
const double e2=0.006739496742337; // Квадрат эксцентричности эллипсоида
const double f=0.003352810664747; // Выравнивание эллипсоида


Код
double DIST(double StartLat, double StartLong, double EndLat, double EndLong)
{
double fPhimean,            // Средняя широта
fdLambda,                  // Разница между двумя значениями долготы
fdPhi,                     // Разница между двумя значениями широты
fAlpha,                    // Смещение
fRho,                      // Меридианский радиус кривизны
fNu,                       // Поперечный радиус кривизны
fR,                        // Радиус сферы Земли
fz,                        // Угловое расстояние от центра сфероида
fTemp,                     // Временная переменная, использующаяся в вычислениях
Distance;                  // Вычисленное расстояния в метрах

unsigned char S[20];

// Вычисляем разницу между двумя долготами и широтами и получаем среднюю широту
fdLambda=(StartLong - EndLong)*D2R;
fdPhi=(StartLat - EndLat)*D2R;
fPhimean=((StartLat + EndLat)/2.0)*D2R;

// Вычисляем меридианные и поперечные радиусы кривизны средней широты
fTemp=1-e2*(pow(sin(fPhimean),2));
fRho=(a*(1-e2))/pow(fTemp, 1.5);
fNu=a/(sqrt(1-e2*(sin(fPhimean)*sin(fPhimean))));
// Вычисляем угловое расстояние                                        
fz=sqrt(pow(sin(fdPhi/2.0),2)+cos(EndLat*D2R)*cos(StartLat*D2R)*pow(sin(fdLambda/2.0),2));
fz=2*asin(fz);
// Вычисляем смещение
fAlpha=cos(EndLat*D2R)*sin(fdLambda)*1/sin(fz);
fAlpha=asin(fAlpha);
// Вычисляем радиус Земли
fR=(fRho*fNu)/((fRho*pow(sin(fAlpha),2))+(fNu*pow(cos(fAlpha),2)));
// Получаем расстояние
Distance=(fz*fR);
return Distance;                                                    
};


Вот так вычислял азимут (незнаю насколько правильно), весь смысл в формировании местной системы координат . осями которой являются хорды паралельные параллелям и меридианам:

Код
double Azimut(double StartLat, double StartLong, double EndLat, double EndLong)
{
double AZ;
double OX,OY;
unsigned char S[20];
OX=DIST(StartLat, StartLong, StartLat, EndLong);
OY=DIST(StartLat, StartLong, EndLat, StartLong);
if (StartLat<=EndLat)
        {
        if (StartLong<=EndLong)
                        {
                        AZ=atan(OX/OY)*R2D;
                        }
                        else
                        {
                        AZ=360-atan(OX/OY)*R2D;
                        };
        }
        else
        {
        if (StartLong<=EndLong)
                        {
                        AZ=180-atan(OX/OY)*R2D;
                        }
                        else
                        {
                        AZ=180+atan(OX/OY)*R2D;
                        };
        };  

return AZ;                
};


ЗЫ С гуглоземлёй сходилось, точность не замерял - не было смысла - диплом , не коммерческий прожект. Кое где код можно оптимизировать ( И я молодой был и компилятор тупил)

Сообщение отредактировал MKdemiurg - Jul 17 2011, 09:03
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jul 17 2011, 07:11
Сообщение #3


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Цитата
1. Подскажите пожалуйста, какое максимальное кол-во символов в следующих параметрах NMEA полученных от GPS-применика:
а) Широта
в) Долгота
с) Скорость
1) зачем вам символы
Чтобы знать, сколько байт выделить в СОЗУ под это дело.

Цитата
2) Когда для диплома "навигатор" делал , сделал так:
Попробую на след.выходных...

Сообщение отредактировал Alt.F4 - Jul 17 2011, 07:11
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 17 2011, 07:48
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(Alt.F4 @ Jul 17 2011, 11:30) *
Добрый день.
$GPRMC,181057.000,A,5545.2389,N,03745.6063,E,0.47,74.50,190311,,,A*51
1. Подскажите пожалуйста, какое максимальное кол-во символов в следующих параметрах NMEA полученных от GPS-применика:
а) Широта
в) Долгота
с) Скорость
Я понимаю так, что количество символов не изменно, оно определено стандартом, символы либо есть, либо нет.
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 17 2011, 09:13
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(Alt.F4 @ Jul 17 2011, 11:11) *
Чтобы знать, сколько байт выделить в СОЗУ под это дело.


Ну так выделите больше. Я брал массив вырезал от запятой до запятой. Отделял градусы вотдельный массив из 3х(или 4 для долготы) байт. В конце вставлял /0 (определитель конца строки - ноль). Использовал массивы градусов и минут как входные переменные функции преобразования в число. На выходе получал double - вполне удовлетворительная точность (теоретически). Складывал градусы и доли градусов от преобразования минут.


Цитата(sobr @ Jul 17 2011, 11:48) *
Я понимаю так, что количество символов не изменно, оно определено стандартом, символы либо есть, либо нет.


Изменно - в разных приёмниках бывает разное кол-во символов после десятичной точки.

Сообщение отредактировал MKdemiurg - Jul 17 2011, 09:57
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 17 2011, 14:14
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(MKdemiurg @ Jul 17 2011, 16:13) *
Изменно - в разных приёмниках бывает разное кол-во символов после десятичной точки.
Ваша правда, дробная част переменной длины.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jul 17 2011, 14:43
Сообщение #7


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Ну так выделите больше.
Насколько больше?
Интересует конкретные цифры:
- широта (вроде как 9 символов с точкой максимум)
- долгота (аналогично, только 10. Хотя первый ноль можно исключить, мне до туда не доехать =)
- скорость (5 с точкой максимум)
Спасибо.

Сообщение отредактировал Alt.F4 - Jul 17 2011, 14:50
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 17 2011, 14:52
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(Alt.F4 @ Jul 17 2011, 18:43) *
Насколько больше?
Интересует конкретные цифры:
- широта (вроде как 9 символов с точкой максимум)
- долгота (аналогично, только 10)
- скорость (5 с точкой максимум)
Спасибо.

Я брал так как вы и написали 9 и 10 (для долготы). Для уверенности ( так сказать чтобы парсер не "завис") можно вырезать ровно по 4 цифры после точки-разделителя.
А вообще можно посчитать для конкретной точности, остальное отбрасывать.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jul 17 2011, 15:43
Сообщение #9


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



А что со скоростью, сколько максимум символов после запятой, два?
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 17 2011, 17:00
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Вообще два символа после запятой. Я один обрабатывал. Т.к. опять же точности хватало. А вообще это зависит от приёмника и кол-ва выборок для расчёта. Он всёравно даёт усреднёную скорость. Если хотите точности - ставте акселерометр электронный. Стоит то какихто 100-120 грн.

ЗЫ Вообще 0.01 от узла - это 0.005м\с - 5мм\с - я сомневаюсь, что GPS приёмники на такое способны.

Сообщение отредактировал MKdemiurg - Jul 17 2011, 17:08
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jul 17 2011, 19:19
Сообщение #11


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Вообще 0.01 от узла - это 0.005м\с - 5мм\с
0,01 узлов = (0,01/1,852)км/ч = 0.0054 км/ч = 1,5 мм/с sm.gif

Сообщение отредактировал Alt.F4 - Jul 17 2011, 19:19
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 17 2011, 19:34
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Брр,чот не так , подожь.

1,852км/ч/3600=0,514(4) м/с
0,514*0.01=0.00514м/с=5.14мм/с - НЕ?


Цитата
(0,01/1,852)км/ч = 0.0054 км/ч

(0,01/1,852)км/ч = 0,01852 км/ч.

Кароче неважно, без реперных точек и поправок такая точность невозможна.

Сообщение отредактировал MKdemiurg - Jul 17 2011, 19:39
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jul 18 2011, 04:18
Сообщение #13


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



А ё, это надо умножать на 1,852...
Go to the top of the page
 
+Quote Post
V_G
сообщение Jul 18 2011, 05:03
Сообщение #14


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

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



Если не зацикливаться на NMEA, то в любом приемнике есть бинарный протокол, дающий геоцентрические координаты в метрах, по которым легко посчитать дистанцию без трехэтажных формул преобразования из географических координат. И скорость часто бывает в км/ч.

А в NMEA разные приемники могут давать разное число знаков после точки. Что в широте/долготе, что в скорости
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jul 18 2011, 05:36
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(V_G @ Jul 18 2011, 09:03) *
Если не зацикливаться на NMEA, то в любом приемнике есть бинарный протокол, дающий геоцентрические координаты в метрах, по которым легко посчитать дистанцию без трехэтажных формул преобразования из географических координат. И скорость часто бывает в км/ч.


Это вы про SIRF ? - далеко не во всех. А вот NMEA - во всех.
Go to the top of the page
 
+Quote Post

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

 


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


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