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