Dans un langage de programmation de niveau système comme C, C++ ou D, quel est le meilleur type/encodage pour stocker la latitude et la longitude ?
Les options que je vois sont :
- IEEE-754 FP en degrés ou radians
- degrés ou radians stockés comme une valeur à virgule fixe dans un int de 32 ou 64 bits
- mise en correspondance d'un intervalle de nombres entiers avec l'intervalle de degrés : ->
deg = (360/2^32)*val
- degrés, minutes, secondes et fractions de secondes stockés sous forme de champs binaires dans un fichier int.
- une sorte de structure.
La solution facile (FP) présente l'inconvénient majeur d'avoir une résolution très inégale (quelque part en Angleterre, il peut mesurer en microns, alors qu'au Japon, il ne le peut pas). Elle pose également tous les problèmes de comparaison des PF et autres. Les autres options nécessitent des efforts supplémentaires à différents stades du cycle de vie des données. (génération, présentation, calculs, etc.)
Une option intéressante est un type de précision flottante où, à mesure que la latitude augmente, le nombre de bits augmente et la longitude diminue (car ils se rapprochent l'un de l'autre vers les pôles).
Questions connexes qui ne couvrent pas tout à fait ce sujet :
- Quel est le type de données idéal à utiliser pour stocker les latitudes et les longitudes dans un fichier MySQL ?
- Travailler avec des valeurs de latitude/longitude en Java
BTW : 32 bits vous donnent une résolution E/W à l'équateur d'environ 0.3 in. C'est proche de l'échelle à laquelle les GPS de haute qualité peuvent travailler (IIRC, ils peuvent descendre à environ 0,5 pouce dans certains modes).
Par contre, si les 32 bits sont répartis uniformément sur la surface de la terre, vous pouvez indexer des carrés d'environ 344 m de côté, 5 octets donnent 21 m, 6B->1,3 m et 8B->5 mm.
Je n'ai pas d'utilisation spécifique en tête pour le moment, mais j'ai déjà travaillé avec ce genre de choses et je compte bien le faire à nouveau, à un moment donné.
1 votes
Vous avez noté dans quelques commentaires de réponse et dans cette question la question de la résolution. De quelle résolution avez-vous besoin ? Il serait également utile de préciser les opérations que vous devez effectuer. Si vous devez faire des calculs de grand cercle, vous devrez de toute façon convertir en double/float.
1 votes
Une valeur en virgule flottante de 64 bits à double précision n'est-elle pas un meilleur choix que l'int de 32 bits car elle a une plus grande granularité ? C'est un point sur lequel vous avez fait des commentaires. C'est aussi beaucoup plus facile de travailler avec.
0 votes
Duplicata possible de Quel est le type de données idéal à utiliser pour stocker les latitudes et les longitudes dans une base de données MySQL ?