请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8004|回复: 15

[混合编程] IDL编程学习之kml/kmz

[复制链接]

新浪微博达人勋

发表于 2018-6-25 10:31:46 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
第一步,导入照片:
  world = FILEPATH('Day.jpg', SUBDIRECTORY=['examples','data'])
Day.jpg
该照片在C:\Program Files\Exelis\IDL83\examples\data中(所有内置素材都在改文件夹下)
打开PS,查看该图像素信息(我估计像素与地图的对应性可能有关)
QQ截图20180625102814.jpg
发现这是一个1024宽×512高的图。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 11:29:12 | 显示全部楼层
预备知识:
在使用地图投影的情况下,
GRID_UNITS=0或””→图不按投影变形;
GRID_UNITS=1或”m”或”meters”→图以米为单位按投影变形;
GRID_UNITS=2或者”deg”或者”degrees”→图以1经纬度为单位按投影变形。
我想,大家使用地图还是更习惯经纬度的!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 14:55:02 | 显示全部楼层
预备知识:把一张图进行地图投影
我准备了一张恐龙头,想把它投影在经纬度都是[0,45]的矩形内
blue.jpg
代码:
read_jpeg,'C:\Users\YGDY\Desktop\blue.jpg',blue
arctic = IMAGE(blue,MAP_PROJECTION='Stereographic',GRID_UNITS=2,$
  LIMIT=[0,0,45,45],IMAGE_LOCATION=[0,0],$
  IMAGE_DIMENSIONS=[45,45],/CURRENT,NAME='Arctic Research')

其中,
MAP_PROJECTION='Stereographic',确定了投影方式
GRID_UNITS=2,单位以“1经纬度”计
LIMIT=[0,0,45,45],想要显示的经纬度范围

IMAGE_LOCATION=[0,0],图左下角代表的经纬度
IMAGE_DIMENSIONS=[45,45],图的经度和纬度大小

我的理解:IMAGE_LOCATION和IMAGE_DIMENSIONS确定了图片所铺的地理位置,这样,图已经铺好了,用limit显示想展示的范围(也可以不使用)
结果:
QQ截图20180625141012.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 15:49:34 | 显示全部楼层
捋一遍:
1、读图:
  world = FILEPATH('Day.jpg', SUBDIRECTORY=['examples','data'])

2、把图变形为经纬度坐标
  arctic = IMAGE(world,MAP_PROJECTION='Stereographic',GRID_UNITS=2,$
    LIMIT=[51,-161,78,-52],IMAGE_LOCATION=[-180,-90],$
    IMAGE_DIMENSIONS=[360,180],/CURRENT,NAME='Arctic Research')

3、在图上加条线
  polyline = POLYLINE([[-149.81,61.25],[-68.70,76.53]], $
    /DATA, COLOR='red', NAME='Thule to Elmendorf', $
    THICK=2, TARGET=arctic)

4、再加个多边形
  x = [-119.017, -124.82, -129.22, -118.23, -113.03, -113.183]
  y = [66.25, 64.65, 61.43, 62.3, 63.783, 65.11]
  polygon = POLYGON(x, y, /DATA, COLOR='purple', $
    FILL_COLOR='purple', FILL_TRANSPARENCY=0, $
    NAME='Magnetic Anomaly', TARGET=arctic)

注意:在经纬度坐标的图上画图,用了target!
5、存为kml文件
  arctic.SAVE, 'C:\Users\YGDY\Desktop\arctic_map.kml'

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 16:50:23 | 显示全部楼层
以上的楼层,解决了把图投影在谷歌地球的问题,以下解决在地球上作图的问题
以墨卡托投影取某经纬度范围,图将在这个区域制作:
worldmap = MAP('Mollweide', LIMIT=[31.80,117.17,31.92,117.35])
画个等值线图:
lon=findgen(19)*0.01+117.17
lat=findgen(13)*0.01+31.80
v=randomu(s,19,13)
fig= CONTOUR(v,lon,lat,N_LEVELS=10, RGB_TABLE=13, /OVERPLOT,/fill, $
  GRID_UNITS=2, TRANSPARENCY=50)

其中,透明度也会在谷歌地球上体现。
保存为kml格式:
worldmap.SAVE, 'C:\Users\YGDY\Desktop\contour_kml.kml'

拖进谷歌地球:
合肥.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-28 17:12:48 | 显示全部楼层
前面的楼只是实现了地表的平面图,如何体现高度呢?
我试着使用智能可视化工具
ivolume,findgen(45,45,45)回车
在insert中选择插入map
QQ截图20180628170552.jpg
可以发现,体数据对应的正好是[0,45]范围的经纬度,但怎么自由选择经纬度范围就不知道了。
另外,surface函数里虽然有grid_units,但是却没能叠加,更没能生成kml
难道IDL只能在地图上实现平面图?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-28 17:29:31 | 显示全部楼层
与高度相关的我又想到了ENVI的Lidar工具,这个肯定有高度了!
从网上搜了些帖子,果然有高度,但是依旧不知道怎么做
002ajk6hzy6MHMTZyCw24&690.png
我在网上买了本kml的书,但愿能解决问题。
我前两天才发现kml也可以用记事本打开,里面写着代码。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-28 19:21:55 | 显示全部楼层
EREAS 2015 可以生成 kml
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-29 08:37:54 | 显示全部楼层
rcdxph 发表于 2018-6-28 19:21
EREAS 2015 可以生成 kml

虽然可以,总不能为了一个功能就又新学一门软件吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-12 09:21:51 | 显示全部楼层
最近观察,发现IDL的help中说了kmz的只有这个:
FILL
Set this property to indicate that the contours should be filled. The default is to draw the contour levels as lines without filling. The default color is defined by color table 49. See Loading Default Color Tables for more information.
Note: When saving to KML file format, the file size can be large. If this is an issue, try saving to KMZ format instead.

kml太大可以用kmz输出---这不就只是把kml压缩一下么!
可我要的是kml、图、dae(三维GIS建模文件)的压缩包!
失望!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表