在裁剪后的等角投影中从 (Lat,Lon) 计算 (x,y)
Calculate (x,y) from (Lat,Lon) in a cropped equirectangular projection
我有一张 地图 的 等距柱状投影 投影。我知道 (lat,lon) 在左上角和右下角的位置。现在我知道我可以这样计算 (x,y):
x = ((lon + 180) * (map_width / 360))
y = (((lat * -1) + 90) * (map_height / 180))
但是,这似乎产生了错误的坐标。我的猜测是我必须考虑图像的左上角和右下角(纬度、经度)。
所以我尝试了这种方式(左、上、右 bottom_lon 代表我的图像边界):
x = ((lon + left_lon) * (map_width / (right_lon - left_lon)))
y = (((lat * -1) + top_lat) * (map_height / (top_lat - bottom_lat)))
但我仍然没有得到正确的结果。我做错了什么?
用这两个 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)))
在接受的答案中,忘记了从高度中减去。所以,一定是这样的:
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 或 Equirectangular)。
我有一张 地图 的 等距柱状投影 投影。我知道 (lat,lon) 在左上角和右下角的位置。现在我知道我可以这样计算 (x,y):
x = ((lon + 180) * (map_width / 360))
y = (((lat * -1) + 90) * (map_height / 180))
但是,这似乎产生了错误的坐标。我的猜测是我必须考虑图像的左上角和右下角(纬度、经度)。
所以我尝试了这种方式(左、上、右 bottom_lon 代表我的图像边界):
x = ((lon + left_lon) * (map_width / (right_lon - left_lon)))
y = (((lat * -1) + top_lat) * (map_height / (top_lat - bottom_lat)))
但我仍然没有得到正确的结果。我做错了什么?
用这两个 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)))
在接受的答案中,忘记了从高度中减去。所以,一定是这样的:
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 或 Equirectangular)。