麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

IDL读取XML文件

使用IDL读取RADARSAT-2的数据,需要用到lutSigma.xml文件中的定标常数来计算相关参量。本文需要提取lutSigma.xml中的offset和gains参数。使用IDL来读取xml文件,并且提取特定的节点下的参数。经过实验找到了下面的方法:

lutSigma.xml文件示例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lut copyright="XXXXXXXXXXXXX">
  <offset>0.000000e+00</offset>
  <gains>5.374149e+03 5.374090e+03 </gains>
</lut>

读取方法

先定义一个函数

;+
; :Author: YQC
;- 读取xml的函数
FUNCTION filter_XML, oNode
  name = oNode->getNodeName()
  IF name EQ 'offset' OR name EQ 'gains' THEN $
    RETURN, 1 ; accept
  RETURN, 3 ;; skip
END

解释:这个函数用来标记想要的节点,比如本文要用到offset和gains这两个参数,所以当节点名等于offset或gains时候返回1

调用方法

;====读取xml====
oDoc = OBJ_NEW( 'IDLffXMLDOMDocument', FILENAME=datapath+patharr[fp]+'\lutSigma.xml' )
oNodeIterator = oDoc->createNodeIterator( OBJ_NEW(), FILTER_NAME='filter_XML' )

offt = 0  ;偏移量
vall = [] ;定标常数
cont = 0  ;计数器

oNode = oNodeIterator->nextNode()
WHILE OBJ_VALID( oNode ) DO BEGIN
  ;读取偏移量
  if cont eq 0 then begin
    offt = float((oNode->GetFirstChild())->getNodeValue())
  endif
  ;读取定标常数
  if cont eq 1 then begin
    vall = (oNode->GetFirstChild())->getNodeValue()
  endif
  cont++
  oNode = oNodeIterator->nextNode()
ENDWHILE
;print,vall
OBJ_DESTROY, oDoc

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

已有 7 条评论

  1. 麻辣GIS-lay_giser
    1#
    lay_giser  · 2016-03-31 21:50

    老师您好,我是初学者,想利用xml文件读取影像四个角度的经纬度信息,想从您的代码上改进,请问您的代码怎么一直运行不了,不知能否将整个代码分享一下,我的邮箱xiashaliubo@163.com,谢谢!

      1. 麻辣GIS-Sailor
        Sailor  · 2016-03-31 23:42

        这里主要一个示例,从我的工程中摘录出来的,主要是FILENAME这个字段要设置成自己的文件路径。然后调用函数即可。

          1. 麻辣GIS-lay_giser
            lay_giser  · 2016-04-01 14:53

            我改了这个字段,但还是不能运行,我再试试或者换个方式

  2. 麻辣GIS-董鉴韬
    2#
    董鉴韬  · 2018-12-04 15:25

    对我的小项目太有帮助了,之后我想在我的小博客里引用一下,征求意见。

      1. 麻辣GIS-Sailor
        Sailor  · 2018-12-04 18:44

        可以,加引用链接即可。

  3. 麻辣GIS-DoubleC
    3#
    DoubleC  · 2019-03-29 09:32

    getNodeName() 和getNodeValue()函数是需要自己补充完整吗?

      1. 麻辣GIS-Sailor
        Sailor  · 2019-03-29 09:36

        不需要,使用IDL8.2.3应该可以用的。

留言板(小编看到第一时间回复) 取消回复