理解ArcIMS投影元素
ArcIMS 中的坐标系统由 ArcIMS 空间服务器( Spatial Server )通过三个 ArcXML 投影( projection )元素来管理: ? COORDSYS -输入的数据图层的投影
? FEATURECOORDSYS -地图服务的输出投影
? FILTERCOORDSYS -外包矩形框( envelope )或地图配置文件中空间过滤( Spatial filters )条件的坐标系统
每个投影元素通过 id 属性或字符串的定义( string 属性)作为指向坐标系统的引用。 id 属性只用一个编号就可以引用预定义的坐标系统,非常快速。而 string 属性描述坐标系统的所有参数,包括基准面 (datum), 单位 (units) 和起始子午线 (meridians) ,以及其它一些可进行基准面转换的可选参数。在 ArcXML Programmer's Reference Guide 文档中 Projection Element 部分 有详尽的关于 ArcIMS 支持的坐标系统、基准面转换,以及 id 编号和定义字符串的描述。
所有的坐标系统都可纳入地理和投影两大类。地理坐标系统是三维的,由经纬度描述位置。在投影坐标系统中,地球表面投影到二维平面上,由米或英尺来定位,叫做平面坐标或笛卡儿坐标。
输入图层的投影
地图配置文件中的每个层都必须有坐标系统。 COORDSYS 是定义数据层的投影元数据的方法之一。请注意该元素只用于申明数据层的投影 , 而非对层的投影进行转换。它可以用于定义 shapefiles, 使用 ArcSDE for coverage 的 coverages , ArcSDE 图层,支持的栅格图像和 acetate 图层。
大多数情况下, COORDSYS 元素不是地图配置文件的必要元素。当下列情况存在时,需要采用该元素:
? 没有定义 shapefile 的投影文件(后缀 *.prj )
? 没有定义 ArcSDE for coverage 的 .prj 文件
? ArcSDE 中没有空间参考信息表
? 需要层的基准面转换信息
? 使用栅格图层
对于没有投影信息的输入图层,可在文本编辑器或 XML 编辑器中将 COORDSYS 元素加入到地图配置文件中。当使用了非英文字符时,请确认 XML 编辑器支持 UTF-8 的编码方式。 COORDSYS 元素是 LAYER 元素的子元素,如果即没有 .prj 文件、空间参考表,也没有 COORDSYS 元素,图层就不能进行正确的投影。
在地图配置文件中添加投影元素
在地图配置文件中, FEATURECOORDSYS 元素指明 ArcIMS 服务的输出坐标系统。 FILTERCOORDSYS 指明文件中的外包矩形框或者空间过滤条件的坐标系统。这些元素都是 PROPERTIES 元素的子元素。
在 ArcIMS Author 中创建地图配置文件时,也定义了 ArcIMS 服务的 ENVELOPE 元 素中的范围属性。所有的地图配置文件必须包含 ENVELOPE 元素。当定义 FILTERCOORDSYS 元素时,请确信坐标系统元素与 ENVELOPE 的单位匹配。
当地图配置文件中包含 FILTERCOORDSYS 时,就必须包含 FEATURECOORDSYS 元素。而且 FILTERCOORDSYS 和 FEATURECOORDSYS 的值必须相同,并且成为服务器端默认的投影方式。
地图配置文件举例:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
<CONFIG>
<ENVIRONMENT>
<LOCALE country="US" language="en" variant=""/>
<UIFONT color="0,0,0" name="Arial" size="12" style="regular"/>
</ENVIRONMENT>
<MAP dynamic="true">
<PROPERTIES>
<MAPUNITS units="decimal_degrees"/>
<FEATURECOORDSYS id="54030" />
<FILTERCOORDSYS id="54030" />
<ENVELOPE minx="-16986727.8564406" miny="-12740045.8907383" maxx="16986727.8564406" maxy="12740045.8939226" />
</PROPERTIES>
<WORKSPACES>
<SHAPEWORKSPACE name="shp_ws-14" directory="E:\student\World"/>
</WORKSPACES>
<LAYER type="featureclass" name="World Grid" visible="true" id="Grid">
<DATASET name="grid" type="polygon" workspace="shp_ws-14"/>
<SIMPLERENDERER>
<SIMPLEPOLYGONSYMBOL boundarytransparency="1.0" filltransparency="1.0" fillcolor="69,138,195" boundarycaptype="round" boundarycolor="255,255,255"/>
</SIMPLERENDERER>
</LAYER>
<LAYER type="featureclass" name="Countries" visible="true" id="Countries">
<DATASET name="country" type="polygon" workspace="shp_ws-14"/>
<SIMPLERENDERER>
<SIMPLEPOLYGONSYMBO boundarytransparency="1.0" filltransparency="1.0" fillcolor="148,172,151" boundarycaptype="round" boundarycolor="64,64,64"/>
</SIMPLERENDERER>
</LAYER>
</MAP>
</CONFIG>
</ARCXML>
例中, World Robinson ( id = 54030 )用于指明两个投影元素的坐标系统。因为 FEATURECOORDSYS 元素指明服务输出的投影,那么任何由该地图配置文件生成的 ArcIMS 服务都与该元素指明的坐标系统相匹配,见图 1 。 当地图配置文件中含有 FEATURECOORDSYS 元素时, MAPUNITS 元素会被忽略。 ArcIMS 空间服务器根据 FEATURECOORDSYS 元素定义的坐标系统来决定正确的地图单位。
响应客户端请求,动态进行投影转换
发送请求:
对于地图配置文件例 1 中相应的地图服务,发送包含投影元素的 GET_IMAGE 请求:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
<REQUEST>
<GET_IMAGE>
<PROPERTIES>
<FILTERCOORDSYS id="54008" />
<FEATURECOORDSYS id="54008" />
</PROPERTIES>
</GET_IMAGE>
</REQUEST>
</ARCXML>
因为指定了转换的投影,所以在服务器返回的图片(如图 2 )中,两图层都转换成了 id 为 54008 的 Sinusoidal 投影。
请注意:在请求 (request) 中, ENVELOPE 的值与 FILTERCOORDSYS 一致;在 response( 响应 ) 中, ENVELOPE 与 FEATURECOORDSYS 一致。
性能和处理时间
进行投影转换非常耗时 , 较好的解决办法:准备好相应投影的数据,以减少对投影元素的使用。即建立网站时使用的数据,已经符合投影要求,而不需要再进行投影转换。
? FEATURECOORDSYS -地图服务的输出投影
? FILTERCOORDSYS -外包矩形框( envelope )或地图配置文件中空间过滤( Spatial filters )条件的坐标系统
每个投影元素通过 id 属性或字符串的定义( string 属性)作为指向坐标系统的引用。 id 属性只用一个编号就可以引用预定义的坐标系统,非常快速
所有的坐标系统都可纳入地理和投影两大类。地理坐标系统是三维的,由经纬度描述位置。在投影坐标系统中,地球表面投影到二维平面上,由米或英尺来定位,叫做平面坐标或笛卡儿坐标。
输入图层的投影
地图配置文件中的每个层都必须有坐标系统。 COORDSYS 是定义数据层的投影元数据的方法
大多数情况下, COORDSYS 元素不是地图配置文件的必要元素。当下列情况存在时,需要
? 没有定义 shapefile 的投影文件(后缀 *.prj )
? 没有定义 ArcSDE for coverage 的 .prj 文件
? ArcSDE 中没有空间参考信息表
? 需要层的基准面转换信息
? 使用栅格图层
对于没有投影信息的输入图层,可在文本编辑器或 XML 编辑器中将 COORDSYS 元素加入到地图配置文件中。当使用了非英文
在地图配置文件中添加投影元素
在地图配置文件中, FEATURECOORDSYS 元素指明 ArcIMS 服务的输出坐标系统。 FILTERCOORDSYS 指明文件中的外包矩形框或者空间过滤条件的坐标系统。这些元素都是 PROPERTIES 元素的子元素。
在 ArcIMS Author 中创建地图配置文件时,也定义了 ArcIMS 服务的 ENVELOPE 元 素中的范围属性。所有的地图配置文件必须包含 ENVELOPE 元素。当定义 FILTERCOORDSYS 元素时,请确信坐标系统元素与 ENVELOPE 的单位匹配。
当地图配置文件中包含 FILTERCOORDSYS 时,就必须包含 FEATURECOORDSYS 元素。而且 FILTERCOORDSYS 和 FEATURECOORDSYS 的值必须相同,并且成为服务器端默认的投影方式。
地图配置文件举例:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
<CONFIG>
<ENVIRONMENT>
<LOCALE country="US" language="en" variant=""/>
<UIFONT color="0,0,0" name="Arial" size="12" style="regular"/>
</ENVIRONMENT>
<MAP dynamic="true">
<PROPERTIES>
<MAPUNITS units="decimal_degrees"/>
</PROPERTIES>
<WORKSPACES>
<SHAPEWORKSPACE name="shp_ws-14" directory="E:\student\World"/>
</WORKSPACES>
<LAYER type="featureclass" name="World Grid" visible="true" id="Grid">
<DATASET name="grid" type="polygon" workspace="shp_ws-14"/>
<SIMPLERENDERER>
<SIMPLEPOLYGONSYMBOL boundarytransparency="1.0" filltransparency="1.0" fillcolor="69,138,195" boundarycaptype="round" boundarycolor="255,255,255"/>
</SIMPLERENDERER>
</LAYER>
<LAYER type="featureclass" name="Countries" visible="true" id="Countries">
<DATASET name="country" type="polygon" workspace="shp_ws-14"/>
<SIMPLERENDERER>
<SIMPLEPOLYGONSYMBO boundarytransparency="1.0" filltransparency="1.0" fillcolor="148,172,151" boundarycaptype="round" boundarycolor="64,64,64"/>
</SIMPLERENDERER>
</LAYER>
</MAP>
</CONFIG>
</ARCXML>
例中, World Robinson ( id = 54030 )用于指明两个投影元素的坐标系统。因为 FEATURECOORDSYS 元素指明服务输出的投影,那么任何由该地图配置文件生成的 ArcIMS 服务都与该元素指明的坐标系统相匹配,见图 1 。
响应客户端请求,动态进行投影转换
发送请求:
对于地图配置文件例 1 中相应的地图服务,发送包含投影元素的 GET_IMAGE 请求:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
<REQUEST>
<GET_IMAGE>
<PROPERTIES>
<FEATURECOORDSYS id="54008" />
</PROPERTIES>
</GET_IMAGE>
</REQUEST>
</ARCXML>
因为指定了转换的投影,所以在服务器返回的图片(如图 2 )中,两图层都转换成了 id 为 54008 的 Sinusoidal 投影。
性能和处理
进行投影转换非常耗时 , 较好的解决办法:准备好相应投影的数据,以减少对投影元素的使用。即建立网站