MXD文档操作(一)-获取所有图层数据源信息
来源:互联网 发布:徐州淘宝网店培训 编辑:程序博客网 时间:2024/05/29 09:12
- 打开mxd文档
- 1 在后台打开
- 2 在arcgis中打开
- 获取mxd文档中所有图层的数据源信息
- 1 根据类型获取Layer
- 2 IFeatureLayer
- 3 IRasterLayer
- 4 IGroupLayer
1 打开mxd文档
1.1 在后台打开
using ESRI.ArcGIS.Carto;IMapDocument mapDoc = new MapDocumentClass(); mapDoc.Open(mxdPath);
1.2 在arcgis中打开
ArcMap.Application.OpenDocument(mxdPath);
2 获取mxd文档中所有图层的数据源信息
在ArcGIS中,图层(ILayer)可以分为不同的类别,比较常见的有:IFeatureLayer、IRasterLayer、IGroupLayer等,并且mxd中还会包含数据表(如DBF表)。不同类别图层的数据源文件类型各异,获取方式也各不相同。下面分类获取各图层的数据源信息。
2.1 根据类型获取Layer
首先对所有图层进行分类,不同的图层具有唯一的一个UID编码,可以根据UID码分类获取图层。其对应关系见下表,更多详见帮助。
分类获取函数
/// <summary>/// 根据UID获取指定类型的图层/// </summary>/// <param name="uidValue">UID值</param>/// <param name="pMap"></param>/// <returns></returns>private IEnumLayer GetLayers(string uidValue, IMap pMap){ UID uid = new UIDClass(); uid.Value = uidValue;// IEnumLayer layers = pMap.get_Layers(uid, true); return layers;}
2.2 IFeatureLayer
IFeatureLayer继承自ILayer,是MXD中的矢量数据层,是要素类的表现形式,图层的数据类型可以是geodatabase、shapefile、coverage等。
IMapDocument mapDoc = new MapDocumentClass();string mxdPath = mxdFullPathName;mapDoc.Open(mxdPath);IMap pMap = mapDoc.get_Map(0);IEnumLayer pEnumLayer;ILayer mLayer;List<string> list=new List<string>();//保存所有信息string extention="" //文件后缀;string uid1 = "{40A9E885-5533-11d0-98BE-00805F7CED21}";//FeatureLayer//获取mxd文档中所有的IFeatureLayerpEnumLayer = GetLayers(uid1, pMap);pEnumLayer.Reset();mLayer = pEnumLayer.Next();while (mLayer != null){ IFeatureLayer pFeatureLayer = mLayer as IFeatureLayer; IDataLayer dataLayer = mLayer as IDataLayer; IDatasetName pDsName = (IDatasetName)(dataLayer.DataSourceName); IWorkspaceName ws = pDsName.WorkspaceName; if (pFeatureLayer.DataSourceType.ToLower().Contains("shapefile")) { extention = ".shp"; string pathStr = ws.PathName; string fileName = pDsName.Name; if (!System.IO.Path.GetExtension(fileName).Equals(extention)) { fileName += extention; } string fullName = System.IO.Path.Combine(pathStr, fileName); if (!list.Contains(fullName)) { list.Add(fullName); } } mLayer = pEnumLayer.Next();}
2.3 IRasterLayer
string uid3 = "{D02371C7-35F7-11D2-B1F2-00C04F8EDEFF}"; //IRasterLayerpEnumLayer = GetLayers(uid3, pMap);pEnumLayer.Reset();mLayer = pEnumLayer.Next();while (mLayer != null){ IRasterLayer pRasterLayer = mLayer as IRasterLayer; string fullName = pRasterLayer.FilePath; if (!list.Contains(fullName)) { list.Add(fullName); } mLayer = pEnumLayer.Next();}
2.4 IGroupLayer
string uid2 = "{EDAD6644-1810-11D1-86AE-0000F8751720}";//group layerpEnumLayer = GetLayers(uid2, pMap);pEnumLayer.Reset();mLayer = pEnumLayer.Next();while (mLayer != null){ IGroupLayer pGroupLayer = mLayer as IGroupLayer; List<string> list2 = getGroupLayerInfo(pGroupLayer); foreach (string item in list2) { if (!list.Contains(item)) { list.Add(item); } } mLayer = pEnumLayer.Next();}/// <summary>/// 获取图层组中所有图层的数据源信息(数据源的全路径)/// </summary>/// <param name="groupLayer">图层组</param>/// <returns>图层组中所有图层的数据源信息组成的List</returns>private List < string > getGroupLayerInfo(IGroupLayer groupLayer) { List < string > list = new List < string > (); string extention = ""; ICompositeLayer pCompositeLayer = groupLayer as ICompositeLayer; for (int i = 0; i < pCompositeLayer.Count; i++) { ILayer tLayer = pCompositeLayer.Layer[i]; //raster if (tLayer is IRasterLayer) { IRasterLayer tLayer1 = tLayer as IRasterLayer; string fullName = tLayer1.FilePath; if (!list.Contains(fullName)) { list.Add(fullName); } } //IGroupLayer else if (tLayer is IGroupLayer || tLayer is ICompositeLayer) { List < string > list2 = getGroupLayerInfo(tLayer as IGroupLayer); foreach(string item in list2) { if (!list.Contains(item)) { list.Add(item); } } } //矢量图层 else { IFeatureLayer pFeatureLayer = tLayer as IFeatureLayer; IDataLayer dataLayer = tLayer as IDataLayer; IDatasetName pDsName = (IDatasetName)(dataLayer.DataSourceName); IWorkspaceName ws = pDsName.WorkspaceName; string pathStr = ws.PathName; string fileName = ""; if (pFeatureLayer.DataSourceType.ToLower().Contains("cad")) { extention = ".dwg"; fileName = groupLayer.Name.Split(' ')[0]; if (!System.IO.Path.GetExtension(fileName).Equals(extention)) { fileName += extention; } string fullName = System.IO.Path.Combine(pathStr, fileName); if (!list.Contains(fullName)) { list.Add(fullName); } break; } else if (pFeatureLayer.DataSourceType.ToLower().Contains("shapefile")) { extention = ".shp"; fileName = pDsName.Name; if (!System.IO.Path.GetExtension(fileName).Equals(extention)) { fileName += extention; } string fullName = System.IO.Path.Combine(pathStr, fileName); if (!list.Contains(fullName)) { list.Add(fullName); } } } } return list;}
阅读全文
0 0
- MXD文档操作(一)-获取所有图层数据源信息
- MXD文档操作(二)-修改MXD文档数据源
- ArcMap批量修改mxd图层数据源路径
- ArcMap批量修改mxd图层数据源路径
- AO实现获取mxd图层workspace,需要将mxd设置为相对路径存储
- 获取mxd中feature所在图层的渲染方式
- 遍历mxd中的所有layer层
- CAD 二次开发 图层操作(2)获取所有图层名称
- 实现得到pagelayoutControl关联的mxd文档,并删除其中的最顶端图层
- ArcEngine如何获取mxd中feature所在图层的渲染方式
- 修改MXD图层连接的方法
- 地图(mxd)文档如何加密(转)
- ArcGIS Server操作Mxd文件(转)
- arcgis mxd 文档
- PHP文件操作(一)获取文件信息,读取文件
- 装载MXD文件 保存Mxd文档
- 打开mxd中某个特定的图层
- Arcgis Server向MXD中添加图层
- linux下搭建solrCloud集群(一)
- SpringBoot+Mybatis学习Demo问题总结1
- Ubuntu中Object-Detector-App安装过程的一些坑
- Android 编译系统之Android.bp
- MongoDB 基本用法
- MXD文档操作(一)-获取所有图层数据源信息
- AHB和APB总线的比较
- 使用docker部署rocketmq时的坑
- oracle常用函数总结
- attempt to index field 'image' (a nil value) torch
- linux下查找某个文件位置的方法
- 实现多个div拖拽移动,交换位置功能,代码复制可运行,有交换特效
- 新手的我在使用docker制作tomcat镜像时遇到环境变量问题
- socket 头