¿Cuál es el mejor tipo de datos para usar al almacenar datos geoposicionales en C #? Usaría decimal por su exactitud, pero las operaciones con números de coma flotante decimal son más lentas que los números de coma flotante binaria (doble).
Leí que la mayoría de las veces no necesitará más de 6 o 7 dígitos de precisión para latitud o longitud. ¿Importa entonces la inexactitud de los dobles o puede ignorarse?
c#
latitude-longitude
geopoints
KRTac
fuente
fuente
double
,double
podría ser la mejor opción.Respuestas:
Adelante
double
, hay varias razones.fuente
Un doble tiene hasta 15 dígitos decimales de precisión. Entonces, supongamos que tres de esos dígitos estarán a la izquierda del punto decimal para los valores lat / long (máximo de 180 grados). Esto deja 12 dígitos de precisión a la derecha. Dado que un grado de latitud / longitud es ~ 111 km, 5 de esos 12 dígitos nos darían precisión al metro. 3 dígitos más nos darían precisión al milímetro. Los 4 dígitos restantes nos llevarían a una precisión de alrededor de 100 nanómetros. Dado que el doble ganará desde la perspectiva del rendimiento y la memoria, no veo ninguna razón para considerar siquiera usar decimal.
fuente
Me enfrenté a esta pregunta hace bastante tiempo cuando comencé con la programación espacial. Leí un libro hace un tiempo que me llevó a esto.
//SqlGeography.Point(dblLat, dblLon, srid)
Esta es la mejor forma de trabajar en su aplicación con datos espaciales. luego, para guardar los datos, use esto en sql
de lo contrario, si está usando otra cosa que no sea SQL, simplemente convierta el punto a hexadecimal y guárdelo. Después de mucho tiempo usando spacial, sé que este es el más seguro.
fuente
Doble
Combinando las respuestas, es como Microsoft lo representa en la biblioteca SqlGeography.
[get: Microsoft.SqlServer.Server.SqlMethod (IsDeterministic = true, IsPrecise = true)] public System.Data.SqlTypes.SqlDouble Lat {get; } Valor de propiedad SqlDouble Un valor de SqlDouble que especifica la latitud.
fuente