如何使用Name对象,包括WorkspaceNames和DatasetNames
转自chanyinhelv原文 如何使用Name对象,包括WorkspaceNames和DatasetNames
该博主还有很多有关arcgis二次开发的不错的文章。
如何使用Name对象,包括WorkspaceNames和DatasetNames
一、Name对象
Name对象是一个代表性对象。通过使用Name对象,可以访问它所代表的对象的一些基本属性,而不用将整个对象调入内存,如果需要用到Name对象所代表的对象本身,可以通过Name来获取它。
Name对象可以应用于Tables,FeatureClasses和Workspaces。
Name:
1、WorkspaceName
2、DatasetName
1>RelationshipClassName
2>FeatureDatasetName
3>RasterDatasetName
4>TinName
5>TableName
△--FeatureClassName
使用Name对象最重要的一点是通过Name来获取所代表的对象,要访问Name子类里的任何对象,使用IName接口的Open方法。
示例:查找某个数据集并打开它
使用Name对象最重要的一点是通过Name来获取所代表的对象,要访问Name子类里的任何对象,使用IName接口的Open方法。
示例:查找某个数据集并打开它
public void OpenCities()
{
IWorkspaceFactory pWSFactory;
IWorkspace pWS;
IEnumDatasetName pEnumDSNames;
IDatasetName pDSName;
IFeatureClass pCities; pWSFactory = new ShapefileWorkspaceFactoryClass();
pWS = pWSFactory.OpenFromFile("C:\\Data\\Africa", );
pEnumDSNames = pWS.DatasetNames(esriDatasetType.esriDTFeatureClass);//feature class
pDSName = pEnumDSNames.Next();
while (pDSName != null)
{
if (pDSName.Name == "AfricanCities")
{
IName pName = pDSName as IName;
pCities = pName.Open() as IFeatureClass;
return;
}
pDSName = pEnumDSNames.Next();
}
二、使用DataSetNames
Name对象的一个常用用法是用来在磁盘中新建数据集时指定名字。例如,在数据转换过程中的输入输出参数中,使用DatasetName对象即可,而不必用dataset对象。DatasetName的所有子类都是可以用New关键字新建的CoClass,一旦创建好就可以设置Name属性来代表数据集。
示例:在C:\Data下创建一个新表PositianFroys.dbf。
IWorkspaceFactory pShapeWSFactory;
IWorkspaceName pWorkName;
IDatasetName pTableName;
pShapeWSFactory = new ShapefileWorkspaceFactoryClass();
pWorkName = pShapeWSFactory.Create("C:\\", "Data", null, 0);
pTableName = new TableNameClass();
pTableName.WorkspaceName = pWorkName;
pTable.Name = "PositianFroys.dbf";
三、数据的转换、输出和装载
FeatureDataConverter是一个能将要素类、要素集或表转换成其它数据集的CoClass,它不仅可以转换单个的要素类或表,也可以转换整个数据集(如ArcInfo
Coverage)。FeatureDataConverter对象能够使数据在geodatabase,shapefile和coverages之间转换支持大多数的数据类型(除了标注)。在把数据引入geodatabase时,可以指定数据的区别;对ArcSDE
Geodatabase还可以通过配置ArcSDE的某些关键字来指定存储参数。
ExportOperation是一个用于输出要素类或表的CoClass。它提供的功能与要素数据转换器大体相似,但是形式更简单。在ArcMap的目录表中右击一个图层时就是调用了这个数据输出函数。
ObjectLoader用于向表(或要素类)中追加一个表(或要素类)。IObjectLoader只包含一个方法--LoadObjects。
四、验证字段和记录
FieldChecker对象可以用来验证一个字段集,这对于在不同格式间转换数据时很有用,因为不同格式的数据集字段名可能不通用。FieldChecker遇到非法字段名时能够根据一定的标准(如加底线UID)来纠正错误从而产生一个合法的字段集。在把数据转换成Geodatabase格式时,FieldChecker将为Geometry字段和OID字段生成标准的名字(Shape和OBJECTID)。
在用ObjectLoader或FeatureDataConverter装载或者转换要素时,非法对象将以枚举的形式被返回(IEnumInvalidObject),通过查看这个枚举,很容易知道哪些对象不能被装载或转换。
五、使用Feature Data Converter
IFeatureDataConverter接口有3个方法用于转换数据:
1、ConvertFeatureClass
2、ConvertFeatureDataset
3、ConvertTable
public IEnumInvalidObject ConvertFeatureClass (
IFeatureClassName InputDatasetName,
IQueryFilter InputQueryFilter,
IFeatureDatasetName outputFDatasetName,
IFeatureClassName outputFClassName,
IGeometryDef OutputGeometryDef,
IFields OutputFields,
string configKey,
int FlushInterval,
int parentHWND
);
InputDatasetName--IFeatureClassName用于指定转换的要素类的一个Name对象;
InputQueryFilter--IQueryFilter用于过滤要转换的要素的QueryFilter对象;
outputFDatasetName--IFeatureDatasetName要素类输出的新数据集成现存数据集的Name对象;
outputFClassName--IFeatureClassName新输出的要素类的Name对象;
OutputGeometryDef--用于指定输出要素类的空间参考信息的GeometryDef对象。如果知道为null就使用输出的要素集成输入的要素类的空间参考信息。
OutputFields--IFields用于指定输出要素类的字段集。如果把要素类简单的输出为同样的格式,可以使用输入的要素类的字段集。如果格式有变化,建议使用FieldChecker以确保输出的格式有效;
configKey--string用于指定ArcSDE配置关键字的字符串;
FlushInterval--在输出到Geodatabase时用于指定把要素转换到新的要素类时的区间整数值;
parentHWND--指定应用程序的窗口句柄;
示例://IFeatureDataConverter ConvertFeatureClass Example(From .NET Help)
// e.g., nameOfSourceFeatureClass = "ctgFeatureshp.shp"
// nameOfTargetFeatureClass = "ctgFeature"
public void IFeatureDataConverter_ConvertFeatureClass_Example(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass)
{
//create source workspace name
IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;
IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create source dataset name
IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
sourceDatasetName.WorkspaceName = sourceWorkspaceName;
sourceDatasetName.Name = nameOfSourceFeatureClass; //create target workspace name
IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //create target dataset name
IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
targetDatasetName.WorkspaceName = targetWorkspaceName;
targetDatasetName.Name = nameOfTargetFeatureClass; //Open input Featureclass to get field definitions.
ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); //Validate the field names because you are converting between different workspace types.
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields targetFeatureClassFields;
IFields sourceFeatureClassFields = sourceFeatureClass.Fields;
IEnumFieldError enumFieldError; // Most importantly set the input and validate workspaces!
fieldChecker.InputWorkspace = sourceWorkspace;
fieldChecker.ValidateWorkspace = targetWorkspace;
fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); // Loop through the output fields to find the geomerty field
IField geometryField;
for (int i = ; i < targetFeatureClassFields.FieldCount; i++)
{
if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
geometryField = targetFeatureClassFields.get_Field(i);
// Get the geometry field's geometry defenition
IGeometryDef geometryDef = geometryField.GeometryDef; //Give the geometry definition a spatial index grid count and grid size
IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = ;
targetFCGeoDefEdit.set_GridSize(, ); //Allow ArcGIS to determine a valid grid size for the data loaded
targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; // we want to convert all of the features
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = ""; // Load the feature class
IFeatureDataConverter fctofc = new FeatureDataConverterClass();
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", , );
break;
}
}
}
如何使用Name对象,包括WorkspaceNames和DatasetNames的更多相关文章
- Java中Json字符串直接转换为对象(包括多层List集合)
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
- 深入Java虚拟机--判断对象存活状态
程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...
- Oracle学习笔记九 数据库对象
Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表. 其他数据库对象包括:
- C++ 类对象和 指针的区别
C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...
- JVM中对象的销毁
1.可达性分析算法: 可达性分析算法用来寻找将要销毁的对象,它的基本思路是:通过一系列的称为“GC ROOTs”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC ...
- javascript中15种原生对象类型系统综述
前面的话 在编程语言中,能够表示并操作的值的类型称做数据类型,编程语言最基本的特性就是能够支持多种数据类型.javascript拥有强大的类型系统,主要包括原生对象.宿主对象和浏览器拓展对象,本文主要 ...
- java中的对象,类。与 方法的重载。
对象: 一切皆为对象.对象包括两部分内容:属性(名词形容词),行为(动词).对象和对象之间是有关系的: 派生,关联,依赖. 类: 对同一类别的众多对象的一种抽象.类,还是用来生成对象的一种模板,对象是 ...
- 手动获取spring的ApplicationContext和bean对象
WEB项目: 方法1: 1 ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(S ...
- python基础之面对对象
Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触 ...
随机推荐
- android通用JSON解析
ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word&qu ...
- 《从零開始学Swift》学习笔记(Day 59)——代码排版
原创文章,欢迎转载.转载请注明:关东升的博客 代码排版包括: 空行.空格.断行和缩进等内容.代码排版内容比較多工作量非常多.可是非常重要. 空行 空行将逻辑相关的代码段分隔开.以提高可读性. 下列情况 ...
- gerrit-申请id跟本地配置
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放.分散.自由等特性. 什么是gerrit? 看 了网上的介绍,感觉所谓的gerrit就是一个基于web实现代码管理的服务器.Gerrit ...
- GitHub上常用命令(工作中几乎每天用到的命令)
查看自己当前分支 git branch 查看远程和本地分支 git branch -a 查看origin下的分支 git config -vv git config --lis 创建分支 git br ...
- 洛谷——P1035 级数求和
https://www.luogu.org/problem/show?pid=1035 题目描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. ...
- 标准模板库 STL 使用之 —— vector 使用 tricks
1. 从已有 vector(或数组)中复制 vector<int> a{....}; int an = a.size(); int half = an/2; vector<int&g ...
- 重新启动IIS不重启电脑
有时候我们在WEB程序如:ASP,中无意中使用到了一个死循环,或者在测试 DLL组件时,挂了.这时候IIS就停止了响应,我们要继续我们的工作啊,重启IIS服务吧. 然而这个进程还在执行,Inter ...
- Windows 7 下快速挂载和分离VHD文件的小脚本
1.保存以下代码为VDM.vbs,放在Windows\system32下 Dim ArgsSet Args = WScript.ArgumentsTranArgs = " "For ...
- .netcore下的微服务、容器、运维、自动化发布
原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1 基本概念 1.1.1 什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...
- 【codeforces 434 div 1 A】Did you mean...
[链接]h在这里写链接 [题意] 让你维护一段序列. 这段序列,不会出现连续3个以上的辅音. (或者一块全是辅音则也可以) (用空格可以断开连续次数); 要求空格最小. [题解] 模拟着,别让它出现连 ...