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

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 68|回复: 1

[混合编程] IDL之获取网页数据与json解析

[复制链接]

新浪微博达人勋

发表于 2020-3-26 10:38:57 | 显示全部楼层 |阅读模式

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

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

x
万能的IDL啊!
最近在研究高德地图的web服务开发,因为学会了这个,很多工作量就解放了,躺着领工资,爽!
通过研究python的web功能,发现主要是使用requests.get()函数,就能获取网页内容,返回值格式可以是XML或json,
虽然以前我对XML比较熟悉,但网上都说json好,我试了下,果然,json的结构就是结构体(python称之为字典),且高德地图开发文档都给了json结构说明了,使用起来比XML好多了。
在使用python爽过一遍后,我想着IDL是否也有这个功能呢?
我回忆到,在IDL的help的《Image with a Map Projection》这一篇中,IDL有下载静态地图的功能,于是我凭着经验试了一下,居然成功了,下载静态地图与下载网页如出一辙,使用netObject.Get()函数即可。


神清气爽啊!


IDL中json与其他数据结构转换有2个函数:
JSON_SERIALIZE()把数组、结构体等转为json
JSON_PARSE()把json转为数组、结构体等


-------应用案例-------



;高德地图给出的周边搜索功能API:
url='https://restapi.amap.com/v3/place/around?key='+$
'*****************************'+$;这个是高德地图web服务开发key码,自己申请,免费的,我就不亮出来了
'&location=116.473168,39.993015&radius=200&types=011100'


;将网页数据按json格式下载到本地
netObject = IDLnetURL()
jsonfile='C:\Users\Administrator\Desktop\888.json'
!null = netObject.Get(URL=url,FILENAME=jsonfile)
netObject = 0


;按字符串读取该json文件
openr,lun,jsonfile,/get_lun
x=''
readf,lun,x
free_lun,lun


;json字符串转结构体(/TOSTRUCT表示转为结构体)
json=JSON_PARSE(x,/TOSTRUCT)
;以下就按高德地图提供的json格式进行打印了
;高德地图说json下有若干个pois,每个pois是个地点,包括了名称、地址、类型等等
n=n_elements(json.pois)
for i=0,n-1 do begin
  y=json.pois
  print,y.name+'  '+y.address
endfor



输出结果:
依威能源汽车充电站(东亚·望京中心A座)  望京园401号东亚·望京中心A座
宝马充电站(东亚望京中心)  广顺南大街望京园401号
普天新能源汽车充电站(东亚望京中心)  广顺南大街望京园401号(地面)进大门左侧




密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 2020-3-26 11:13:15 | 显示全部楼层
学习经验总结------双手互搏术真香!


对于我们气象学子,软件功底是薄弱的,
我们使用的专业性软件,大多属于小众,参考资料不像Java、python、C这种主流计算机语言,有浩如烟海的中文书籍、帖子,
很多资料都是英文的,虽然有不少精英的英文水平是很高的,但文化差别终究限制了学习速度。
英文读起来不仅慢,大量的专有名词也经常令人摸不着头脑。
所以,很早的时候我就考虑用主流语言的功能往IDL对照,通常会起到事半功倍的效果。
密码修改失败请联系qq:937062711
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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