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)、ActiveViewAddLayerAddLayerFromFileCenterAt(用于定位)、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功能。

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

  1. 数据源(Data Source

    数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体.在数据源中存储了所有建立数据库连接的信息.就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数 ...

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

    原文:ArcGIS API for Silverlight实现地图测距功能 问题:如何实现地图测距功能? 地图工具栏 <Grid x:Name="gToolMenu" Hei ...

  3. Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能

    reference:Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能 在python中,无法通过input ...

  4. Filter Lookup Editor Data Source 筛选器查找编辑器数据源

    In this lesson, you will learn how to filter the data displayed by a lookup editor. This editor is s ...

  5. datatbales的数据源类型(Data source types)

    数据是复杂的,并且所有的数据是不一样的.因此 DataTables 中有很多的选项可用于配置如何获得表中的数据显示,以及如何处理这些复杂的数据. 本节将讨论 DataTables 处理数据的三个核心概 ...

  6. 黄聪:让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)

    如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包. 让Wor ...

  7. ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)

    转自:http://www.cnblogs.com/hll2008/archive/2008/11/22/1338630.html 目的:1.ArcGIS API for JavaScript实现To ...

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

    R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部 ...

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

    下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整 ...

随机推荐

  1. SxsTrace工具用法

    Windows7平台上有一个强大的SxsTrace工具,能够跟踪调试应用程序执行时须要的动态库的版本号和路径. SxsTrace使用的方法: 1.首先必须以Administrator用户身份登录,打开 ...

  2. CSU1664: 防水堤坝

    Description 在太平洋的一个小岛上,岛民想要建立一个环岛的堤坝,我们能够将小岛简化为一个二维平面,你须要使用K条边(这些边要么是水平或者垂直长度为1的边,要么是45度倾斜的长度为√2的边)围 ...

  3. hdu1087Super Jumping! Jumping! Jumping!(最大递增序列和)

    题意:棋牌游戏如今,一种被称为“超级跳!跳!跳!“HDU是非常流行的.也许你是个好孩子,这个游戏知之甚少,所以我介绍给你吧. 可以玩游戏由两个或两个以上的球员 .它由一个棋盘(棋盘)和一些棋子(棋子) ...

  4. JavaScript编程:使用DOM操作样式表

    6.使用DOM操作样式表: 操纵元素的Style样式属性:         background-color:style.backgroundColor         color:style.col ...

  5. Python Base64转码解码

    Python Base64 提供了好几种方法例如: encode, decode, encodestring, decodestring, b64encode, b64decode, standard ...

  6. 管道是如何处理HTTP请求的?

    管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...

  7. Android学习笔记(十三)——碎片(一)

    碎片 碎片可看作第二种形式的活动,能够创建碎片来包括视图. 碎片总是嵌入在活动中,一般有两种常见形式: 1.碎片A和碎片B分别处于不同的活动中,当选择碎片A中的某一项时,触发碎片B启动: 2.碎片A和 ...

  8. Nginx设置alias实现虚拟目录 alias与root的用法区别

    Nginx 貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的.如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较"像",干脆来说说alias ...

  9. MFC消息映射的原理:笔记

    多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...

  10. c++ try throw catch

    c++ try throw catch 这三者联合使用 , try { statement list; } catch( typeA arg ) { statement list; } catch( ...