C#语言实现ArcGIS数据源重置之Set Data Source功能

1、须要:依据选择的Mxd路径和目标数据源路径进行重置数据源。此处以(.Mdb为例);

主要利用到的接口:

(1)IMapDocument    (2)IMapControl2     (3)IWorkspaceFactory        (4)IWorkspace
  (5)IEnumDataset

(6)IDataset              
(7)ISpatialReference   (8)UID        (9)IEnumLayer           (10)IFeatureWorkspace

如今简要介绍下以上10个接口的经常用法:

1、IMapDocument

(1)、ActiveView,地图文档的视图。

(2)、Close,关闭地图文档;

(3)、DocumentFilename,地图文档的文件名称;

(4)、DocumentType,地图文档的类型,有

(5)、IsMapDocument。推断是否为地图文档;IsPasswordProtected:是否有password保护

(6)、IsPresent。是否存在。IsReadOnly是否仅仅读。

(仅仅读的文档无法进行保存)

(7)、Layer,获取地图文档中的图层。

返回ILayer类型。參数get_Layer (intmapIndex,intlayerIndex)

(8)、Map,用来获取IMap对象。   MapCount:包括几个Map对象

(9)、New,创建一个MapDocument,

(10)、Open,打开一个地图文档,依据路径打开。public void Open (string sDocument,string bsPassword);

(11)、Save,用于保存MapDocument,public void Save (bool bUseRelativePaths,bool bCreateThumnbail);

(12)、UsesRelativePaths。用于指定MapDocument的路径

2、IMapControl2     的方法比較多,功能比較明确,这里仅仅是罗列一下;

(1)、ActiveView、AddLayer、AddLayerFromFile、CenterAt(用于定位)、CheckMxFile(检查某个MXD路径)

(2)、ClearLayers(清楚Map中全部图层)、CurrentTool(此时Map上的工具)、DeleteLayer(删除图层)

(3)、DrawShape(在Map上绘制一个Geometry)、DrawText(在Geometry绘制文字)、FlashShape(闪烁)

(4)、FromMapPoint(将地图上的点转换)、ToMapPoint(转换为地图上的点)、FullExtent(全屏)

(5)、hWnd:句柄、LayerCount(图层的个数)、LoadMxFile(依据路径载入一个Mxd)、MapScale:比例尺

(6)、MapUnits(地图单位)、MouseIcon(鼠标的形状)、MoveLayerTo(移动Layer的位置)、Refresh(刷新)

(7)SpatialReference(空间參考)、TrackCircle(画圆)、TrackLine(线)、TrackPolygon(多边形)

3、IWorkspaceFactory        工作空间工厂,用于创造工作空间的接口,IWorkspace继承于它

(1)、Copy,赋值一个工作空间

(2)、Create,通过路径、文件名称、数据库连接创建一个新的工作空间

(3)、GetClassID,工厂的ID

(4)、GetWorkspaceName,获取工作空间的名字

(5)、IsWorkspace,是否为工作空间

(6)、Move。将一个工作空间移动到一个指定的目录

public bool Move ( IWorkspaceName WorkspaceName,string destinationFolder);

(7)、Open,打开一个工作空间public IWorkspace Open (IPropertySet ConnectionProperties,int hWnd);

(8)、OpenFromFile,通过给定的文件名称打开一个工作空间

public IWorkspace OpenFromFile ( string fileName,int hWnd);

(9)ReadConnectionPropertiesFromFile,依据文件名称读取连接属性

public IPropertySet ReadConnectionPropertiesFromFile (string fileName);

(10)WorkspaceType。工作空间的类型,

4、IWorkspace   工作空间。用于对数据进行操作

(1)、ConnectionProperties,连接属性,返回一个IPropertySet类型

(2)、DatasetNames,工作空间中DataSet的名称

(3)、Datasets。工作空间中的要素集合          ExecuteSQL:运行一个SQL语句      Exists:是否存在

(4)、IsDirectory,是否为系统路径            PathName:工作空间路径的全名称      Type:类型

5、IEnumDataset

(1)next。下一个          ReSet:重置DataSet

类如:IEnumDataset pEnumDataSet = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

6、IFeatureWorkspace

(1)、CreateFeatureClass,创建一个FeatureClass

(2)、CreateFeatureDataset,创建一个DATAset

public IFeatureDataset CreateFeatureDataset ( string Name, ISpatialReference SpatialReference);

(3)、OpenFeatureClass,打开一个存在的FeatureClass

public IFeatureClass OpenFeatureClass (string Name);

注意:其它接口在别的文章中有,或者查看ArcEngine的帮助文档

需求实现代码:

 private void SetDataSource(string sMxdPath, string sTargetPath)
        {
            ////获取MapDocment
            IMapDocument pMapDocument = new MapDocumentClass();
            pMapDocument.Open(sMxdPath, "");

            ////创建一个MapControl
            IMapControl2 pMapControl = new MapControlClass();
            string sFileName = sMxdPath;
            pMapControl.LoadMxFile(sFileName, null, null);

            ////创建一个工作空间
            IWorkspaceFactory pWorkFactory = new AccessWorkspaceFactoryClass();
            IWorkspace pWorkspace = pWorkFactory.OpenFromFile(sTargetPath, 0);

            ////获取工作空间中的全部Dataset
            IEnumDataset pEnumDataSet = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
            IDataset pDataSet = pEnumDataSet.Next();
            ISpatialReference pRef = (pDataSet as IGeoDataset).SpatialReference;

            string sDistrictCode = string.Empty;
            string sScale = string.Empty;

            if (pDataSet != null)
            {
                UID uid = new UIDClass();
                uid.Value = "{" + typeof(IFeatureLayer).GUID.ToString() + "}";
                IEnumLayer pEnumLayer = pMapControl.Map.get_Layers(uid, true);
                IFeatureLayer pFeaLyr = pEnumLayer.Next() as IFeatureLayer;
                IFeatureWorkspace pFeaClsWks = pWorkspace as IFeatureWorkspace;
                while (pFeaLyr != null)
                {
                    string sDsName = ((pFeaLyr as IDataLayer).DataSourceName as IDatasetName).Name;
                    if ((pWorkspace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, sDsName))
                    {
                        pFeaLyr.FeatureClass = pFeaClsWks.OpenFeatureClass(sDsName);
                        pFeaLyr.Name = pFeaLyr.Name;
                    }

                    pFeaLyr = pEnumLayer.Next() as IFeatureLayer;
                }
                //释放资源,防止出现Ox80040228,出现资源锁定错误
                ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pWorkspace); 
                ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pFeaClsWks); 
               pMapControl.Map.SpatialReference = pRef; 
               IMxdContents pMxdC; 
               pMxdC = pMapControl.Map as IMxdContents;
               pMapDocument.Open((pMapControl as IMapControl3).DocumentFilename, ""); 
               pMapDocument.ReplaceContents(pMxdC); 
               pMapDocument.Save(true, true); 
       }


至此,就实现ArcMap中的Set Data Source功能。

时间: 2024-10-11 06:55:40

C#语言实现ArcGIS数据源重置之Set Data Source功能的相关文章

ArcGIS API for Silverlight实现地图测距功能

原文:ArcGIS API for Silverlight实现地图测距功能 问题:如何实现地图测距功能? 地图工具栏 <Grid x:Name="gToolMenu" Height="100" VerticalAlignment="Top" Opacity="0.8" HorizontalAlignment="Right" Width="467"> <Rectangle

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

R语言基因组数据分析可能会用到的data.table函数整理

R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度.因此,在对大数据处理上,使用data.table无疑具有极高的效率.这里主要介绍在基因组数据分析中可能会用到的函数. fread 做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.ta

C 语言变长数组 struct 中 char data[0] 的用法

1.结构体内存布局(padding) 为了让CPU能够更舒服地访问到变量,struct中的各成员变量的存储地址有一套对齐的机制.这个机制概括起来有两点:第一,每个成员变量的首地址,必须是它的类型的对齐值的整数倍,如果不满足,它与前一个成员变量之间要填充(padding)一些无意义的字节来满足:第二,整个struct的大小,必须是该struct中所有成员的类型中对齐值最大者的整数倍,如果不满足,在最后一个成员后面填充. The following typical alignments are va

C语言变长数组 struct中char data[0]的用法

版权声明:本文为博主原创文章,未经博主允许不得转载. [cpp] view plain copy print? 今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术.下面是我在网上找到的一篇讲解很清楚的文章. 在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nL

arcgis中Create Features From Text File功能详解

1.Create Features From Text File工具介绍 Create Features From Text File工具是arcgis->arctoolbox工具箱中的工具,用于文本数据(txt格式数据)转成shapefile格式. 版本要求:arcgis9.2.arcgis9.3版本软件自带该工具.从10.0及以后,安装软件后不带改工具,其中10.0-10.2版本该工具实际上还在安装路劲下,但是10.3以后版本就没有该工具箱,可以从旧版本拷贝到新版本中使用. 2.Create

R语言中的 Vector, Array, List 和 Data Frame

1.Vector 所有的元素必须是同一类型. 例如下面的代码创建了2个vectors. name <- c("Mike", "Lucy", "John") age <- c(20, 25, 30) 2.Array & Matrix Matrix是一种特殊的vector.Maxtrix是一个拥有两个额外属性的vector:行数和列数. > x <- matrix(c(1,2,3,4), nrow=2, ncol=2)

【c语言】写一个宏定义,实现的功能是将一个int型的数的奇偶位互换

// 写一个宏定义,实现的功能是将一个int型的数的奇偶位互换,例如6的二进制为0110,第一位与第二位互换, // 第三位与第四位互换,得到1001,输出应该为9 #include <stdio.h> // 取出奇数位与偶数位,奇数位左移1位,偶数位一位,相加或者相或 #define EXCHANGE(num) (((0x55555555 & num) << 1) + ((0xaaaaaaaa & num) >> 1)) int main() { pr

oracle学习 五 使用存储过程创建一个重置密码为123456的功能(持续更新中)

首先写一个函数是MD5的方法 create FUNCTION GET_MD5 ( p_str in varchar2) RETURN varchar2 IS BEGIN RETURN Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(P_Str))); END; 然后在存储过程里面调用 create procedure proc_set_md5 as begin update T_USER_INFO se