得到地图上的位置时WGS-84纬度/经度当上左右下角落'纬度/经度给出

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

  •  06-07-2019
  •  | 
  •  

假设我有一张地图,例如从openstreetmaps.org.我知道WGS-84纬度/经度上左右下角的地图。我怎么能找到其他位置的地图上的自给WGS-84纬度/经度坐标?

有帮助吗?

解决方案

如果地图的大约街/市一级,采用了一个 墨卡托投影 (作为 openstreetmap.org 似乎),而不太靠近磁极,线性插值可能不够准确。假设如下:

  • TL=纬度/经度的左上角
  • BR=纬度/经度的右下角
  • P=纬度/经度的点你想找到地图上的
  • (w h)=宽度和高度线图,你们(像素?)
  • 原产地的地图图像,(0,0),是在左上角

, 我们可以插入(x,y)相对应的位置P为:

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

共同的问题:

  • 纬度/经度符号公约列出的第一纬度和经度第二,即"垂直的"之前"水平".这是相对于共同的x、y符号的图像坐标。

  • 纬度值增加的时候会在一个北区方向("上升"),而y坐标在你的地图图像可以增加当做下来。

  • 如果地图的复盖更大的区域,线性插值将不会被为准确纬度地区。对一张地图跨越一定程度的纬度和在地球的可居住区(例如海湾地区),中纬度将通过0.2%左右,这是有可能通过小于一个象素(根据大小)

如果这就是精确足你的需求,可以停在这里!

更精确的数学从P的纬度的要素y位置将开始与墨卡托的数学。我们知道,对于一个纬度P.纬度,Y位置上的一个突开始在赤道会如下(我将使用一个资本Y作为不同于y的价值,我们正在寻找,Y开始在赤道并增加了向北):

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

k 取决于垂直比例的地图,其中我们可能不知道。幸运的是,它可以推断观察,y(L)-y(BR)=h。得到我们:

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

(哎呀!这四个层次的架!) 与 k 知,我们现在拥有的公式找到了Y位置的任何纬度。我们只需要正确的,用于:(1)我们的y值开始,在TL。纬度,不赤道,和(2)y长向南,而不是北部。这让我们:

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))

所以这得到你:

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 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top