我在 equirectangular 投影中有一块地图。我知道(lat,lon)在左上角和右下角。现在我知道我可以像这样计算(x,y):
x = ((lon + 180) * (map_width / 360))
y = (((lat * -1) + 90) * (map_height / 180))
但是,这似乎会产生错误的坐标。我的猜测是我必须考虑到我的图像的左上角和右下角(lat,lon)。
所以我尝试了这种方式(left,top,right,bottom_lon表示我的图像边界):
x = ((lon + left_lon) * (map_width / (right_lon - left_lon)))
y = (((lat * -1) + top_lat) * (map_height / (top_lat - bottom_lat)))
但我仍然没有得到正确的结果。我做错了什么?
答案 0 :(得分:0)
用这两个Python函数回答我自己的问题:
def lon2x(lon, w):
return int(img_w * ((lon - start_lon) / (end_lon - start_lon)))
def lat2y(lat, h):
return int(img_h * ((lat - start_lat) / (end_lat - start_lat)))
答案 1 :(得分:0)
在接受的答案中,忘记了减去高度。因此,必须像这样:
def lon2x(lon, w):
return int(img_w * ((lon - start_lon) / (end_lon - start_lon)))
def lat2y(lat, h):
return int(img_h) - int(img_h * ((lat - start_lat) / (end_lat - start_lat)))
编辑:它们是近似正确的结果,但是对于非常准确的结果,您应该使用投影方法来创建地图(例如墨卡托(Mercator)或等角矩形)。