|
| Calculer des coordonnées GPS (Latitude & Longitude) |
| Iniciado por DREAM-TECH (BE), 25,sep. 2019 17:25 - 18 respuestas |
| |
| | | |
|
| |
Miembro registrado 94 mensajes |
|
| Publicado el 25,septiembre 2019 - 17:25 |
Hello 
J'ai des coordonnées GPS mais en décimal,
Je souhaite convertir ces coordonnées en Latitude et Longitude, exemple : Avec ce décimal 547146368 c'est 54.714636
Pour le signe (positif ou négatif) je dois juste regarder le premier bit, si zéro la position reste positive sinon négative.
Donc, mon problème c'est le point (qui sépare la partie entière) je ne sais pas où le mettre (plutôt comment le calculer).
Lorsque j'essaye : 547146368 * 0.0000001 = 54.714636 (c'est correct) mais si j'essaye avec une autre position :
50895408 * 0.0000001 = 5.08954 (c'est pas correct).
Y a-t-il un magicien qui peut m'aider 
Merci. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 160 mensajes |
|
| Publicado el 25,septiembre 2019 - 21:36 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 25,septiembre 2019 - 22:17 |
Salut,
Non, la fonction Left récupère n premières positions (à partir de la gauche). La partie entière d'une position GPS n'est pas toujours de 2 positions. Exemple : 0.130304 est ne position valide : ou encore : 2.367319.
il me manque justement l'algorithme pour savoir comment déterminer la position.
Merci d'avance. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 54 mensajes |
|
| Publicado el 26,septiembre 2019 - 07:50 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 26,septiembre 2019 - 09:15 |
SI Taille(Lng) = 7 ALORS Lng = Gauche(Lng, 1) = "," SINON Lng = Gauche(Lng, 2) = "," FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 26,septiembre 2019 - 10:16 |
Bonjour,
J'ai pensé à cette approche, mais je ne pense pas que c'est suffisant,
J'ai peur de tomber sur des postions genre : 123.12345678 ou 1234.12345 ou 123.12345678911.
J'ai l'impression qu'il faut mettre en place un algorithme :
Wikipedia : https://en.wikipedia.org/wiki/Decimal_degrees
Quelqu'un a encore quelque chose dans son chapeau ?
Merci  |
| |
| |
| | | |
|
| | |
| |
| Publicado el 26,septiembre 2019 - 16:19 |
Latitude : max/min +90 à -90 Longitude : max/min +180 à -180
Donc aucun souci avec la méthode donnée au dessus. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 26,septiembre 2019 - 22:14 |
Bonsoir,
Je ne suis pas encore très convaincu 
SI Taille(Lng) = 7 ALORS Lng = Gauche(Lng, 1) = "," SINON Lng = Gauche(Lng, 2) = "," FIN
Pourquoi 7 (j'ai 8 et 9 positions dans l'exemple de mon premier post). Pourquoi extraire 1 ou 2 positions (gauche) à la place d'insérer directement un point après la première ou la deuxième position. ou encore plus simple, faire une multiplication pour éviter les zéros inutiles (à droite).
Latitude : max/min +90 à -90 Longitude : max/min +180 à -180
Justement, je peux donc avoir un décimal 180123456 qui peut être : 180.123456 ou 18.0123456 ou 1.80123456....
Si je me base sur la Taille(180123456 vaut 10) ça devient 18.0123456 mais pourquoi pas 180.123456 c'est quoi la logique cachée derrière ?
Donc pour le moment je n'ai pas trop le choix (mais pas très convaincu) je me base sur la taille comme vous me le conseillez :
sResult is string iDecimal is int = 44125450
IF Length(iDecimal) = 8 THEN sResult = iDecimal * 0.000001 ELSE sResult = iDecimal * 0.0000001 END
Trace(sResult)
Merci en tout cas  |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 26,septiembre 2019 - 23:22 |
sResult is string = "44125450"
IF Length(sResult) = 8 THEN sResult = StringInsert(sResult,".",2) ELSE sResult = StringInsert(sResult,".",3) END
Trace(sResult) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 27,septiembre 2019 - 09:59 |
Bonjour, Si j'ai bien tout suivi, suite à ton post précédent, tu récupères un hexa et tu veux le convertir en réel.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 405 mensajes |
|
| Publicado el 27,septiembre 2019 - 10:05 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 27,septiembre 2019 - 13:38 |
Salut 
Bonjour, Si j'ai bien tout suivi, suite à ton post précédent, tu récupères un hexa et tu veux le convertir en réel.
Non, j'ai un chiffre décimal (ex: 44125450) qui correspond à une position GPS, mais pour utiliser une API MAP pour positionner mon marqueur (de google map ou autre) je dois convertir ce décimal en DD (Degrés Décimaux) ex: 44125450 devient : 4.412545, mais je ne trouve pas comment le faire (il me manque peut être un élément).
LM Concept a écrit :
Votre lien est très intéressant (la partie comment passer de Degrés Sexagésimaux à Degrés Décimaux) c'est écrit "Garder 45 et mettez un point après", mais sur quoi il s'est basé ? peut-être sur le signe degré (°) mais j'ai pas cette info (45°), j'ai juste un décimal, donc comment je peux déterminer le degré pour convertir mon décimal pour en DD.
Merci à vous  Mensaje modificado, 27,septiembre 2019 - 13:40 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 27,septiembre 2019 - 19:22 |
Est ce que ton entier correspond à la trame brute sur 32 bits que tu a reçue ?
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 27,septiembre 2019 - 20:18 |
La trame contient plusieurs infos, je parse pour avoir ça :

Si je prends la longitude : 02A14D0A (Hexa) et grâce à la fonction Val(sHexaCoordinate,"x") j'ai un entier 44125450.
Mais l'entier tel qu'il est ne peut pas être interprété par Google Map (il manque le point).Mensaje modificado, 27,septiembre 2019 - 20:19 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 27,septiembre 2019 - 23:50 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 28,septiembre 2019 - 00:33 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 28,septiembre 2019 - 02:14 |
Voroltinquo a écrit :
Dans l'absolu, la représentation d'un réel suit la norme IEEE-754. Le premier bit représente le signe, les 8 bits suivant l'exposant et les derniers la mantisse. En effet, c'est pour la norme IEEE-754 
Demain, j’essayerai la solution proposée dans Stackoverflow.
Merci  |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 29,septiembre 2019 - 10:46 |
Le code devrait ressembler à ça, avec une verif à faire au niveau du "recalage"
FONCTION EntierVersGPS(sCoord est une chaîne,eLatLong est ETypeCoordonnées,eCodageCoordonnées est ETypeMessage=HEX):monétaire unCoordEntier est entier sans signe sur 4 nDeg est entier moCoordDec est monétaire
unCoordEntier=Val(sCoord,"x") SELON eCodageCoordonnées CAS HEX unCoordEntier=Val(sCoord,"x") CAS BIN unCoordEntier=Val(sCoord,2) FIN moCoordDec=unCoordEntier/30000
nDeg=moCoordDec/60 moCoordDec=moCoordDec-(60*nDeg) moCoordDec=Arrondi(moCoordDec/100,4)
nDeg=Modulo(nDeg,2*eLatLong..Valeur) moCoordDec+=nDeg SI moCoordDec>eLatLong..Valeur ALORS moCoordDec=moCoordDec-2*eLatLong..Valeur FIN
RENVOYER moCoordDec
ETypeCoordonnées est une Enumération Longitude=90 Latitude=45 FIN
Avec les données fournies, on se trouve au N du Lac Castagnier et au NE de St Domique du Rosaire Déjà, on ne se trouve pas en plein milieu de l'océan, donc, ça peut coller -- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 29,septiembre 2019 - 10:50 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 94 mensajes |
|
| Publicado el 29,septiembre 2019 - 16:11 |
Oui, c'est ce genre de calcul qu'il me faut (j'ai essayé plusieurs sans succès). Je viens d'essayer ton exemple (avec adaptation pour que ça fonctionne) :
nDeg is int sCoord is string = "02A14D0A" unCoordEntier is 4-byte unsigned int eLatLong is ETypeCoordonnées moCoordDec is currency
unCoordEntier = Val(sCoord,"x") moCoordDec=unCoordEntier/30000
nDeg=moCoordDec/60 moCoordDec=moCoordDec-(60*nDeg) moCoordDec=Round(moCoordDec/100,4)
nDeg=Modulo(nDeg,2*eLatLong..Value) moCoordDec+=nDeg IF moCoordDec>eLatLong..Value THEN moCoordDec=moCoordDec-2*eLatLong..Value END
Trace(moCoordDec) La conversion reste incorrecte, normalement le bon résultat c'est : 44.125450. |
| |
| |
| | | |
|
| | | | |
| | |
|