47 votes

Combien de chiffres significatifs dois-je stocker dans ma base de données pour une coordonnée GPS ?

J'ai dans ma base de données MySQL des coordonnées de longitude et de latitude (données GPS).

Il est actuellement stocké en tant que :

column     type
------------------------
geolat     decimal(10,6)
geolng     decimal(10,6)

Question : Ai-je vraiment besoin d'un type de données aussi grand que decimal(10,6) pour stocker correctement les données de coordonnées ?

Comme j'ai un index combiné sur la longitude et la latitude, la taille de cet index est énorme. Si je peux la réduire sans compromettre quoi que ce soit, ce serait formidable.

1 votes

De plus, je sais que MySQL dispose d'un plugin SPATIAL - mais mon hébergeur ne l'a malheureusement pas installé, donc ce n'est pas une option (au cas où quelqu'un le recommanderait).

0 votes

Bienvenue sur StackOverflow ! Excellente première question.

2 votes

Et n'oubliez pas que vous devrez également connaître le système de coordonnées géographiques, sans quoi vos valeurs de latitude/longitude seront inutiles. La plupart des appareils GPS actuels vous donneront des réponses en WGS84, mais vous devriez probablement confirmer les données avant de les enregistrer.

41voto

Cade Roux Points 53870

WGS84 Les données sont généralement données sous forme de coordonnées dans une notation entièrement décimale, généralement avec 5 décimales. Ainsi, pour la latitude (-90 à +90), vous pouvez utiliser decimal(7, 5) (-90,00000 à 90,00000), pour la longitude, vous pouvez utiliser decimal(8, 5) (-180,00000 à 180,00000).

.00001 donne une précision d'environ un mètre à l'équateur

El Le type de données DECIMAL/NUMERIC est un nombre entier mis à l'échelle à précision fixe. et les parties positives et négatives de la plage sont toujours disponibles - elles n'affectent pas la précision ou l'échelle (il y a évidemment de l'espace de stockage requis pour cela, mais vous n'avez pas le choix à ce sujet pour DECIMAL).

1 votes

Est-ce que le signe (positif/négatif) ne prend pas de place ? Par exemple, "-90.12345" ne prendrait-il pas 8 chiffres et non 7 ?

2 votes

Oui, cela prend de l'espace dans la base de données, mais l'espace requis dans la base de données pour une spécification DECIMAL donnée permet toujours un signe. Je ne connais pas les exigences de stockage interne de MySQL, mais pour SQL Server, une décimale prend 5 octets (1-9 chiffres)/9 octets (10-19 chiffres)/13 octets (20-28 chiffres) /17 octets (29-38 chiffres) selon les chiffres de précision spécifiés (c'est indépendant de l'échelle, évidemment).

0 votes

Google Maps fonctionne avec 6 décimales. Zoomez sur votre maison, faites un clic droit sur la carte, puis choisissez "Centrer sur cette position". Cliquez sur le bouton de lien juste à l'extérieur de la carte, en haut à gauche, puis trouvez les coordonnées GPS dans l'URL du lien. C'était 6 décimales quand j'ai essayé.

4voto

Steve Elmer Points 632

J'ai toujours travaillé avec six chiffres après la virgule. J'avais l'habitude de faire du travail GIS sous contrat militaire et cela suffisait.

0 votes

Donc, vous dites que je pourrais le changer en "decimal(6,6)" et que tout irait bien ?

0 votes

Mais comme le fait remarquer Jonathan, cela dépend vraiment de la précision que vous souhaitez obtenir. D'après ce que j'ai compris, la précision à six chiffres nous a permis de descendre à environ +/- 1 mètre. C'était important parce que nous gardions la trace de bunkers remplis d'armes chimiques.

1 votes

Je crois que le "10" correspond à la taille du champ entier, n'est-ce pas ? Vous devrez tenir compte de +/- xxx.xxxxxx pour la longitude et de +/- xx.xxxxxx pour la latitude.

3voto

Mark Canlas Points 4698

N'oubliez pas qu'il est plus facile de réduire les données que de les augmenter. En général, il n'est même pas possible d'améliorer la précision des données sans procéder à un nouveau mesurage. Et le remesurage a un coût. Ne connaissant rien d'autre de votre situation ou du secteur, je vous dirais de capturer autant de données/spécificités que possible.

Les données que vous utilisez réellement peuvent être extraites de cet ensemble. Si vous avez finalement besoin d'un degré de spécificité plus élevé, vous pouvez toujours recalculer sans remesurer.

De plus, je ne suis pas sûr que l'indexation des données brutes soit la meilleure chose à faire puisqu'il ne s'agit pas d'un ensemble discret d'éléments. La création d'un tableau de points de données moins précis/plus petits rendrait les index beaucoup plus petits.

0 votes

Toujours Posez ce genre de question lorsque vous envisagez de stocker des données : A quoi vont-elles servir ? Quelle est la précision, la gamme ou tout ce qui est nécessaire pour y parvenir ?

1voto

jk. Points 8019

Si c'est pour l'immobilier, avez-vous vraiment tant de maisons que 2 octets économisés par rangée vont être si perceptibles ? Je garderais le plus de précision possible, sauf s'il y a une bonne raison de ne pas le faire.

0 votes

Je suis plus préoccupé par la taille de mon index car j'ai un index combiné sur la longitude et la latitude. Donc, pour l'instant, la taille de mon index est décimale(10,6) + décimale(10,6). Ce qui est très grand pour un index.

0 votes

J'allais répondre par l'indexation spatiale, mais j'ai remarqué votre commentaire disant que vous ne pouvez pas l'utiliser, d'où les problèmes que vous rencontrez.

0voto

Jonathan Sampson Points 121800

Cela dépend de la précision que vous souhaitez obtenir en matière de localisation. Évidemment, plus la valeur est grande, plus elle est précise, et plus elle est petite, plus vos résultats sont larges. Je vous suggère de garder vos valeurs plus grandes, car il n'y a pas vraiment beaucoup de données de toute façon.

0 votes

Il s'agit uniquement de stocker des données géographiques pour la localisation de la maison (application immobilière). Il n'est donc pas nécessaire qu'elles soient très précises, mais elles doivent l'être.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X