На языке программирования на уровне системы, таком как C, С++ или D, каков наилучший тип/кодировка для хранения широты и долготы?
Параметры, которые я вижу, следующие:
- IEEE-754 FP как градусы или радиан.
- градусов или радиан, сохраненных как фиксированное значение точки в 32 или 64 бит int
- отображение целочисленного диапазона в диапазон степени: →
deg = (360/2^32)*val
- градусы, минуты, секунды и дробные секунды, хранящиеся как битовые поля в int
- некоторая структура.
Простое решение (FP) имеет основную нижнюю сторону, что оно имеет очень неравномерное разрешение (где-то в Англии он может измеряться в микронах, в Японии он не может). Также у этого есть все проблемы сравнения FP и еще чего-то. Другие варианты требуют дополнительных усилий в разных частях жизненного цикла данных. (генерация, презентация, расчеты и т.д.)
Один интересный вариант - это тип плавающей точности, в котором при увеличении широты он получает больше бит, а долгота становится меньше (по мере приближения к полюсам).
Связанные вопросы, которые не совсем охватывают это:
- Какой идеальный тип данных используется при хранении широты/долготы в MySQL.
- Работа с значениями широты/долготы в Java
BTW: 32 бита дают вам разрешение E/W на экваторе около 0,3 дюйма. Это близко к масштабу, на котором могут работать высокоуровневые GPS-установки (IIRC они могут опускаться до примерно 0,5 дюйма в некоторых режимах).
OTOH, если 32 бита равномерно распределены по земной поверхности, вы можете индексировать квадраты около 344 м на стороне, 5 байтов дают 21 м, 6 Б- > 1,3 м и 8 Б- > 5 мм.
У меня сейчас нет конкретного использования, но я работал с этим раньше и ожидаю снова, в какой-то момент.