Je lisais cette question ici:
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, dans quelle mesure ai-je vraiment besoin de cela?
Par exemple, l'API de Google renvoie un résultat comme:
"lat": 37.4219720,
"lng": -122.0841430
Sur -122.0841430, de combien de chiffres ai-je besoin? J'ai lu plusieurs guides mais je ne peux pas en comprendre assez pour comprendre cela.
Pour être plus précis dans ma question: si je veux être précis à moins de 50 pieds de l'emplacement exact, combien de décimales dois-je stocker?
Peut-être qu'une meilleure question serait en fait une question non liée à la programmation, mais ce serait: combien plus précis chaque point décimal vous donne-t-il?
Est-ce simple?
- Élément de liste
- x00 = 6000 miles
- xx0 = 600 milles
- xxx = 60 milles
- xxx.x = 6 milles
- xxx.xx = 0,6 mille
- etc?
mysql
geolocation
Citoyen
la source
la source
Réponses:
Précision par rapport aux décimales à l'équateur
réf: https://en.wikipedia.org/wiki/Decimal_degrees#Precision
la source
Si vous voulez une précision de 50 pieds (15 m), optez pour 4 chiffres. Alors
decimal(9,6)
la source
(8,6)
(ou(6,4)
pour enregistrer enregistrer un octet (dans MySQL).Je conçois des bases de données et j'é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 permettre 17 décimales. Ridicule! C'est dans les millièmes de pouce. Aucun instrument GPS au monde n'est aussi précis. Mettons donc de côté 17 décimales et traitons les aspects pratiques. Le gouvernement garantit que son système est bon à "une" précision de pseudo-portée "dans le pire des cas" de 7,8 mètres à un niveau de confiance de 95% ", mais poursuit en disant que la FAA (utilisant ses instruments de haute qualité) a montré que les lectures GPS sont généralement bonnes pour à moins d'un mètre.
Vous devez donc vous poser deux questions: 1) Quelle est la source de vos valeurs? 2) À quoi les données seront-elles utilisées?
Les téléphones portables ne sont pas particulièrement précis, et les lectures de Google / MapQuest ne sont probablement bonnes qu'à 4 ou 5 décimales. Un instrument GPS de haute qualité peut vous en procurer 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 serait le maximum qu'il / elle devrait rechercher (évidemment, toute valeur de recherche saisie doit d'abord être arrondie à la même précision que la valeur de données recherchée. ).
De plus, si tout ce que vous voulez faire est de visualiser un emplacement dans Google Maps ou de le mettre dans un GPS pour y arriver, quatre ou cinq, c'est beaucoup.
Je dois rire des gens d'ici qui entrent tous ces chiffres. Et où prennent-ils exactement cette mesure? Bouton de porte avant? Boîte aux lettres à l'avant? Centre du bâtiment? Haut de la tour cellulaire? ET ... est-ce que tout le monde le prend systématiquement au même endroit?
En tant que bonne conception de base de données, j'accepterais des valeurs d'un utilisateur pour peut-être quelques chiffres de plus de cinq décimales, puis arrondir et capturer seulement cinq pour la cohérence [peut-être six si vos instruments sont bons et votre utilisation finale le justifie].
la source
DECIMAL(18,15)
prend 9 octets.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ù la distance entre chaque degré est de 110,574 km pour la latitude et de 111,320 km pour la longitude.
50 pieds équivaut à 0,01524 km, donc:
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 être suffisant pour vos besoins.la source
En tenant compte des différentes parties d'une sphère et d'une distance diagonale, voici un tableau des précisions disponibles:
- http://mysql.rjweb.org/doc.php/latlng#representation_choices
la source
Ne stockez pas de 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 "analyser" les informations en virgule flottante. Et différentes bases de données ont différentes méthodes d'implémentation des approximations de valeurs.
À la place, 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 d'encoder / 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 des colonnes de base de données et en utilisant un Geohash, vous obtiendrez les mêmes garanties de cohérence aller-retour souhaitables que vous obtenez avec les valeurs String. Ce site Web est idéal pour vous aider à jouer avec un Geohash.
la source
FLOAT
etDOUBLE
, dans ce contexte , ne souffre pas de certains des problèmes que vous décrivez.FLOAT
valeur et la valeur «suivante» sont si proches l'une de l'autre que vous ne pouvez pas distinguer une ville (ou un véhicule ou une personne ou une puce) d'une autre, alors les erreurs d'arrondi et de représentation n'ont pas d'importance. En attendant, il est presque toujours insensé de comparer deuxFLOATs
(ouDOUBLEs
ou approximativementDECIMALs
) avec '='.[mysql]
, pas SQL Server.Si vous cliquez sur des emplacements sur Google Maps, vous obtenez la latitude et la longitude avec 7 décimales
la source