注:一个服务的配置文件即为它的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是最上面的图层。

相关评论
