将 x,y 像素值转换为 lat 和 long
Posted
技术标签:
【中文标题】将 x,y 像素值转换为 lat 和 long【英文标题】:Transform x,y pixel values into lat and long 【发布时间】:2020-07-08 17:35:17 【问题描述】:我的地图窗口中心有纬度、经度和缩放。我有尺寸图窗口。我还在窗口中的地图(墨卡托投影 -openstreetmap )上具有特定事件的像素位置。谁能帮助我如何将这些像素位置转换为纬度和经度坐标或任何其他我以后能够在不同地图上可视化的坐标系? general case of my problem
【问题讨论】:
这在很大程度上取决于您使用的库,尤其是库使用的投影。给定您所说的数量,有一百万种方法可以显示地图。请缩小您的问题范围,使其可以回答。 点的像素数据(B点在mercartor投影中-从openstreetmap下载)我已经上传了我的问题的一般情况的图片。我没有使用任何库,我只有这些数据。从我对简单光标背后的数学理解到 latlong 应该足够了。但我不知何故迷失在这个问题中。 您是如何下载地图的?它是一个特定的图块还是已经是一个综合的摘录? OSM Wiki 包含前一种情况的信息。 我没有下载。我刚刚下载了相对于当前地图窗口左上角和中心点的像素位置。我已阅读您的建议并尝试使用它,但没有运气。 再次:我们需要更多细节:窗口来自哪里?它如何显示地图?下载像素位置是什么意思?你知道你在做什么——我们不知道。 【参考方案1】:我找到了使用这个公式的解决方案 (https://en.wikipedia.org/wiki/Web_Mercator_projection) enter image description here
计算我的中心点的 x,y 位置
将窗口坐标系转换为全局坐标系
逆变换
def LatLontoXY(lat_center,lon_center,zoom):
C =(256/(2*pi) )* 2**zoom
x=C*(math.radians(lon_center)+pi)
y=C*(pi-math.log( math.tan( (pi/4) + math.radians(lat_center)/2 ) ))
return x,y
def xy2LatLon(lat_center,lon_center,zoom,width_internal,height_internal,pxX_internal,pxY_internal):
xcenter,ycenter=LatLontoXY(lat_center,lon_center,zoom)
xPoint=xcenter- (width_internal/2-pxX_internal)
ypoint=ycenter -(height_internal/2-pxY_internal)
C = (256 / (2 * pi)) * 2 ** zoom
M = (xPoint/C)-pi
N =-(ypoint/C) + pi
lon_Point =math.degrees(M)
lat_Point =math.degrees( (math.atan( math.e**N)-(pi/4))*2 )
return lat_Point,lon_Point
【讨论】:
以上是关于将 x,y 像素值转换为 lat 和 long的主要内容,如果未能解决你的问题,请参考以下文章
谷歌墨卡托投影不是真正的墨卡托,如何在 SVG 上更正将 lat long 转换为 x,y