欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏ArcGIS应用与开发ArcGIS其它 → 正文
ArcXML请求响应模型
07-12-07 00:00:00 作者:浩淼的天空 出处:浩淼的天空

注:一个服务的配置文件即为它的AXL文件。它也是一个ArcXML文件。ArcXML是XML语言的一种,它使用文本方式,通过一定的封闭结构,标记化记录了相关的地理信息,如服务信息、图层信息等,它是IMS模型中用于通讯的标准语言。XML语言是区分大小写的。

ArcXML按照一定的格式写成,它包括以下部分:

<?xml version="1.0" encoding="UTF-8"?>

这是每一个XML都需要的部分,不限于ArcXML,用于说明XML的版本和编码格式。

XML中每一个用于描述信息的,具有起始单位的部分称为元素,元素必须为大写,如下:

<ARCXML version="1.1">-------起始部分

</ARCXML>--------------------------终止部分

以上是根元素,其它所有的XML元素都包含在这两个元素中间。

根元素中包含的有子元素,它的格式与根元素类似,如:

<ARCXML version="1.1">

<REQUEST>-----子元素的起点

</REQUEST>------子元素的终点

</ARCXML>

子元素和根元素都是元素的一种,一种元素可以为其它元素的子元素,也可以为更低级元素的根元素。如果子元素中不包含更低级的子元素的时候,它称为空元素,可以这样写法:

<REQUEST/>

除了子元素,我们还可以使用属性来标识信息。属性必须为小写,其值必须在""号内。部分属性必须有值,而更多的属性可有可无。

下面的内容是输入一个ArcXML请求,获得一个服务器返回的ArcXML,并解析结果,出现地图。这些例子需要使用本人开发的CIMS程序。

1.获取IMS的服务列表

service需要为catalog

<GETCLIENTSERVICES/>

返回IMS中所有可用的服务的信息,下面有一个可用的服务basicworld,为影像服务器,权限为PUBLIC,状态可用:

<?xml version="1.0"?>

<ARCXML version="1.1">

<RESPONSE>

<SERVICES>

<SERVICE name="basicworld" servicegroup="ImageServer1" access="PUBLIC" type="ImageServer" version=""  status="ENABLED" >

<IMAGE type="JPG" />

<ENVIRONMENT>

<LOCALE country="US" language="en" />

<UIFONT name="Arial" />

</ENVIRONMENT>

<CLEANUP interval="10" />

</SERVICE>

</RESPONSE>

</ARCXML>

2.获取服务信息

service为某个服务名,返回的信息按照其属性的不同而不同。这个元素可以有五个属性。

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_SERVICE_INFO fields="true" renderer="false" extensions="false" envelope="true" dpi="96"/>

</REQUEST>

</ARCXML>

返回服务的信息。它依据上面属性的不同而不同,信息可以包含范围,图层字段等。

3.获取图层信息

如果仅仅是为了获得服务内图层的信息,可以使用下面的ArcXML:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE show="Layers">

<PROPERTIES/>

</GET_IMAGE>

</REQUEST>

</ARCXML>

返回的信息:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<RESPONSE>

<IMAGE>

<ENVELOPE minx="598778.538182811" miny="101110.000026612" maxx="615018.538152822" maxy="113290.00000412" />

<LAYERS>

<LAYER name="DM01SXPOLY" id="0" featurecount="5460" />

<LAYER name="DM01DLARC" id="1" featurecount="1249" />

</LAYERS>

<OUTPUT url="http://test001/output/nbcity_TEST0011668196420.jpg" />

</IMAGE>

</RESPONSE>

</ARCXML>

4.获取地图影像

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE>

<PROPERTIES/>

</GET_IMAGE>

</REQUEST>

</ARCXML>

返回的信息:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<RESPONSE>

<IMAGE>

<ENVELOPE minx="-180" miny="-135" maxx="180" maxy="135" />

<OUTPUT url="http://test001/output/basicworld_TEST0011668196421.jpg" />

</IMAGE>

</RESPONSE>

</ARCXML>

我们下面需要做的也就是解析这个XML文件,提取出图像的URL并给一个图像对象而已。

5.获得不同范围的图形信息

在上一个例子中,我们得到的是全范围的图像,为了得到模拟放大效果,我们可以在<PROPERTIES>中添加属性和子元素,下面是显示一个小范围的信息:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE>

<PROPERTIES>

<ENVELOPE minx="100" miny="20" maxx="120" maxy="40"/>

</PROPERTIES>

</GET_IMAGE>

</REQUEST>

</ARCXML>

注意,我们在自己确定范围的时候,设置的最大最小xy值应该在全范围最大最小xy的范围内。新区域尽量为矩形。

6.设置图层的可见性

下面我们开始设置图层的可见性,为了隐藏某个图层,可以使用下面的方法,添加<LAYERLIST>和<LAYERDEF>子元素。

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE>

<PROPERTIES>

<LAYERLIST>

<LAYERDEF id="city" visible="false"/>

<LAYERDEF id="states" visible="true"/>

<LAYERDEF id="country" visible="true"/>

<LAYERDEF id="world" visible="true"/>

</LAYERLIST>

</PROPERTIES>

</GET_IMAGE>

</REQUEST>

</ARCXML>

我们最好把图层的id改成一个明显的字符串,便于阅读。这个修改在服务的AXL文件中,修改后刷新一下服务。

第二种设置可见性的方法是使用nodefault属性,这个方法ArcMap影像服务不支持,如下:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE>

<PROPERTIES>

<LAYERLIST nodefault="true">

<LAYERDEF id="0" />

<LAYERDEF id="1" />

<LAYERDEF id="2" />

</LAYERLIST>

</PROPERTIES>

</GET_IMAGE>

</REQUEST>

</ARCXML>

上面的方法使得仅仅只有在LAYERLIST中的图层才可见,未被列入列表的图层都不可见。它们返回的信息类似:

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<RESPONSE>

<IMAGE>

<ENVELOPE minx="-180" miny="-135" maxx="180" maxy="135" />

<OUTPUT url="http://test001/output/basicworld_TEST0011668203641.jpg" />

</IMAGE>

</RESPONSE>

</RESPONSE>

7.改变图层的顺序

<?xml version="1.0" encoding="UTF-8"?>

<ARCXML version="1.1">

<REQUEST>

<GET_IMAGE>

<PROPERTIES>

<LAYERLIST order="true">

<LAYERDEF id="world" />

<LAYERDEF id="states" />

<LAYERDEF id="city"/>

</LAYERLIST>

</PROPERTIES>

</GET_IMAGE>

</REQUEST>

</ARCXML>

上面的order属性用于改变图层的顺序,可以使某些图层被掩盖,当为true的时候,就会以layerlist中的顺序排列。ArcMap影像服务不能使用该方法改变顺序,它的顺序是固定的。

上面的LAYERDEF顺序,则是先放world,最后放city,即city是最上面的图层。


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号