Quel est le meilleur type de données à utiliser lors du stockage de données géographiques en C #? J'utiliserais décimal pour son exactitude, mais les opérations sur les nombres décimaux à virgule flottante sont plus lentes que les nombres binaires à virgule flottante (double).
J'ai lu que la plupart du temps, vous n'aurez plus besoin de 6 ou 7 chiffres de précision pour la latitude ou la longitude. L'inexactitude des doubles compte-t-elle même alors ou peut-elle être ignorée?
double
, celadouble
pourrait être le meilleur ajustement.Réponses:
Allez
double
-y, il y a plusieurs raisons.la source
Un double a jusqu'à 15 chiffres décimaux de précision. Supposons donc que trois de ces chiffres se trouvent à gauche de la virgule décimale pour les valeurs lat / long (max de 180 degrés). Cela laisse 12 chiffres de précision sur la droite. Étant donné qu'un degré de lat / long est d'environ 111 km, 5 de ces 12 chiffres nous donneraient une précision au mètre. 3 chiffres de plus nous donneraient une précision au millimètre. Les 4 chiffres restants nous permettraient d'obtenir une précision d'environ 100 nanomètres. Étant donné que le double gagnera du point de vue des performances et de la mémoire, je ne vois aucune raison d'envisager même d'utiliser le décimal.
la source
J'ai été confronté à cette question il y a un certain temps lorsque j'ai commencé la programmation spatiale. J'ai lu il y a quelque temps un livre qui m'a amené à cela.
//SqlGeography.Point(dblLat, dblLon, srid)
C'est la meilleure façon de travailler dans votre application avec des données spatiales. puis pour enregistrer les données, utilisez ceci dans sql
sinon, si vous utilisez quelque chose d'autre qui n'est pas SQL, convertissez simplement le point en hexadécimal et stockez-le. Je sais qu'après une longue période d'utilisation spatiale, c'est le plus sûr.
la source
Double
En combinant les réponses, c'est ainsi que Microsoft le représente lui-même dans la bibliothèque SqlGeography
[get: Microsoft.SqlServer.Server.SqlMethod (IsDeterministic = true, IsPrecise = true)] public System.Data.SqlTypes.SqlDouble Lat {get; } Valeur de la propriété SqlDouble Une valeur SqlDouble qui spécifie la latitude.
la source