Двойной или десятичный для значений широты/долготы в С#
Каков наилучший тип данных для хранения геопозиционных данных на С#? Я бы использовал десятичную для него точность, но операции с десятичными числами с плавающей запятой медленнее, чем двоичные числа с плавающей запятой (double).
Я читал, что большую часть времени вам больше не понадобится 6 или 7 цифр точности для широты или долготы. Нечеткость двойников даже имеет значение или может быть проигнорирована?
Ответы
Ответ 1
Идите в два раза, есть несколько причин.
- Тригонометрические функции доступны только для двойных
- Точность двойника намного превосходит все, что вам когда-либо понадобится для значений Lat/Lon.
- Сторонние модули (например, DotSpatial) также используют double для координат
Ответ 2
Двойник имеет до 15 десятичных цифр точности. Итак, предположим, что три из этих цифр будут находиться слева от десятичной точки для значений lat/long (макс. 180deg). Это оставляет 12 цифр точности справа. Поскольку степень lat/long составляет ~ 111 км, 5 из этих 12 цифр будут давать точность счетчику. Еще 3 цифры дали бы точность миллиметра. Остальные 4 цифры получат точность до примерно 100 нанометров. Поскольку double будет выигрывать с точки зрения производительности и памяти, я не вижу причин даже рассматривать использование десятичных чисел.
Ответ 3
Я столкнулся с этим вопросом совсем недавно, когда начал с пространственного программирования.
Некоторое время назад я прочитал книгу, которая привела меня к этому.
//sql server has a really cool dll that deals with spacial data such like
//geography points and so on.
//add this namespace
Using Microsoft.SqlServer.Types;
//SqlGeography.Point(dblLat, dblLon, srid)
var lat_lon_point = Microsoft.SqlServer.Types.SqlGeography.Point(lat, lon, 4326);
Это лучший способ при работе с вашим пространственным пространством.
то для сохранения данных используйте это в sql
CREATE TABLE myGeoTable
{
LatLonPoint GEOMETRY
}
else, если вы используете что-то еще, что isnt sql просто конвертируйте точку в шестнадцатеричную и сохраните ее. Через долгое время я знаю, что это самое безопасное.