Bonjour!
Pour un de mes projets je dois effectuer des additions et soustractions sur des coordonnées géographiques. Le problème est quand on dépasse une des limites des longitudes (-180:180). Je pourrais gérer ces cas avec des if/else mais il y a peut être un meilleur moyen en JavaScript? J'utilise la bibliothèque leafletjs, si ça peut être utile.
Exemple: je voudrais que la longitude 170+20 ne donne pas 190 mais -170.
# Bibliothèques spécialisées
Posté par Colargol . Évalué à 3. Dernière modification le 08 avril 2022 à 10:30.
Il existe des bibliothèques pour faire ce genre de calcul (notamment le calcul de distance) : https://www.sitepoint.com/javascript-geospatial-advanced-maps/
[^] # Re: Bibliothèques spécialisées
Posté par ted (site web personnel) . Évalué à 5.
C'est un peu overkill d'installer une bibliothèque juste pour ça… J'ai vu que je ne suis pas le seul à me poser la question, et que ma solution n'est pas si mauvaise. Je vais me faire une fonction contenant ça:
Un LUG en Lorraine : https://enunclic-cappel.fr
[^] # Re: Bibliothèques spécialisées
Posté par fearan . Évalué à 7. Dernière modification le 08 avril 2022 à 13:07.
et un calcul de ce genre ?
(170+20) + 180)%360 - 180
en gros on décale l'acceptable vers 0 à 360 ( +180),
on fait le modulo %360
on recale sur -180;180
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Bibliothèques spécialisées
Posté par ted (site web personnel) . Évalué à 2.
Pas mal, mais pour -170-20 ça me donne -190 au lieu de 170 ;)
On pourrait rectifier ça en ajoutant encore une fois 360:
et là ça marche, sauf si on en vient à utiliser des nombres négatifs encore plus petits… Je ne suis pas certain que ça ne puisse pas arriver, il faudrait alors ajouter un certain nombre de fois 360 pour être tranquille.
En fait mon but c'est de récupérer les coordonnées des coins d'une carte leaflet ("Bounds") et d'élargir ces coordonnées. En dézoomant sur la carte, la carte se répète et on sort des limites (-180:180). Exemple en dézoomant:
Donc c'est pas parfait. D'ailleurs je me rends compte que ces coordonnées me posent d'autres problèmes pour disposer des marqueurs sur la carte…
Un LUG en Lorraine : https://enunclic-cappel.fr
[^] # Re: Bibliothèques spécialisées
Posté par fearan . Évalué à 6.
dans ce cas il faut d'abord faire un %360 + 360 pour s'assurer du coté positif :)
par contre t'a intérêt a ajouter un bon vieux commentaire pour expliquer ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Bibliothèques spécialisées
Posté par ted (site web personnel) . Évalué à 2.
hahahaha xD
Merci pour la solution, c'est ce qu'il me fallait!
Un LUG en Lorraine : https://enunclic-cappel.fr
[^] # Re: Bibliothèques spécialisées
Posté par gUI (Mastodon) . Évalué à 5. Dernière modification le 08 avril 2022 à 18:29.
c'est peut-être la raison qui me ferait préférer les
while()
proposé plus haut dans le journal : je ne suis pas certain que ce soit moins efficace (voire je serais d'avis qu'il y a moins de calculs) et c'est bcp plus simple à comprendre.En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# utiliser un modulo
Posté par flavien75 . Évalué à 5. Dernière modification le 08 avril 2022 à 13:08.
Le plus simple est d'utiliser l'opérateur modulo:
Dans ce cas, quelque soit la valeur de x (même en dehors de +-180), le résultat devrait être juste.
Edit: grillé par Fearan
Les vrais naviguent en -42
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.