Какой тип данных лучше всего использовать при хранении геопозиционных данных на C #? Я бы использовал десятичное число для его точности, но операции с десятичными числами с плавающей запятой медленнее, чем с двоичными числами с плавающей запятой (double).
Я читал, что в большинстве случаев вам не понадобится более 6 или 7 цифр точности для широты или долготы. Имеет ли значение тогда неточность двойников или ее можно игнорировать?
double
, этоdouble
может быть наилучшим вариантом.Ответы:
Идите
double
, есть несколько причин.источник
Двойное значение имеет точность до 15 десятичных знаков. Итак, давайте предположим, что три из этих цифр будут слева от десятичной точки для значений широты / долготы (максимум 180 градусов). Это оставляет 12 знаков точности справа. Поскольку градус широты / долготы составляет ~ 111 км, 5 из этих 12 цифр дадут нам точность до метра. Еще 3 цифры дадут нам точность до миллиметра. Оставшиеся 4 цифры обеспечат точность порядка 100 нанометров. Поскольку double будет выигрывать с точки зрения производительности и памяти, я не вижу причин даже рассматривать использование decimal.
источник
Я столкнулся с этим вопросом довольно давно, когда начинал заниматься пространственным программированием. Некоторое время назад я прочитал книгу, которая привела меня к этому.
//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
иначе, если вы используете что-то еще, кроме sql, просто преобразуйте точку в шестнадцатеричное и сохраните. Я знаю после долгого использования spacial, что это самый безопасный.
источник
Двойной
Объединив ответы, это то, как Microsoft представляет себя в библиотеке SqlGeography
[получить: Microsoft.SqlServer.Server.SqlMethod (IsDeterministic = true, IsPrecise = true)] общедоступный System.Data.SqlTypes.SqlDouble Lat {получить; } Значение свойства SqlDouble Значение SqlDouble, определяющее широту.
источник