Помогите организовать хранение GPS координат

Сложный путь выбрали. Возьмите ноутбук, запрограммируйте в него свою навигацию. Садитесь в машину, выезжаете на спокойную заогородную прямую дорогу. Забиваете первую точку. Через пару километров (сколько прямой участок дороги позволяет) скалываете по карте вторую точку. Своим алгоритмом считаете направление, расстояние. По компасу задаете своей машине (велосипеду, самокату) направление. И вперед. По одометру проходите сколько надо (попутно любой прогой независимо дистанцию пробега фиксируете). Как только ваш алгоритм скажет “приехали” смотрите где же вы фактически оказались.

@Мишутк, вы были правы - ошибка у меня.
Обнаружилось это просто: посчитал на онлайн калькуляторе азимут первой точки = 12 градусов. Посчитал по декартовым = 77. Чуток потупил, потом дошло, что азимут отсчитывают от направления на север, а не от оси Х. Пересчитал все. Расхождение в азимуте в конце маршрута формула-калькулятор стало 0.95152649, менее градуса, расхождение в начале координат 0.001218954 Это я принять могу.
То что вы написали про машину честно говоря не понял. Катамаран при боком ветре прекрасно ходит боком, поэтому пересчитывать курс на следующую точку нужно постоянно и это не сложно. Получили текущие координаты, вычислили расстояние до точки. Если оно менее погрешности GPS(он это выдает), берем следующую точку. Если нет - считаем новый курс и идем тудыть. Не вижу сложностей в реализации.

@Мишутк, еще раз благодарю вас за помощь!

Для практических целей достаточно домножить широту на косинус. Для этого школьного курса вполне достаточно.
А если строить, скажем проекцию Меркатора (которая сегодня наиболее распространена), достаточно уметь читать - формулы есть в Википедии.
Нет, для общей эрудиции, возможно, учебник по навигации и интересно почитать, но по статистике наблюдается заметная корреляция между общей эрудицией и умением самостоятельно обрабатывать информацию.
Так что почитать про навигацию, возможно, будет полезно лишь гуманитариям.

Спроектировать сферу на плоскость достаточно. А вот осознать ограничения, возможность применения таких допущений, последствия - все намного забавнее. Я работаю в этой области уже второй десяток лет. Таких упрощателей “мне только координату посчитать” через нас прошло - музей можно открывать.

отож, да и с магнитным склонением не так всё однозначно, знаю одну точку отмеченную репером где магнитное склонение в минус, а через 100 метров на восток в плюс и так по всему разлому отмечается

Возможно офтоп извините. Лет 10 назад, когда китайцы массово начали продавать в РФ GPS трекеры, была такая не выдуманная история. Мой знакомый добирался до работы общественным транспортом (у него там ходила только одна маршрутка, причем одно и тоже единственное авто). Тогда ещё гланаса общественно доступного не было. Так вот кто то из пассажиров, для отслеживания заложил такой трекер в эту машинку. Товарищ говорил чуть не описился, когда на маршруте заскочили 3 бойца, всех выгнали и нашли этот трекер. Тогда разрешенная точность была 10 метров, а китайцы достигали 1 и меньше метра. Интересно, с какой точностью ТC собрался свои координаты для трекера беспилотника наносить на карту?

Точность приемника, о которой мы сейчас говорим - это способность в идеальных условиях определить свои координаты по триангуляции, т.е. по задержкам сигнала. Без этого никуда, не спорю. Но какой бы точный приемник ни был, от случайных помех вносимых извне, влияющих на скорость прохождения сигнала, никак не защититься силами только лишь приемника. Так что ползания точки будут всегда. Выход придуман - дифференциальные поправки. Только “в полях” они не существуют сами по себе. Вот и будем очень точно двигаться по осевой линии маршрута в десятке метров в стороне. До смены альманаха. А потом внезапно резко эта линия окажется с противоположной стороны. И очень точно будет определяться еще длительное время.

Оно конечно достаточно…
Только лучше бы об этом даже и не упоминать, т.к. этих проекций - как собак нерезанных, да и датумов больше одного. В общем, проекция - штука такая, в которой в самой по себе элементарно закопаться.
Так что лучше - чего попроще (а о проекции - даже не упоминать).
С обратной связью - вывезет.
А без обратной связи - без шансов хотя бы из-за погрешности определения исходных координат и углов.
И - да, непосредственно с навигацией мне иметь дело не приходилось, но вот разработка ГИС, в которой одной из подзадач было корректное совмещение растра (спутниковых снимков) с вектором, прошла вполне успешно.

Насчет “невыдуманности” есть некоторые сомнения: трекер - прибор пассивный, радиосигнала не излучает. Искать его - как иголку в стоге сена. Да и причины искать его как-бы тоже нет.

Хмммм…

Хмммм-2

Товарищ майор, у меня не беспилотник, а катамаран, который идет по реке. И никаких данных он никуда не отправляет. А наносить(точнее говоря с карты заносить в программу) хотел с 6 знаком после запятой. Однако Ардуина меня обломала жестко. Об этом следующий пост.

Скорее всего, там нашелся умелец, который передавал координаты маршрутки по сотовой связи. Удобненько, как сейчас в яндекс-картах - смотришь где твой автобус и не спеша топаешь к остановке.

Выложу здесь, может кому-то пригодится.
Ардуино и формула Хаверсина
Arduino and Haversine formula

Точность типа float на AVR составляет 6-7 знаков. Для корректой работы формула Хаверсина(расстояния по GPS координатам) этого недостаточно. Для близлежайших точек погрешность до 200м.

Вариант решения при условии, что мы работаем в небольшом прямоугольнике:
Вычислить(например, в экселе) по формуле Хаверсина длину 1 градуса долготы на разных широтах и загнать в массив. Далее смотреть на какой широте мы находимся и брать нужную длину. У меня с 54 до 57 градуса это 31 значение, по объему терпимо.
Быстродействие: Хаверсин на моих данных(18*50 точек) считался 500-600мс, этот вариант 100мс.

float Distance(float lat1, float lon1, float lat2, float lon2) {
  float DistByLat = 111194.926644548;  //Расстояние 1 градуса по широте
  //Расстояние 1 градуса по долготе на разных широтах
  //31 значение от 54 ло 57 градусов северной широты
  float DistByLonN[] = {65358.195053793, 65201.0881682731, 65043.7826771225, 64886.2790595346, 64728.577795306, 64570.6793648352, 64412.5842491212, 64254.2929297617, 64095.8058889521, 63937.1236094835, 63778.2465747417, 63619.1752687054, 63459.9101759451, 63300.4517816209, 63140.8005714821, 62980.9570318646, 62820.9216496903, 62660.6949124651, 62500.2773082776, 62339.6693257975, 62178.8714542744, 62017.8841835358, 61856.7080039863, 61695.3434066053, 61533.7908829463, 61372.0509251347, 61210.124025867, 61048.0106784084, 60885.7113765924, 60723.2266148183, 60560.5568880503};

  byte N = (lat1 - 54) * 10;
  float DeltaByLat = 10 * (lat1 - 54 - N * 0.1);
  float DistByLon = (1 - DeltaByLat) * DistByLonN[N] + DeltaByLat * DistByLonN[N + 1];

  float LatDist = (lat2 - lat1) * DistByLat;
  float LonDist = (lon2 - lon1) * DistByLon;
  
  float D2 = LatDist * LatDist + LonDist * LonDist;
  return sqrt(D2);
}

и нахрен он тогда нужен?
GPS приемник да пассивный, а трекер это все же связка GPS+GSM (в общем случае)

1 лайк

Вы наверно не совсем в теме вот для примера вам китайский трекер https://aliexpress.ru/item/1005008824888614.html?sku_id=12000046833040411&spm=a2g2w.productlist.search_results.3.78ba5af01CZTJq
Излучающий))

1 лайк

Трекер - от слова “трек”. Т.е. устройство, записывающее треки. Треки обычно пишутся в flash память (на карту или на встроенную в трекер). Зачем здесь GSM?
К сожалению, по ссылке отсутствует описание, так что что он там излучает неизвестно.

Вообще жеЮ вот это - микропроцессор:


а вот это - уже нет:

но маркетологи по-прежнему называют тот, что внизу, микропроцессором.
Терминология - консервативна.

Затем, что местоположение можно определять ещё и используя сотовую наземную связь.

1 лайк

AGPS, если не ошибаюсь, именно так и работает. Сначала по станциям, потом по спутникам.