MapServerClass小结

      来源:ArcGIS Developer Help 

      MapServer是一个粗粒度的ao,这个对象允许用户显示或者查询在桌面,局域网/广域网或者万维网环境下的ArcGIS地图文档.在桌面环境中,你可以用MapServer或者其他的ao粗粒度对象.许多操作只需要几行代码就能搞定.在server环境中,MapServer对象可以从TCP/IP连接的DCOM对象(分布式com对象)或者从HTTP连接的SOAP/XML中获得. 

      MapServer组件类包括了许多接口,可以实现显示ArcGIS的地图文档(mxd或者pmf)(IMapServer和IMapServerLayout接口),也可以实现查询(IMapServer和IMapServerData接口) .

另外,许多MapServer对象被定义来表达MapServer接口的输入和输出参数.例如,IMapServer接口的ExportMapImage方法需要两个输入参数:被用于输出的地图的描述和输出参数的描述.这些输入都可以通过MapDescription和ImageDescription对象获得. 

      虽然MapServer以及与之关联的对象提供了主要的映射函数,但他们可能不能提供所有的ao功能.在许多情况下,你可能需要其他的,更加精细化的ao与MapServer关联.你可以通过IMapServerObjects接口来完成这些.通过这个接口你可以获得ILayer,IMap,IPageLayout.例如,你可以通过IMap接口改变地图(如增加新图层). 

      区分MapServer对象的暂时性和永久性改变是非常重要的.临时性改变可以通过IMapDescription和ILayerDescription接口改变MapDescription和LayerDescription.例如,你可能改变一张地图的地理范围(MapArea)或者是图层的是否可见(Visible).这些改变都是临时的并且在方法调用期间一直有效,当调用结束,MapServer的对象又恢复到它的默认状态. 

      永久性的改变可以通过两种途径.一种是通过IMapDescription和ILayerDescription接口来改变MapServer的属性然后调用IMapServerObjects的ApplyMapDescription方法使它永久生效.另一种方法是通过IMapServerObjects接口来直接获得精细化的ao对象,并对它作出添加一个新的图层或者改变图层的渲染方式等改变,然后调用RefreshServerObjects方法.这样就能用精细化ao对象的当前状态去刷新MapServer对象. 

      如果你需要永久性的改变精细化ao对象的状态,你需要使用非池化的对象. 

      当使用MapServer WSDL以及通过AGSServerConnection(局域网或者Internet)获得MapServer对象的时候,只有特定的符号可以使用,包括(ISimple MarkerSymbol,ICharacterMarker,IPictureMarker,ISimpleLineSymbol,ISimpleFillSymbol和IPictureFill) 

      MapServer服务可以包含相关的瓦片地图.这样可以在传递地图时显著提高性能.地图服务通过事先做好的切片而不是动态渲染地图来完成请求叫做切片地图服务.map cache指的是包含一定地图范围和比例尺等级的目录. 

      可以直接从tile cache里获得瓦片的应用程序包括arcgis的桌面应用,arcgis server web adf应用和arcgis javascript应用. 

      服务的发布方制作地图切片需要用ArcCatalog的geoprocessing工具或者是通过写脚本. 

      有两种类型的切片,一种是将所有图层渲染到一张图片上,一种是分图层渲染. 

      对于两种不同的切片类型用户的行为也将不同.融合渲染方法下,所有的客户端程序都可以获取和使用切片,在arcmap中,融合切片表现为图层组,并且不能进行要素选择,不能调整标签的选择,也不能通过开关子图层来操纵可见性. 

      只有桌面端可以使用分层切片.其他的应用使用起来和没用做切片的情况是一样的--这些应用程序为在单图层缓存里使用切片的服务代理了生成地图图片的工作。在客户端的多层切片表现为图层集合,可以控制图层的可见性,以及标注还有要素的选择. 

      为了最佳的显示性能,需要运用融合切片.应用融合切片的程序不会直接用地图服务,而是直接从切片的虚拟目录中获得图片或者通过服务器上的切片处理网上服务.应用ICacheDescription接口可以从切片服务中得到信息. 

      应用做了切片的服务和没做切片的服务是不同的,虽然在这两种服务上,你都可以查询地图.当你使用两种服务上的MapDescription和LayerDescription,还是会有所不同. 

      如果地图服务拥有融合切片习惯制图,包括对所选要素的渲染,不能应用于MapDescription上.另外,对任一地图图层的LayerDescription做出的任何改变,包括应用定义表达,应用选择缓冲,触发标签的可见性和图层可见性的改变都会被忽略.当地图服务是多图层切片时,对MapDescription上的改变是可以的.你可以用自定义制图渲染并且可以对选中要素进行渲染.包括属于切片图层的要素.尽管如此,你还是不能运行定义表达式或者触发已做切片的特定图层的ScaleSymbol属性.这些操作会被忽略.最后,通过IMapDescription运用新的地图投影于切片地图服务也是不可行的,切片图层不会执行.你需要通过ITileCacheInfo接口去改变空间参考.

转载于:https://www.cnblogs.com/myparamita/archive/2009/12/31/1637080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值