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. [转]java开发环境搭建

    分成两个部分: 1.下载安装jdk,并配置环境变量 链接:http://www.runoob.com/java/java-environment-setup.html 2.安装Eclipse 链接:h ...

  2. axure制作圆形组件——axure制作技巧

    Axure本身是没有直接提供圆形组件的,所以很多朋友在微博上问,如何使用axure制作圆形,难道都要找美工-- Axure没有提供圆形组件,但是它提供了一个万能组件--矩形组件,只要有矩形组件,我们就 ...

  3. Windows Azure入门教学系列 (九):Windows Azure 诊断功能

    本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...

  4. DM6446开发攻略——u-boot-1.3.4移植(1)

    http://zjbintsystem.blog.51cto.com/964211/282387转载   UBOOT的版本更新速度比较快,截止今天,稳定正式的版本是u-boot-2009.11-rc2 ...

  5. Decoding BASE64 in ABAP

    Code Gallery Decoding BASE64 in ABAP Skip to end of metadata Created by Frank Klausner, last modifie ...

  6. Selenium WebDriver ie,chrome 驱动

    在驱动ie,chrome 的时候需要下载驱动 从网上下载IEDriverServer,Chromedriver 然后需要配置下就可以驱动ie,chrome 浏览器了 selenium 驱动ie 和 c ...

  7. Spinner的用法实现

    界面上只有一个textview和一个spinner,实现下拉列表框. spinner.xml: <?xml version="1.0" encoding="utf- ...

  8. CSS中float属性和clear属性的一些笔记

    在学习CSS的最后一部分内容中,float属性和clear属性比较难以用语言描述,因此在笔记本中无法准确的记录这两个属性的用法.所以在博客园上以图文的形式记录这两种属性的特征,以备以后查阅. 首先,定 ...

  9. javacsript (十) 数据类型

    类型声明的时候,直接使用 var  varname=xxx 数字.字符.布尔,声明都直接使用var就可以, JavaScript 数组 下面的代码创建名为 cars 的数组: var cars=new ...

  10. C#/IOS/Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...