Code source de ensae_teaching_cs.helpers.geo_helper

# -*- coding: utf-8 -*-
"""
Helpers about longitude, latitude.


:githublink:`%|py|6`
"""
import math


[docs]def lambert93_to_WGPS(lambertE, lambertN): """ Converts coordinates given in `Lambert 93 <https://fr.wikipedia.org/wiki/Projection_conique_conforme_de_Lambert>`_ system, this system is used by `IGN <http://http://professionnels.ign.fr/>`_ and their :epkg:`GEOFLA` file format. :param lambertE: east :param lambertN: north :return: longitude, latitude The function is inspired from `lam93toLatLon.py <https://gist.github.com/flire/0a305eeec77bc84a73af8ddc8f9ec043>`_. .. faqref:: :tag: geo :title: Les fichiers GEOFLA ne contiennent pas de longitude, latitude ? Les coordonnées contenues dans les fichiers :epkg:`GEOFLA` ne sont pas toujours des longitudes, latitudes mais des coordonnées exprimées dans un système de projection conique `Lambert 93 <https://fr.wikipedia.org/wiki/Projection_conique_conforme_de_Lambert>`_. Il faut convertir les coordonnées avant de pouvoir tracer la carte ou changer la projection utilisée par :epkg:`cartopy` : `Lambert Conformal Projection <https://scitools.org.uk/cartopy/docs/v0.15/crs/projections.html#lambertconformal>`_. :githublink:`%|py|33` """ class constantes: GRS80E = 0.081819191042816 LONG_0 = 3 XS = 700000 YS = 12655612.0499 n = 0.7256077650532670 C = 11754255.4261 delX = lambertE - constantes.XS delY = lambertN - constantes.YS gamma = math.atan(-delX / delY) R = math.sqrt(delX * delX + delY * delY) latiso = math.log(constantes.C / R) / constantes.n sinPhiit0 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * math.sin(1))) sinPhiit1 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit0)) sinPhiit2 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit1)) sinPhiit3 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit2)) sinPhiit4 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit3)) sinPhiit5 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit4)) sinPhiit6 = math.tanh(latiso + constantes.GRS80E * math.atanh(constantes.GRS80E * sinPhiit5)) longRad = math.asin(sinPhiit6) latRad = gamma / constantes.n + constantes.LONG_0 / 180 * math.pi longitude = latRad / math.pi * 180 latitude = longRad / math.pi * 180 return longitude, latitude