gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2244回复:1

ArcGIS Server操作Mxd文件详细讲解

楼主#
更多 发布于:2011-08-22 11:46
      Server发布地图都是基于Mxd去发布的,这点与IMS使用axl文件差不多。一般来说,发布后mxd尽可能不要修改,或者在通过使用arcMap进行编辑后在重新发布。<br/>       修改mxd会导致地图服务发生变化,因此,相对来说是一种危险的操作。但有时客户需要对Mxd进行修改,自定义的添加修改图层,并重新发布服务。<br/>       当然,这些苛刻的需求server同样可以应付,但懒羊羊还是不建议这样做。方法总是有的,越危险的事也就越有趣。懒羊羊还是跟大家分享一下这方面的心得吧。<br/>下面函数实现添加一个图层到mxd文件,并设置样式。为更好的表达,函数使用返回操作结果的字符串。<br/> <div class="codeText"><div class="codeHead">C#代码</div><ol class="dp-c"><li class="alt"><span><span class="comment"><font color="#008000">/// <summary> </font></span><span>  </span></span></li><li><span>        </span><span class="comment"><font color="#008000">/// 添加图层到Mxd文件 </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// </summary> </font></span><span>  </span></li><li><span>        </span><span class="comment"><font color="#008000">/// <param name="serverContext">IServerContext</param> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// <param name="nfc">新图层对应的要素集</param> </font></span><span>  </span></li><li><span>        </span><span class="comment"><font color="#008000">/// <param name="groupIndex">复合图层的序号</param> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// <param name="mxdPath">mxd所在的路径</param> </font></span><span>  </span></li><li><span>        </span><span class="comment"><font color="#008000">/// <param name="picPath">用于对图层渲染的图片</param> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// <returns></returns> </font></span><span>  </span></li><li><span>        </span><span class="keyword"><strong><font color="#0000ff">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> addLayerInMxd(IServerContext serverContext, IFeatureClass nfc, </span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> groupIndex, </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> mxdPath,</span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> picPath)   </span></li><li class="alt"><span>        {   </span></li><li><span>            IMapServer pMapServer = serverContext.ServerObject </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServer;   </span></li><li class="alt"><span>            IMapServerObjects pMapServerObjs = pMapServer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServerObjects;   </span></li><li><span>            IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);   </span></li><li class="alt"><span>            </span><span class="keyword"><strong><font color="#0000ff">bool</font></strong></span><span> hasLayer = hasTheLayer(pMap, nfc.AliasName);   </span></li><li><span>            </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (hasLayer) </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"已存在该命名图层,操作未能完成"</font></span><span>;  </span><span class="comment"><font color="#008000">//如果图层已经存在了,那就不添加 </font></span><span>  </span></li><li class="alt"><span>            </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (groupIndex >= pMap.LayerCount) </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"组合图层序号越界,操作未能完成"</font></span><span>;   </span></li><li><span>            IMapLayers mapLayer = pMap </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapLayers;   </span></li><li class="alt"><span>            IGroupLayer gLayer = pMap.get_Layer(groupIndex) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IGroupLayer;   </span></li><li><span>            IFeatureLayer fl = serverContext.CreateObject(</span><span class="string"><font color="#0000ff">"esriCarto.FeatureLayer"</font></span><span>) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IFeatureLayer;   </span></li><li class="alt"><span>            fl.FeatureClass = nfc;   </span></li><li><span>            fl.Name = nfc.AliasName;   </span></li><li class="alt"><span>            </span><span class="comment"><font color="#008000">//设置样式 </font></span><span>  </span></li><li><span>            ISimpleRenderer pRen = serverContext.CreateObject(</span><span class="string"><font color="#0000ff">"esriCarto.SimpleRenderer"</font></span><span>) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> ISimpleRenderer;   </span></li><li class="alt"><span>            IGeoFeatureLayer pGeoLayer = fl </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IGeoFeatureLayer;   </span></li><li><span>            IPictureMarkerSymbol picMark = serverContext.CreateObject(</span><span class="string"><font color="#0000ff">"esriDisplay.PictureMarkerSymbol"</font></span><span>) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IPictureMarkerSymbol;   </span></li><li class="alt"><span>            picMark.Size = 20;   </span></li><li><span>            picMark.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, picPath);   </span></li><li class="alt"><span>            pRen.Symbol = (ISymbol)picMark;   </span></li><li><span>            pGeoLayer.Renderer = (IFeatureRenderer)pRen;   </span></li><li class="alt"><span>            mapLayer.InsertLayerInGroup(gLayer, pGeoLayer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> ILayer, </span><span class="keyword"><strong><font color="#0000ff">false</font></strong></span><span>, 3);   </span></li><li><span>  </span></li><li class="alt"><span>            </span><span class="comment"><font color="#008000">//获取pMapDocument对象 </font></span><span>  </span></li><li><span>            IMxdContents pMxdC;   </span></li><li class="alt"><span>            pMxdC = pMap </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMxdContents;   </span></li><li><span>            IMapDocument pMapDocument = serverContext.CreateObject(</span><span class="string"><font color="#0000ff">"esriCarto.MapDocument"</font></span><span>) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapDocument;   </span></li><li class="alt"><span>            pMapDocument.Open(mxdPath, </span><span class="string"><font color="#0000ff">""</font></span><span>);   </span></li><li><span>            pMapDocument.ReplaceContents(pMxdC);   </span></li><li class="alt"><span>            </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pMapDocument == </span><span class="keyword"><strong><font color="#0000ff">null</font></strong></span><span>) </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"文档为空不能完成操作"</font></span><span>;   </span></li><li><span>            </span><span class="comment"><font color="#008000">//检查地图文档是否是只读 </font></span><span>  </span></li><li class="alt"><span>            </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pMapDocument.get_IsReadOnly(mxdPath) == </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>)   </span></li><li><span>            {   </span></li><li class="alt"><span>                </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"地图文档只读,未能完成操作"</font></span><span>;   </span></li><li><span>            }   </span></li><li class="alt"><span>            </span><span class="comment"><font color="#008000">//根据相对的路径保存地图文档 </font></span><span>  </span></li><li><span>            pMapDocument.Save(pMapDocument.UsesRelativePaths, </span><span class="keyword"><strong><font color="#0000ff">false</font></strong></span><span>);   </span></li><li class="alt"><span>            </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"操作成功"</font></span><span>;   </span></li><li><span>        }   </span></li><li class="alt"><span>  </span></li><li><span class="comment"><font color="#008000">/// <summary> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// 是否存在layerName为别名的图层 </font></span><span>  </span></li><li><span>        </span><span class="comment"><font color="#008000">/// </summary> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// <param name="pMap"></param> </font></span><span>  </span></li><li><span>        </span><span class="comment"><font color="#008000">/// <param name="layerName"></param> </font></span><span>  </span></li><li class="alt"><span>        </span><span class="comment"><font color="#008000">/// <returns></returns> </font></span><span>  </span></li><li><span>        </span><span class="keyword"><strong><font color="#0000ff">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">bool</font></strong></span><span> hasTheLayer(IMap pMap, </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> layerName)   </span></li><li class="alt"><span>        {   </span></li><li><span>            </span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> i = 0; i < pMap.LayerCount; i++)   </span></li><li class="alt"><span>            {   </span></li><li><span>                ILayer pLayer = pMap.get_Layer(i);   </span></li><li class="alt"><span>                </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pLayer.Name == layerName)   </span></li><li><span>                    </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>;   </span></li><li class="alt"><span>                </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pLayer </span><span class="keyword"><strong><font color="#0000ff">is</font></strong></span><span> ICompositeLayer)   </span></li><li><span>                {   </span></li><li class="alt"><span>                    ICompositeLayer comLayer = pLayer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> ICompositeLayer;   </span></li><li><span>                    </span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> j = 0; j < comLayer.Count; j++)   </span></li><li class="alt"><span>                    {   </span></li><li><span>                        ILayer cLayer = comLayer.get_Layer(j);   </span></li><li class="alt"><span>                        </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (cLayer.Name == layerName)   </span></li><li><span>                            </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>;   </span></li><li class="alt"><span>                    }   </span></li><li><span>                }   </span></li><li class="alt"><span>            }   </span></li><li><span>            </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">false</font></strong></span><span>;   </span></li><li class="alt"><span>        }  </span></li></ol></div><p><span> </p><p> </p></span><p>      </p>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2011-08-22 11:47
<p>下面是根据图层名删除图层的操作</p><div class="codeHead">C#代码</div><div class="codeText"><ol class="dp-c"><li class="alt"><span><span class="keyword"><strong><font color="#0000ff">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> removeLayerFromMxd(IServerContext serverContext, layerName,</span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> mxdPath)   </span></span></li><li><span>        {   </span></li><li class="alt"><span>            IMapServer pMapServer = serverContext.ServerObject </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServer;   </span></li><li><span>            IMapServerObjects pMapServerObjs = pMapServer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServerObjects;   </span></li><li class="alt"><span>            IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);   </span></li><li><span>            IMapLayers pMapLayers = pMap </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapLayers;   </span></li><li class="alt"><span></span></li><li><span>            ILayer removeLayer = getLayerByName(serverContext, layerName);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (removeLayer == </span><span class="keyword"><strong><font color="#0000ff">null</font></strong></span><span>)   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"操作失败,找不到要删除的图层"</font></span><span>;   </span></li><li class="alt"><span>pMapLayers.DeleteLayer(removeLayer);   </span></li><li><span></span><span class="comment"><font color="#008000">//获取pMapDocument对象 </font></span><span></span></li><li class="alt"><span>IMxdContents pMxdC = pMap </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMxdContents; ;   </span></li><li><span>            IMapDocument pMapDocument = serverContext.CreateObject(</span><span class="string"><font color="#0000ff">"esriCarto.MapDocument"</font></span><span>) </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapDocument;   </span></li><li class="alt"><span>            pMapDocument.Open(mxdPath, </span><span class="string"><font color="#0000ff">""</font></span><span>);   </span></li><li><span>            pMapDocument.ReplaceContents(pMxdC);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pMapDocument == </span><span class="keyword"><strong><font color="#0000ff">null</font></strong></span><span>) </span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"操作失败,地图文档为空"</font></span><span>;   </span></li><li><span></span><span class="comment"><font color="#008000">//检查地图文档是否是只读 </font></span><span></span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pMapDocument.get_IsReadOnly(mxdPath) == </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>)   </span></li><li><span>            {   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"操作失败,地图文档只读"</font></span><span>;   </span></li><li><span>            }   </span></li><li class="alt"><span></span><span class="comment"><font color="#008000">//根据相对的路径保存地图文档 </font></span><span></span></li><li><span>pMapDocument.Save(pMapDocument.UsesRelativePaths, </span><span class="keyword"><strong><font color="#0000ff">false</font></strong></span><span>);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"操作成功"</font></span><span>;   </span></li><li><span>        }   </span></li><li class="alt"><span></span></li><li><span class="comment"><font color="#008000">/// <summary> </font></span><span></span></li><li class="alt"><span></span><span class="comment"><font color="#008000">/// 是否存在layerName为别名的图层 </font></span><span></span></li><li><span></span><span class="comment"><font color="#008000">/// </summary> </font></span><span></span></li><li class="alt"><span></span><span class="comment"><font color="#008000">/// <param name="pMap"></param> </font></span><span></span></li><li><span></span><span class="comment"><font color="#008000">/// <param name="layerName"></param> </font></span><span></span></li><li class="alt"><span></span><span class="comment"><font color="#008000">/// <returns></returns> </font></span><span></span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">bool</font></strong></span><span> hasTheLayer(IMap pMap, </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> layerName)   </span></li><li class="alt"><span>        {   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> i = 0; i < pMap.LayerCount; i++)   </span></li><li class="alt"><span>            {   </span></li><li><span>                ILayer pLayer = pMap.get_Layer(i);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pLayer.Name == layerName)   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>;   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (pLayer </span><span class="keyword"><strong><font color="#0000ff">is</font></strong></span><span> ICompositeLayer)   </span></li><li><span>                {   </span></li><li class="alt"><span>                    ICompositeLayer comLayer = pLayer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> ICompositeLayer;   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> j = 0; j < comLayer.Count; j++)   </span></li><li class="alt"><span>                    {   </span></li><li><span>                        ILayer cLayer = comLayer.get_Layer(j);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (cLayer.Name == layerName)   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">true</font></strong></span><span>;   </span></li><li class="alt"><span>                    }   </span></li><li><span>                }   </span></li><li class="alt"><span>            }   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">false</font></strong></span><span>;   </span></li><li class="alt"><span>        }   </span></li></ol></div><p class="alt"><span>当然,通过代码对服务器文件进行读写,还必须要注意网络的安全设置。<br/>      首先要确保有足够的权限对Mxd进行修改。<br/>      所谓的权限,第一是确保你的Server具有足够的授权。第二,服务器文件必须有足够的写入权限。对于第二点,主要是考虑磁盘格式。网络开发人员都知道,NTFS格式下面,要访问文件,必须设置安全属性。<br/>设置方法如下:</span></p><p>1、在服务器Mxd文件右键属性--点击"安全"标签<br/>2、查找soc用户<br/>3、给soc用户写入的权限。<br/>这里例子就省了,浏览者只管使用自己的soc用户就行了</p><p>        还有一点必须主要的,Mxd更改以后,地图服务是没有发生变化的,所发布的地图一直驻留在内存中。因此,这时候需要更新一下地图服务。  方法有很多,最傻瓜最直接的方法就是跑到机房去重启mxd所对应的service。但是,懒羊羊比较懒,所以,还是希望通过代码去控制,update一下。下面是更新地图服务的函数<br/> </p><div class="codeText"><div class="codeHead">C#代码</div><ol class="dp-c"><li class="alt"><span><span class="keyword"><strong><font color="#0000ff">private</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">void</font></strong></span><span> updateService(</span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> serviceName,</span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> serverName)   </span></span></li><li><span>    {   </span></li><li class="alt"><span>        ServerConnection pServerConnection = </span><span class="keyword"><strong><font color="#0000ff">new</font></strong></span><span> ESRI.ArcGIS.Server.WebControls.ServerConnection(serverName);</span><span class="comment"><font color="#008000">//地图服务机器名 </font></span><span></span></li><li><span>pServerConnection.Connect();   </span></li><li class="alt"><span>        IServerObjectAdmin pServerSOA = pServerConnection.ServerObjectAdmin;   </span></li><li><span>        IServerObjectConfiguration pConfig = pServerSOA.GetConfiguration(serviceName, </span><span class="string"><font color="#0000ff">"MapServer"</font></span><span>);   </span></li><li class="alt"><span>        pServerSOA.UpdateConfiguration(pConfig);   </span></li><li><span>    }   </span></li></ol></div><p>细心的朋友应该注意到了,这里面主要是使用了IServerObjectAdmin 接口,IServerObjectAdmin 接口功能十分强大,建议去查一下帮助,对其加深了解。</p><p>如果是fat格式就不用上述设置,毕竟NTFS格式安全系数比较高。至于Linux,懒羊羊没有做过,尝试过的朋友可以发表一下心得体会<br/>实际上,上述的操大多数都是常规的操作,AE程序员都能轻松搞定。但细微的地方还是要注意的,例如Server环境下创建新对象,文件的权限设置等等<br/>对server的一些特性也必须了解。例如mxd更新以后必须重启服务,确保当前服务与地图文档一致,不然就可能导致灾难性的出错。<br/><br/>前面漏掉的一个函数现在补上<br/> </p><div class="codeText"><div class="codeHead">C#代码</div><ol class="dp-c"><li class="alt"><span><span class="comment"><font color="#008000">/// <summary> </font></span><span></span></span></li><li><span></span><span class="comment"><font color="#008000">/// 通过图层名称返回图层 </font></span><span></span></li><li class="alt"><span></span><span class="comment"><font color="#008000">/// </summary> </font></span><span></span></li><li><span></span><span class="comment"><font color="#008000">/// <param name="pSOC">地图控件</param> </font></span><span></span></li><li class="alt"><span></span><span class="comment"><font color="#008000">/// <param name="LayerName">图层名称</param> </font></span><span></span></li><li><span></span><span class="comment"><font color="#008000">/// <returns></returns> </font></span><span></span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">static</font></strong></span><span> ILayer getLayerByName(IServerContext pSOC, </span><span class="keyword"><strong><font color="#0000ff">string</font></strong></span><span> LayerName)   </span></li><li><span>    {   </span></li><li class="alt"><span>        IMapServer pMapServer = pSOC.ServerObject </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServer;   </span></li><li><span>        IMapServerObjects pMapServerObjs = pMapServer </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> IMapServerObjects;   </span></li><li class="alt"><span>        IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);   </span></li><li><span></span><span class="comment"><font color="#008000">//获取所有的图层 </font></span><span></span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> i = 0; i < pMap.LayerCount; i++)   </span></li><li><span>        {   </span></li><li class="alt"><span>            ILayer lyr = pMap.get_Layer(i);   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (lyr.Name == LayerName)   </span></li><li class="alt"><span>            {   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> lyr;   </span></li><li class="alt"><span>            }   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">else</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (lyr </span><span class="keyword"><strong><font color="#0000ff">is</font></strong></span><span> ICompositeLayer)   </span></li><li class="alt"><span>            {   </span></li><li><span></span><span class="comment"><font color="#008000">//图层为复合图层,查找其子图层 </font></span><span></span></li><li class="alt"><span>ICompositeLayer comLayer = lyr </span><span class="keyword"><strong><font color="#0000ff">as</font></strong></span><span> ICompositeLayer;   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#0000ff">int</font></strong></span><span> j = 0; j < comLayer.Count; j++)   </span></li><li class="alt"><span>                {   </span></li><li><span>                    ILayer cLayer = comLayer.get_Layer(j);   </span></li><li class="alt"><span></span><span class="keyword"><strong><font color="#0000ff">if</font></strong></span><span> (cLayer.Name == layerName)   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> cLayer;   </span></li><li class="alt"><span>                }   </span></li><li><span>            }   </span></li><li class="alt"><span>        }   </span></li><li><span></span><span class="keyword"><strong><font color="#0000ff">return</font></strong></span><span> </span><span class="keyword"><strong><font color="#0000ff">null</font></strong></span><span>;   </span></li><li class="alt"><span>    }   </span></li></ol></div><p>原作者:懒洋洋</p>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部