Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Mon 13 June 2016 11:21

tahzem
Juste Inscrit !
Date d'inscription: 13 Jun 2016
Messages: 2

Conversion Lambert (projection LAEA - code EPSG 3035) en degré !

Salut tout le monde !

Je suis totalement novice en géomatique et je travaille actuellement sur un outil nécessitant de faire des estimations de nombre d'habitants à partir de coordonnées en degré et d'un rayon. Pour ce fait, j'ai récupéré les données fournies par l'INSEE : http://www.insee.fr/fr/themes/detail.as … -carroyees (données carroyées à 200m).

Le problème que je rencontre est que je dispose des "coordonnées géographiques du coin sud-ouest du carreau : pour la métropole le système de projection LAEA - code EPSG 3035 (attributs x_LAEA et y_LAEA)" (source : http://www.insee.fr/fr/themes/detail.as … _doc.htm).

Je recherche donc activement la formule permettant de convertir ces coordonnées (type "10166,21274") en des coordonnées en degrés. Les seules formules que j'ai trouvé sont celles là : https://fr.wikipedia.org/wiki/Projectio … de_Lambert mais ne correspondent clairement pas au jeu de données que j'ai (ce qu'il y a dans l'arcsin très supérieur à 1, etc).

J'imagine que cette question a déjà été posée, mais je ne suis pas parvenu à trouver de réponse satisfaisante. Je précise seulement que je ne cherche pas d'outil tout fait mais bien les formules (aussi complexes soient-elles) permettant de faire la conversion.

Merci d'avance pour vos réponses !

Bonne journée,

Hors ligne

 

#2 Mon 13 June 2016 11:40

fbecir
Participant assidu
Lieu: Saint-Mandé
Date d'inscription: 16 Sep 2008
Messages: 507

Re: Conversion Lambert (projection LAEA - code EPSG 3035) en degré !

Bonjour et bienvenu

Théoriquement, vous devriez trouver votre bonheur là :
http://geodesie.ign.fr/contenu/fichiers … lg0073.pdf

D'une manière générale, la plupart des algorithmes concernant la géodésie Française se trouve sur le site geodesie.ign.fr

Cordialement

Hors ligne

 

#3 Mon 13 June 2016 12:38

Patrice
JeSuisCharlie
Date d'inscription: 16 Sep 2005
Messages: 4730

Re: Conversion Lambert (projection LAEA - code EPSG 3035) en degré !

Hello Francois ("Mr IGNMap")

MERCI pour ta participation sur georezo.net et tes reponses "toujours" judicieuses ...

GeoBye, Pat


(Autodesk Expert Elite Team)

Hors ligne

 

#4 Tue 14 June 2016 09:28

tahzem
Juste Inscrit !
Date d'inscription: 13 Jun 2016
Messages: 2

Re: Conversion Lambert (projection LAEA - code EPSG 3035) en degré !

Merci François pour ta réponse, cela correspond parfaitement à ce que je cherchais smile !

Pour ceux que cela intéresserait, voilà ce que donne l'algorithme décrit, prenant en entrée les coordonnées ETRS-LAEA (X,Y) et donnant en sortie longitude et latitude (lambda, phi) :

conversion_degre <- function(X,Y){
 
  a <- 6378137.0
  e <- 0.081819191043
  lambda0 <- 0.174532925199
  phi1 <- 0.907571211037
  X0 <- 4321000
  Y0 <- 3210000
  epsilon <- 10^(-11)
 
  x <- X-X0
  y <- Y-Y0
  qp <- (1-e^2)*(1/(1-e^2) - 1/(2*e) * log((1-e)/(1+e)))
 
  q1 <- (1-e^2)*(sin(phi1)/(1-e^2*sin(phi1)^2) - (1/(2*e)) * log((1-e*sin(phi1))/(1+e*sin(phi1))))
  beta1 <- asin(q1/qp)
  m1 <- cos(phi1)/sqrt(1-e^2*sin(phi1)^2)
  Rq <- a*sqrt(qp/2)
  D <- (a*m1)/(Rq*cos(beta1))
  rho <- sqrt((x/D)^2 + (D*y)^2)
  ce <- 2*asin(rho/(2*Rq))
 
  q <- qp*(cos(ce)*sin(beta1) + D*y*sin(ce)*cos(beta1)/rho)
 
  lambda <- lambda0 + atan((x*sin(ce))/((D*rho*cos(beta1)*cos(ce)) - D^2*y*sin(beta1)*sin(ce)))
  phi0 <- asin(q/2)
 
  phi_iplus1 <- Inf
  phi_i <- phi0
  ecart <- Inf
  while(ecart>epsilon){
    phi_iplus1 <- phi_i + ((1-e^2*sin(phi_i)^2)^2/(2*cos(phi_i)))*( q/(1-e^2)-sin(phi1)/(1-e^2*sin(phi_i)^2)+(1/(2*e))*log((1-e*sin(phi_i)) / (1+e*sin(phi_i))))
    ecart <- abs(phi_iplus1-phi_i)
    phi_i <- phi_iplus1
  }
  phi <- phi_i
 
  return(c(lambda*(180/pi),phi*(180/pi)))
}


fbecir a écrit:

Bonjour et bienvenu

Théoriquement, vous devriez trouver votre bonheur là :
http://geodesie.ign.fr/contenu/fichiers … lg0073.pdf

D'une manière générale, la plupart des algorithmes concernant la géodésie Française se trouve sur le site geodesie.ign.fr

Cordialement

Hors ligne

 

#5 Fri 02 September 2016 20:47

mmcelki
Juste Inscrit !
Date d'inscription: 2 Sep 2016
Messages: 1

Re: Conversion Lambert (projection LAEA - code EPSG 3035) en degré !

Hello, 

Une petite erreur s'est glissée dans le code ci-dessus. Il faut le modifier très légèrement (la correction apparaît en gras) pour une utilisation correcte.

conversion_degre<- function(X,Y){

  a <- 6378137.0
  e <- 0.081819191043
  lambda0 <- 0.174532925199
  phi1 <- 0.907571211037
  X0 <- 4321000
  Y0 <- 3210000
  epsilon <- 10^(-11)

  x <- X-X0
  y <- Y-Y0
  qp <- (1-e^2)*(1/(1-e^2) - 1/(2*e) * log((1-e)/(1+e)))

  q1 <- (1-e^2)*(sin(phi1)/(1-e^2*sin(phi1)^2) - (1/(2*e)) * log((1-e*sin(phi1))/(1+e*sin(phi1))))
  beta1 <- asin(q1/qp)
  m1 <- cos(phi1)/sqrt(1-e^2*sin(phi1)^2)
  Rq <- a*sqrt(qp/2)
  D <- (a*m1)/(Rq*cos(beta1))
  rho <- sqrt((x/D)^2 + (D*y)^2)
  ce <- 2*asin(rho/(2*Rq))

  q <- qp*(cos(ce)*sin(beta1) + D*y*sin(ce)*cos(beta1)/rho)

  lambda <- lambda0 + atan((x*sin(ce))/((D*rho*cos(beta1)*cos(ce)) - D^2*y*sin(beta1)*sin(ce)))
  phi0 <- asin(q/2)

  phi_iplus1 <- Inf
  phi_i <- phi0
  ecart <- Inf
  while(ecart>epsilon){
    phi_iplus1 <- phi_i + ((1-e^2*sin(phi_i)^2)^2/(2*cos(phi_i)))*( q/(1-e^2)-sin(phi_i)/(1-e^2*sin(phi_i)^2)+(1/(2*e))*log((1-e*sin(phi_i)) / (1+e*sin(phi_i))))
    ecart <- abs(phi_iplus1-phi_i)
    phi_i <- phi_iplus1
  }
  phi <- phi_i

  return(c(lambda*(180/pi),phi*(180/pi)))
}

Dernière modification par mmcelki (Fri 09 September 2016 10:49)

Hors ligne

 

Pied de page des forums

Powered by FluxBB