Avec quelle précision dois-je stocker la latitude et la longitude?

Je lisais cette question ici:

Quel type de données utiliser lors du stockage de données de latitude et de longitude dans des bases de données SQL?

Et il semble que le consensus général est que l’utilisation de Decimal (9,6) est la voie à suivre. La question pour moi est la suivante: à quel point ai-je vraiment 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 ne peux pas en comprendre suffisamment pour comprendre.

Pour être plus précis dans ma question: si je veux être précis à moins de 50 pieds de l’emplacement exact, combien de points décimaux dois-je stocker?

Peut-être une meilleure question serait en fait une question de non-programmation, mais ce serait: à quel point chaque point décimal vous est-il plus précis?

Est-ce aussi simple?

  1. Élément de la liste
  2. x00 = 6000 miles
  3. xx0 = 600 miles
  4. xxx = 60 miles
  5. xxx.x = 6 miles
  6. xxx.xx = 0,6 miles
  7. etc?

Précision versus 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 (15 m), optez pour 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 backend Oracle où les champs de données ont été définis pour autoriser 17 décimales. Ridicule! C’est dans le millième de pouce. Aucun instrument GPS au monde n’est aussi précis. Mettons donc de côté 17 décimales et traitons de la pratique. Le gouvernement garantit que son système est capable de “présenter” une “précision pseudo-scope de 7,8 mètres à un niveau de confiance de 95%” dans le pire des cas, mais ajoute que la FAA (utilisant ses instruments de haute qualité) dans un mètre.

Vous devez donc vous poser deux questions: 1) Quelle est la source de vos valeurs? 2) À quoi serviront les données?

Les téléphones portables ne sont pas particulièrement précis, et les lectures Google / MapQuest ne sont probablement que bonnes à 4 ou 5 décimales. Un instrument GPS de haute qualité pourrait 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 bon pour un utilisateur de savoir que 6 devrait être la plus recherchée (toute valeur de recherche entrée doit évidemment être arrondie avec la même précision que la valeur recherchée) ).

En outre, si tout ce que vous allez faire est de voir un emplacement dans Google Maps ou de le placer dans un GPS pour vous y rendre, quatre ou cinq sont suffisants.

Je dois rire des gens ici qui entrent dans tous ces chiffres. Et où exactement prennent-ils cette mesure? Bouton de porte avant? Boîte aux lettres à l’avant? Centre de construction? Haut de la tour de la cellule? ET … est-ce que tout le monde le prend toujours au même endroit?

En tant que bonne conception de firebase database, j’accepterais les valeurs d’un utilisateur pour peut-être plus de cinq chiffres décimaux, puis arrondir et capturer seulement cinq pour plus de cohérence [peut-être six si vos instruments sont bons et votre utilisation le justifie].

La distance entre chaque degré de latitude varie en fonction 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ù la distance entre chaque degré est de 110,574 km pour la latitude et de 111,320 km pour la longitude.

50 pieds est 0,01524 km, alors:

  • 0,01524 / 110,574 = 1/7255 d’un degré de latitude
  • 0,01524 / 111,320 = 1/7304 d’un degré de longitude

Vous avez besoin de quatre chiffres d’échelle, assez pour descendre à dix millièmes de degré, avec un total de sept chiffres de précision.

DECIMAL(7,4) devrait suffire à vos besoins.

Ne stockez pas les valeurs à virgule flottante. Bien que vous puissiez supposer qu’ils sont exacts, ils ne le sont pas. Ils sont une approximation. Et il s’avère que différentes langues ont différentes méthodes pour “parsingr” les informations en virgule flottante. Et différentes bases de données ont des méthodes différentes pour implémenter 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. Geohash est le moyen le plus efficace d’encoder / décoder les informations de longitude / latitude de manière cohérente. En ne “sérialisant” jamais les valeurs en virgule flottante approximatives d’une longitude / latitude en colonnes de firebase database et en utilisant un Geohash, vous obtiendrez la même cohérence aller-retour souhaitable avec les valeurs Ssortingng. Ce site Web est idéal pour vous aider à jouer avec un Geohash.

Compte tenu des différentes parties d’une sphère et d’une distance 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