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功能。
C#语言实现ArcGIS数据源重置之Set Data Source功能的更多相关文章
- 数据源(Data Source
数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体.在数据源中存储了所有建立数据库连接的信息.就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数 ...
- ArcGIS API for Silverlight实现地图测距功能
原文:ArcGIS API for Silverlight实现地图测距功能 问题:如何实现地图测距功能? 地图工具栏 <Grid x:Name="gToolMenu" Hei ...
- Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能
reference:Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能 在python中,无法通过input ...
- 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 ...
- datatbales的数据源类型(Data source types)
数据是复杂的,并且所有的数据是不一样的.因此 DataTables 中有很多的选项可用于配置如何获得表中的数据显示,以及如何处理这些复杂的数据. 本节将讨论 DataTables 处理数据的三个核心概 ...
- 黄聪:让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)
如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包. 让Wor ...
- 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 ...
- R语言基因组数据分析可能会用到的data.table函数整理
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部 ...
- ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)
下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整 ...
随机推荐
- 网页内容的html标签补全和过滤的两种方法
网页内容的html标签补全和过滤的两种方法: 假设你的网页内容的html标签显示不全,有些表格标签不完整而导致页面混乱,或者把你的内容之外的局部html页面给包括进去了,我们能够写个函数方法来补全ht ...
- asp.net2.0安全性(2)--用户个性化设置(2)--转载来自车老师
上一篇我们用Profile.age等方式可以读取用户的年龄和其它的信息,但有的时候我们要查询显示所有用户的信息,但asp.net没有提供查询所有用户信息的功能,我们只能对现有的用户逐一查询其Profi ...
- ASP.NET - 使用MqSql数据库
1. 首先需要安装mysql, 脚本之家下载地址: http://www.jb51.net/softs/2193.html 或者去mysql.com官网都可以,一路next,安装好后,有个简单配置,提 ...
- css盒模型和块级、行内元素深入理解
盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互.页面上的每个元素都被看成一个矩形框,这个框由元素的内容.内边距.边框和外边距组成,需要了解的朋友可以深入参考下 一.CSS盒模型 盒 ...
- Swift - 一步步教你使用SpriteKit创建开发游戏项目
一,什么是SpriteKit SpriteKit是苹果公司官方出品,用于制作2D游戏的框架.这个框架具备了图形渲染和动画的功能.可以使图像或者精灵(sprite)动 起来.SpriteKit的渲染方式 ...
- Python pip 安装包
Python 第三方包可以使用pip 更容易地安装,和管理 pip 的下载地址 https://pypi.python.org/pypi/pip/ pip的使用以及相关文档参考 https://pip ...
- Spring拦截器中通过request获取到该请求对应Controller中的method对象
背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...
- An example usage of an encryption algorithm (AES, in this case) is:
pycrypto 2.6.1 : Python Package Index An example usage of an encryption algorithm (AES, in this case ...
- Android剪切板(ClipboardManager) 复制文本
Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前: android.text.ClipboardManagerAPI 11之后: android.c ...
- 一句话解释JVM中空间分配担保的问题
先解释YGC: 当对象生成在EDEN区失败时,出发一次YGC,先扫描EDEN区中的存活对象,进入S0区,S0放不下的进入OLD区,再扫描S1区,若存活次数超过阀值则进入OLD区,其它进入S0区,然后S ...