Как можно получить азимут в градусах из предложения GPRMC NMEA?

Я пишу программу, которая получает данные в виде предложений GPRMC NMEA и выводит их, как указано в GTFS-realtime.

GTFS-realtime требует значение «азимута» и описывает его как таковое:

Азимут в градусах по часовой стрелке от истинного севера, т. Е. 0 - север, а 90 - восток. Это может быть азимут по компасу или направление к следующей остановке или промежуточному месту. Это не должно быть выведено из последовательности предыдущих позиций, которые клиенты могут вычислить из предыдущих данных.

Предложения GPRMC NMEA содержат три поля, которые я считаю важными, но мое исследование выявило множество разных идей о том, что они из себя представляют:

  1. Track angle in degrees True, Course Made Good, True, Track made good in degrees True
  2. Magnetic Variation, Variation, Magnetic variation degrees (Easterly var. subtracts from true course)
  3. Magnetic Variation, East/West, E or W

Для полноты приведем полное предложение GPRMC с выделенными жирным шрифтом соответствующими полями:

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084,4,230394,003,1,В*6A

Как мне получить азимут в формате GTFS-realtime из предложения GPRMC NMEA?


person drewbug    schedule 04.04.2013    source источник


Ответы (1)


Недавно я купил модуль GPS для подключения к моему Arduino, и мне пришлось узнать о структуре предложений GPRMC. Поскольку GPS вычисляет направление, рисуя вектор от предыдущего положения к текущему положению, поправка на магнитный северный полюс не принимается во внимание. Азимут в GTFS-realtime должен быть таким же, как «Угол пути в градусах True» GPRMC. Они оба относятся к истинному северу. Представьте, что вы стоите в центре круга и смотрите прямо на север. Когда вы повернетесь по часовой стрелке на 30 градусов, вы окажетесь на азимуте 30 градусов (если вы будете двигаться вперед). Структура данных должна быть примерно такой, я думаю:

header {
  gtfs_realtime_version: "1.0"
}
entity {
    id: "myPosition"
    vehiclePosition{
        position{
            position_id: "myBearing"{
                bearing: 84.4
            }
        }
    }           
}

Я понял это из описаний и примеров на этих страницах: https://developers.google.com/transit/gtfs-realtime/reference#VehiclePosition https://developers.google.com/transit/gtfs-realtime/examples/trip-updates-full

Это помогает?

person user2694968    schedule 19.08.2013
comment
Это определенно помогает. В конце концов я перешел на использование пакета OneBusAway-NYC, но я уверен, что я не единственный, кто когда-либо найдет ответ на этот вопрос полезным. Тогда спасибо! - person drewbug; 19.08.2013