variable valor sirve que programacion para mostrar float entre diferencia decimales asignar c# latitude-longitude geopoints

sirve - Doble o decimal para los valores de latitud/longitud en C#



mostrar 2 decimales en c# (3)

Enfrenté esta pregunta hace bastante tiempo cuando comencé con la programación espacial. Hace un tiempo leí un libro que me llevó a esto.

//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);

Esta es la mejor manera cuando trabaja en su aplicación con datos espaciales. luego para guardar los datos, use esto en sql

CREATE TABLE myGeoTable { LatLonPoint GEOMETRY }

de lo contrario, si está utilizando algo más que no es sql, simplemente convierta el punto a hexadecimal y guárdelo. Sé que después de mucho tiempo usando Spacial, este es el más seguro.

¿Cuál es el mejor tipo de datos para usar cuando se almacenan datos de posición en C #? Usaría decimal para su exactitud, pero las operaciones en números decimales de coma flotante son más lentas que los números binarios de coma flotante (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 se puede ignorar?


Ir por el double , hay varias razones.

  • Las funciones trigonométricas están disponibles solo para dobles
  • La precisión del doble (rango de 100 nanómetros) va mucho más allá de lo que pueda necesitar para los valores Lat / Lon
  • La clase GeoCoordinate y los módulos de terceros (por ejemplo, DotSpatial ) también usan el doble para las coordenadas

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 valores de lat / long (máx. De 180deg). Esto deja 12 dígitos de precisión a la derecha. Dado que un grado de lat / long es ~ 111 km, 5 de esos 12 dígitos nos darían precisión al medidor. 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 siquiera considerar usar el decimal.