- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 15195775117 于 2020-7-8 14:58 编辑
一、问题缘起
工作中写报告需要自动贴入静态地图,同时叠加这区域的数据等值线图,这就需要知道静态地图的经纬度范围,
以前不知道如何计算,后来参考IDL的help中的例子,懂了原理后,这就是个很简单的事。
二、代码示例
;需要调用的函数neighbor是根据原点、方位和距离求新坐标的,代码详情见我另一帖子:
;http://bbs.06climate.com/forum.php?mod=viewthread&tid=96383
;该程序用于计算静态地图的长宽距离与经纬度范围
;静态地图有3个参量:中心、放大率zoom、图片像素
pro frame_of_StaticMap
centerlng=double(116.481485);静态地图的中心经度
centerLat=double(39.990464);静态地图的中心纬度
zoom =16;地图缩放级别
width=800;静态地图宽度(单位:像素)
height=400;静态地图高度(单位:像素)
;地球半径:
Re = 6378137
;每像素代表的距离(m/pixel):
resolution = (2*!DPI*Re)/(256*2d^zoom)
;图宽和高(单位:米)
deltax = width*resolution ; 单位米
deltay = height*resolution ;单位米
print,'地图东西距离:',deltax,'m'
print,'地图南北距离:',deltay,'m'
;知道了地图长宽和中心点,就可以计算东西南北的经纬度了:
;求最左经度:
lng1=neighbor([centerlng,centerLat],[-1,0],deltax/2)
lng1=lng1[0]
;求最右经度:
lng2=neighbor([centerlng,centerLat],[1,0],deltax/2)
lng2=lng2[0]
;求最下纬度:
lat1=neighbor([centerlng,centerLat],[0,-1],deltay/2)
lat1=lat1[1]
;求最上纬度:
lat2=neighbor([centerlng,centerLat],[0,1],deltay/2)
lat2=lat2[1]
print,'静态地图经纬度范围:'
print,[lng1,lng2,lat1,lat2]
;验算东西距离:
deltax2=map_2points(lng1,lat1,lng2,lat1,/METERS)
;验算南北距离:
deltay2=map_2points(lng1,lat1,lng1,lat2,/METERS)
print,'验算:'
print,'东西距离误差:',abs(deltax2-deltax),'m'
print,'南北距离误差:',abs(deltay2-deltay),'m'
end
运行结果:
地图东西距离: 1910.9257m
地图南北距离: 955.46285m
静态地图经纬度范围:
116.47027 116.49270 39.986166 39.994760
验算:
东西距离误差: 1.7312488m
南北距离误差: 1.1994471m
从结果看,误差很小,符合应用要求。
|
|