PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Conversion Lambert93 en WGS84
Conversion Lambert93 en WGS84
Débuté par claude, 26 avr. 2018 16:52 - 3 réponses
Posté le 26 avril 2018 - 16:52
Bonjour à tous,
dans un projet Windev Mobile 22 (android et ios) je dois dans un champ carte google afficher des marqueurs par rapport à des données d'un flux WFS.
Mon problème est que les coordonnées présentes dans le WFS sont au format EPSG:2154 (référence spatiale RGF93 / Lambert-93 ) et je recherche la solution pour les convertir en Latitude Longitude WGS84. J'ai beau rechercher sur le net, mais je ne trouve rien de satisfaisant.
Malheureusement le serveur SIG interrogé ne permet pas de demander la conversion.

Pouvez-vous m'aider à résoudre ce problème.

Merci d'avance à vous.
Posté le 27 avril 2018 - 08:22
Posté le 28 avril 2018 - 17:35
Bonjour,
suite à mon problème j'ai trouvé lors de mes diverses recherches sur la toile, le code source "Java library converting Lambert Coordinates to WGS84" de Yannick Heinrich que je remercie au passage pour sa contribution.
En parcourant son code, j'ai isolés les fonctions nécessaires à mon projet et j'essaie de les transposer en WLangage.
Pour ne traiter que mon cas précis "Conversion Lambert93 en WGS84" J'ai repris les procédures suivantes :
- convertToWGS84, geographicToLambert et latitudeFromLatitudeISO
L'ensemble en WL fonctionne, mais ne renvoi pas les bonnes valeurs longitude et latitude en WGS84 et je n'arrive pas à trouver la (les) raison(s).
Exemple : avec x=1061002.543819 et 6853525.958251
j'obtiens avec l'outil http://geofree.fr/gf/coordinateconv.asp comme Longitude 7,9066753 et latitude 48.6809115 ce qui correspond bien à la bonne bonne position GPS.
Avec mon code j’obtiens comme longitude 4.95903518618 et latitude : 112.2166237445

Dans mon code j'ai quelques doutes de portage en WL :

Extrait fonction lambertToGeographic en java :
// ALG0004 : https://geodesie.ign.fr/contenu/fichiers/documentation/algorithmes/notice/NTG_71.pdf
double n = zone.n();
double C = zone.C();
double Xs = zone.Xs();
double Ys = zone.Ys();
double x = org.getX();
double y = org.getY();

double lon, gamma, R, latIso;
R = sqrt((x - Xs) * (x - Xs) + (y - Ys) * (y - Ys));
gamma = atan((x - Xs) / (Ys - y));
lon = lonMeridian + gamma / n;
latIso = -1 / n * Log(Abs(R / C));
double lat = latitudeFromLatitudeISO(latIso, e, eps);

Portage en WL :
n est un réel = LAMBERT_N[nNumLambertZone] // 0.7256077650
C est un réel = LAMBERT_C[nNumLambertZone] // 11754255.426
Xs est un réel = LAMBERT_XS[nNumLambertZone] // 700000.0
Ys est un réel = LAMBERT_YS[nNumLambertZone] // 12655612.050
x est un réel = rPx
y est un réel = rPy

rLon, rGamma, rR, rLatIso sont des réel
rR = Racine( (x - Xs) * (x - Xs) + (y - Ys) * (y - Ys) )
rGamma = ArcTang( (x-Xs)/(Ys-y) )
rLon = rLonMeridian + (rGamma/n)
rLatIso = -1/n * Log( Abs(rR/C) )
rLat est un réel = latitudeFromLatitudeISO(rLatIso, rE, rEPS )

Extrait fonction latitudeFromLatitudeISO en Java :
// ALG0002 : https://geodesie.ign.fr/contenu/fichiers/documentation/algorithmes/notice/NTG_71.pdf
double phi0 = 2 * atan(Exp(LatISo)) - M_PI_2;
double phiI = 2 * atan(pow((1 + e * Sin(phi0)) / (1 - e * Sin(phi0)), e/2d) * Exp(LatISo)) - M_PI_2;
double delta = Abs(phiI - phi0);
WHILE (delta > eps) {
phi0 = phiI;
phiI = 2 * atan(pow((1 + e * Sin(phi0)) / (1 - e * Sin(phi0)), e/2d) * Exp(LatISo)) - M_PI_2;
delta = Abs(phiI - phi0);
}
RETURN phiI;

Portage en WL :
phi0 est un réel = 2 * ArcTang( Exp(rLatISo) ) - M_PI_2
// ! ici j'ai un doute sur ...,e/2d) en Java porté en ...,rE/2) en WL
phiI est un réel = 2 * ArcTang( Puissance( (1+rE*Sin(phi0)) / (1-rE*Sin(phi0)), rE/2 ) * Exp(rLatISo) ) - M_PI_2
delta est un réel = Abs(phiI - phi0)
TANTQUE delta > rEps
phi0 = phiI
phiI = 2 * ArcTang( Puissance( (1+rE*Sin(phi0)) / (1-rE*Sin(phi0)), rE/2 ) * Exp(rLatISo) ) - M_PI_2
delta = Abs(phiI - phi0)
FIN
RENVOYER phiI

Un connaisseur des deux langages pourrez t-il valider mes portages ?

ps : En raison des phases de débogage qui ne sont pas directement disponible depuis le simulateur (Windev Mobile 22) je ne désire pas embarquer directement le code JAVA dans mon projet.

Merci d'avance
Claude
Posté le 04 mai 2018 - 23:16
si geofree te donne le bon résultat
le plus simple est de faire un httprequette vers celui-ci
non?