Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# -*- coding: utf-8 -*- 

2""" 

3@file 

4@brief Helpers about longitude, latitude. 

5""" 

6import math 

7 

8 

9def lambert93_to_WGPS(lambertE, lambertN): 

10 """ 

11 Converts coordinates given in 

12 `Lambert 93 <https://fr.wikipedia.org/wiki/Projection_conique_conforme_de_Lambert>`_ 

13 system, this system is used by `IGN <http://http://professionnels.ign.fr/>`_ 

14 and their :epkg:`GEOFLA` file format. 

15 

16 @param lambertE east 

17 @param lambertN north 

18 @return longitude, latitude 

19 

20 The function is inspired from 

21 `lam93toLatLon.py <https://gist.github.com/flire/0a305eeec77bc84a73af8ddc8f9ec043>`_. 

22 

23 .. faqref:: 

24 :tag: geo 

25 :title: Les fichiers GEOFLA ne contiennent pas de longitude, latitude ? 

26 

27 Les coordonnées contenues dans les fichiers :epkg:`GEOFLA` 

28 ne sont pas toujours des longitudes, latitudes mais des coordonnées exprimées dans un système 

29 de projection conique `Lambert 93 <https://fr.wikipedia.org/wiki/Projection_conique_conforme_de_Lambert>`_. 

30 Il faut convertir les coordonnées avant de pouvoir tracer la carte ou changer la projection 

31 utilisée par :epkg:`cartopy` : 

32 `Lambert Conformal Projection <https://scitools.org.uk/cartopy/docs/v0.15/crs/projections.html#lambertconformal>`_. 

33 """ 

34 class constantes: 

35 GRS80E = 0.081819191042816 

36 LONG_0 = 3 

37 XS = 700000 

38 YS = 12655612.0499 

39 n = 0.7256077650532670 

40 C = 11754255.4261 

41 

42 delX = lambertE - constantes.XS 

43 delY = lambertN - constantes.YS 

44 gamma = math.atan(-delX / delY) 

45 R = math.sqrt(delX * delX + delY * delY) 

46 latiso = math.log(constantes.C / R) / constantes.n 

47 sinPhiit0 = math.tanh(latiso + constantes.GRS80E * 

48 math.atanh(constantes.GRS80E * math.sin(1))) 

49 sinPhiit1 = math.tanh(latiso + constantes.GRS80E * 

50 math.atanh(constantes.GRS80E * sinPhiit0)) 

51 sinPhiit2 = math.tanh(latiso + constantes.GRS80E * 

52 math.atanh(constantes.GRS80E * sinPhiit1)) 

53 sinPhiit3 = math.tanh(latiso + constantes.GRS80E * 

54 math.atanh(constantes.GRS80E * sinPhiit2)) 

55 sinPhiit4 = math.tanh(latiso + constantes.GRS80E * 

56 math.atanh(constantes.GRS80E * sinPhiit3)) 

57 sinPhiit5 = math.tanh(latiso + constantes.GRS80E * 

58 math.atanh(constantes.GRS80E * sinPhiit4)) 

59 sinPhiit6 = math.tanh(latiso + constantes.GRS80E * 

60 math.atanh(constantes.GRS80E * sinPhiit5)) 

61 

62 longRad = math.asin(sinPhiit6) 

63 latRad = gamma / constantes.n + constantes.LONG_0 / 180 * math.pi 

64 

65 longitude = latRad / math.pi * 180 

66 latitude = longRad / math.pi * 180 

67 

68 return longitude, latitude