Obtenir la position de la carte lorsque WGS-84 lat / lon lorsque les angles supérieur gauche et inférieur droit sont indiqués

StackOverflow https://stackoverflow.com/questions/1415375

  •  06-07-2019
  •  | 
  •  

Question

Supposons que je dispose d’une carte, par exemple d’openstreetmaps.org. Je connais le WGS-84 lat / lon du coin supérieur gauche et inférieur droit de la carte. Comment puis-je trouver d'autres positions sur la carte à partir des coordonnées WGS-84 lat / lon données?

Était-ce utile?

La solution

Si la carte est à peu près au niveau de la rue / de la ville, utilise une projection mercator (comme < un href = "http://www.openstreetmap.org" rel = "nofollow noreferrer"> openstreetmap.org semble) et n'est pas trop proche des pôles, une interpolation linéaire peut être assez précise. En supposant que:

  • TL = lat / lon du coin supérieur gauche
  • BR = lat / lon du coin inférieur droit
  • P = lat / lon du point que vous souhaitez localiser sur la carte
  • (w, h) = largeur et hauteur de la carte que vous avez (pixels?)
  • l'origine de l'image de la carte, (0,0), se trouve dans son coin supérieur gauche

, nous pourrions interpoler la position (x, y) correspondant à P comme:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon)
y = h * (P.lat - TL.lat) / (BR.lat - TL.lat)

Objets communs:

  • La convention de notation lat / lon indique la latitude en premier et la seconde en longitude, c'est-à-dire "vertical". avant "horizontal". Ceci est opposé à la notation commune x, y des coordonnées d'image.

  • Les valeurs de latitude augmentent lorsque vous vous dirigez vers le nord ("haut"), alors que les coordonnées y de votre image cartographique peuvent augmenter lorsque vous effectuez des descentes.

  • Si la carte couvre une plus grande surface, l'interpolation linéaire ne sera pas aussi précise pour les latitudes. Pour une carte couvrant un degré de latitude et se trouvant dans les zones habitables de la Terre (par exemple, la région de la baie), la latitude centrale sera décalée d'environ 0,2%, ce qui est susceptible de dépasser le pixel (en fonction de la taille)

Si cela est assez précis pour vos besoins, vous pouvez vous arrêter ici!

Le calcul plus précis permettant de passer de la latitude de P à une position de pixel y commencerait par le calcul de mercator. Nous savons que pour une latitude P.lat, la position Y sur une projection commençant à l'équateur serait la suivante (j'utiliserai un Y majuscule, car contrairement à la valeur y recherchée, Y commence à l'équateur et augmente vers le nord):

Y = k * ln((1 + sin(P.lat)) / (1 - sin(P.lat)))

La constante k dépend de la mise à l'échelle verticale de la carte, que nous ne connaissons peut-être pas. Heureusement, on peut en déduire en observant que y (TL) - y (BR) = h. Cela nous amène:

k = h / (ln((1 + sin(TL.lat)) / (1 - sin(TL.lat))) - ln((1 + sin(BR.lat)) / (1 - sin(BR.lat))))

(bah! C'est quatre niveaux de crochets!) Maintenant que k est connu, nous avons maintenant la formule pour trouver la position Y de n'importe quelle latitude. Nous devons simplement corriger: (1) notre valeur y commence à TL.lat, pas à l'équateur, et (2) y croît vers le sud plutôt que vers le nord. Cela nous obtient:

Y(TL.lat) = k * ln((1 + sin(TL.lat)) / (1 - sin(TL.lat)))
Y(P.lat)  = k * ln((1 + sin(P.lat )) / (1 - sin(P.lat )))
y(P.lat)  = -(Y(P.lat) - Y(TL.lat))

Cela vous donne donc:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon) // like before
y = -(Y(P.lat) - Y(TL.lat))                  // where Y(anything) depends just on h, TL.lat and BR.lat 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top