Je lisais cette question ici:
Et il semble que le consensus général soit que l'utilisation de Decimal (9,6) est la voie à suivre. La question qui se pose à moi est de savoir à quel point j'ai besoin de cela.
Par exemple, l'API de Google renvoie un résultat tel que:
"lat": 37.4219720,
"lng": -122.0841430
Sur -122,0841430, combien de chiffres ai-je besoin? J'ai lu plusieurs guides, mais je n'ai pas assez de sens pour les comprendre.
Pour être plus précis dans ma question: si je veux être précis dans un rayon de 10 mètres de l’emplacement exact, combien de décimales dois-je stocker?
Peut-être une meilleure question serait-elle une question hors programmation, mais ce serait: combien plus précise chaque point décimal vous donne-t-il?
Est-ce si simple?
Précision et décimales à l'équateur
decimal degrees distance
places
-------------------------------
0 1.0 111 km
1 0.1 11.1 km
2 0.01 1.11 km
3 0.001 111 m
4 0.0001 11.1 m
5 0.00001 1.11 m
6 0.000001 0.111 m
7 0.0000001 1.11 cm
8 0.00000001 1.11 mm
ref: https://en.wikipedia.org/wiki/Decimal_degrees#Precision
+----------------+-------------+
| Decimals | Precision |
+----------------+-------------+
| 5 | 1m |
| 4 | 11m |
| 3 | 111m |
+----------------+-------------+
Si vous voulez une précision de 50 pieds (15m), choisissez 4 chiffres. Donc, decimal(9,6)
Je conçois des bases de données et étudie cette question depuis un moment. Nous utilisons une application standard avec un serveur Oracle où les champs de données ont été définis pour permettre 17 décimales. Ridicule! C'est en millième de pouce. Aucun instrument GPS au monde n’est aussi précis. Alors mettons de côté 17 décimales et traitons avec la pratique. Le gouvernement garantit que leur système est bon pour "une" pire "hypothèse de pseudo-distance de 7,8 mètres avec un niveau de confiance de 95%", mais poursuit en disant que la FAA (en utilisant leurs instruments de haute qualité) a montré que les lectures GPS étaient généralement bonnes. dans un mètre.
Vous devez donc vous poser deux questions: 1) Quelle est la source de vos valeurs? 2) À quoi vont servir les données?
Les téléphones portables ne sont pas particulièrement précis et les lectures Google/MapQuest ne valent probablement que 4 ou 5 décimales. Un instrument GPS de haute qualité peut vous rapporter 6 (aux États-Unis). Mais capturer plus que cela est un gaspillage d'espace de frappe et de stockage. De plus, si des recherches sont effectuées sur les valeurs, il est agréable pour un utilisateur de savoir que 6 serait le maximum qu'il devrait rechercher (évidemment, toute valeur de recherche entrée doit d'abord être arrondie à la même précision que la valeur de données recherchée. ).
De plus, si vous ne faites que visualiser une position dans Google Maps ou la placer dans un GPS pour vous y rendre, quatre ou cinq suffisent.
Je dois rire des gens qui entrent ici dans tous ces chiffres. Et où exactement prennent-ils cette mesure? Bouton de la porte d'entrée? Boîte aux lettres à l'avant? Centre de construction? Sommet de la tour cellulaire? ET ... est-ce que tout le monde le prend systématiquement au même endroit?
En tant que base de données de bonne conception, j'accepterais les valeurs d'un utilisateur pour peut-être un peu plus de cinq chiffres décimaux, puis arrondissez et n'en capturez que cinq par souci de cohérence (peut-être six si vos instruments sont bons et que votre utilisation finale le justifie).
La distance entre chaque degré de latitude varie en raison de la forme de la Terre et la distance entre chaque degré de longitude diminue à mesure que vous vous rapprochez des pôles. Parlons donc de l’équateur, où distance entre chaque degré est de 110,574 km pour la latitude et de 111,320 km pour la longitude.
50 pieds, c'est 0.01524 km, donc:
Vous avez besoin d'une échelle de quatre chiffres, suffisante pour descendre à dix millièmes de degré, avec un total de sept chiffres de précision.
DECIMAL(7,4)
devrait suffire à vos besoins.
Ne pas stocker les valeurs en virgule flottante. Bien que vous puissiez supposer qu'elles sont exactes, elles ne le sont pas. Ils sont une approximation. Et il s'avère que différentes langues utilisent différentes méthodes pour "analyser" les informations en virgule flottante. Et différentes bases de données utilisent différentes méthodes pour appliquer les approximations de valeur.
Au lieu de cela, utilisez un Geohash . Cette vidéo présente et explique visuellement le Geohash en moins de 5 minutes. Le Geohash est DE LOIN le meilleur moyen de coder/décoder les informations de longitude/latitude de manière cohérente. En ne "sérialisant" jamais les valeurs approximatives en virgule flottante d'une longitude/latitude dans les colonnes de la base de données, vous obtiendrez la même cohérence désirable d'aller-retour avec les valeurs de chaîne. Ce site est idéal pour vous aider à jouer avec un Geohash.
Tenant compte des différentes parties d’une sphère et d’une diagonale, voici un tableau des précisions disponibles:
Datatype Bytes resolution
------------------ ----- --------------------------------
Deg*100 (SMALLINT) 4 1570 m 1.0 mi Cities
DECIMAL(4,2)/(5,2) 5 1570 m 1.0 mi Cities
SMALLINT scaled 4 682 m 0.4 mi Cities
Deg*10000 (MEDIUMINT) 6 16 m 52 ft Houses/Businesses
DECIMAL(6,4)/(7,4) 7 16 m 52 ft Houses/Businesses
MEDIUMINT scaled 6 2.7 m 8.8 ft
FLOAT 8 1.7 m 5.6 ft
DECIMAL(8,6)/(9,6) 9 16cm 1/2 ft Friends in a mall
Deg*10000000 (INT) 8 16mm 5/8 in Marbles
DOUBLE 16 3.5nm ... Fleas on a dog
- http://mysql.rjweb.org/doc.php/latlng#representation_choices
Si vous cliquez sur des emplacements sur Google Maps, vous obtenez la latitude et la longitude avec 7 décimales.