Estaba leyendo esta pregunta aquí:
¿Qué tipo de datos usar al almacenar datos de latitud y longitud en bases de datos SQL?
Y parece que el consenso general es que usar Decimal (9,6) es el camino a seguir. La pregunta para mí es, ¿qué tan preciso realmente necesito esto?
Por ejemplo, la API de Google devuelve un resultado como:
"lat": 37.4219720,
"lng": -122.0841430
De -122.0841430, ¿cuántos dígitos necesito? He leído varias guías, pero no puedo encontrarles suficiente sentido para resolver esto.
Para ser más preciso en mi pregunta: si quiero ser preciso dentro de los 50 pies de la ubicación exacta, ¿cuántos puntos decimales necesito almacenar?
Quizás una pregunta mejor sería en realidad una pregunta que no sea de programación, pero sería: ¿cuánto más preciso le da cada punto decimal?
¿Es así de simple?
- Elemento de lista
- x00 = 6000 millas
- xx0 = 600 millas
- xxx = 60 millas
- xxx.x = 6 millas
- xxx.xx = .6 millas
- etc?
fuente
Respuestas:
Precisión frente a lugares decimales en el ecuador
ref: https://en.wikipedia.org/wiki/Decimal_degrees#Precision
fuente
Si desea una precisión de 50 pies (15 m), elija 4 dígitos. Entonces
decimal(9,6)
fuente
(8,6)
(o(6,4)
para guardar guardar un byte (en MySQL).Diseño bases de datos y he estado estudiando esta cuestión durante un tiempo. Usamos una aplicación lista para usar con un backend de Oracle donde los campos de datos se definieron para permitir 17 lugares decimales. ¡Ridículo! Eso está en milésimas de pulgada. Ningún instrumento GPS en el mundo es tan preciso. Así que dejemos a un lado 17 lugares decimales y tratemos con la práctica. El Gobierno garantiza que su sistema es bueno para "un" peor caso "con una precisión de pseudodistancia de 7.8 metros a un nivel de confianza del 95%", pero luego continúa diciendo que la FAA real (usando sus instrumentos de alta calidad) ha demostrado que las lecturas de GPS generalmente son buenas para dentro de un metro.
Así que tienes que hacerte dos preguntas: 1) ¿Cuál es la fuente de tus valores? 2) ¿Para qué se utilizarán los datos?
Los teléfonos móviles no son particularmente precisos y las lecturas de Google / MapQuest probablemente solo sean buenas hasta 4 o 5 decimales. Un instrumento GPS de alta calidad puede obtener 6 (dentro de los Estados Unidos). Pero capturar más que eso es una pérdida de espacio para escribir y almacenar. Además, si se realiza alguna búsqueda en los valores, es bueno que un usuario sepa que 6 sería lo máximo que debería buscar (obviamente, cualquier valor de búsqueda ingresado debe redondearse primero con la misma precisión que el valor de los datos que se buscan ).
Además, si todo lo que vas a hacer es ver una ubicación en Google Maps o ponerla en un GPS para llegar allí, cuatro o cinco son suficientes.
Tengo que reírme de que la gente de aquí ingrese todos esos dígitos. ¿Y dónde exactamente están tomando esa medida? ¿Pomo de la puerta de entrada? ¿Buzón en el frente? ¿Centro del edificio? ¿Parte superior de la torre celular? Y ... ¿todos lo toman constantemente en el mismo lugar?
Como un buen diseño de base de datos, aceptaría valores de un usuario de tal vez unos pocos más de cinco dígitos decimales, luego redondearía y capturaría solo cinco para lograr coherencia [tal vez seis si sus instrumentos son buenos y su uso final lo justifica].
fuente
DECIMAL(18,15)
toma 9 bytes.La distancia entre cada grado de latitud varía debido a la forma de la tierra y la distancia entre cada grado de longitud se hace más pequeña a medida que te acercas a los polos. Entonces, hablemos del ecuador, donde la distancia entre cada grado es 110,574 km para la latitud y 111,320 km para la longitud.
50 pies son 0.01524 km, entonces:
Necesita cuatro dígitos de escala, suficientes para bajar a diez milésimas de grado, con un total de siete dígitos de precisión.
DECIMAL(7,4)
debería ser suficiente para sus necesidades.fuente
Teniendo en cuenta las distintas partes de una esfera y una distancia diagonal, aquí hay una tabla de las precisiones disponibles:
- http://mysql.rjweb.org/doc.php/latlng#representation_choices
fuente
No almacene valores de coma flotante. Si bien puede suponer que son precisos, no lo son. Son una aproximación. Y resulta que diferentes lenguajes tienen diferentes métodos de "analizar" la información de punto flotante. Y diferentes bases de datos tienen diferentes métodos para implementar las aproximaciones de valores.
En su lugar, use un Geohash . Este video presenta y explica visualmente el Geohash en menos de 5 minutos. El Geohash es, CON MUCHO, la forma superior de codificar / decodificar información de longitud / latitud de una manera consistente. Al nunca "serializar" los valores de punto flotante aproximados de una longitud / latitud en columnas de la base de datos y, en su lugar, utilizando un Geohash, obtendrá las mismas garantías deseables de consistencia de ida y vuelta que obtiene con los valores de cadena. Este sitio web es ideal para ayudarte a jugar con un Geohash.
fuente
FLOAT
yDOUBLE
, en este contexto , no sufre algunos de los problemas que describe.FLOAT
valor y el valor 'siguiente' están tan cerca uno del otro en valor que no puede distinguir una ciudad (o vehículo o persona o pulga) de otra, entonces los errores de redondeo y representación no importan. Mientras tanto, casi siempre es una locura comparar dosFLOATs
(DOUBLEs
o aproximadamenteDECIMALs
) con '='.[mysql]
, no SQL Server.Si hace clic en ubicaciones en Google Maps, obtiene la latitud y la longitud con 7 lugares decimales
fuente