如何使用Name对象,包括WorkspaceNames和DatasetNames

转自chanyinhelv原文 如何使用Name对象,包括WorkspaceNames和DatasetNames

第一原文链接

该博主还有很多有关arcgis二次开发的不错的文章。

一、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", 0);
    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 = 0; 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 = 1;
            targetFCGeoDefEdit.set_GridSize(0, 0); //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, "", 1000, 0);
            break;
        }
    }
}
时间: 2024-10-12 22:04:31

如何使用Name对象,包括WorkspaceNames和DatasetNames的相关文章

获取数据库连接对象(包括线程)

/** * 负责数据库连接定义的程序类 * 该类可以负责所有操作线程的数据库连接,利用get()方法可以获得连接对象 */ public class DatabaseConnection { private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; private static final String DBURL = "jdbc:oracle:thin:@localhost:1521

Java中Json字符串直接转换为对象(包括多层List集合)

http://blog.csdn.net/catoop/article/details/42744705 使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-beanutils.jar,commons-httpclient.jar,commons-lang.jar,ezmorph.jar,morph-1.0.1.jar 下面是例子代码: [java] 

javascript对象

1.什么是表单对象 表单(<form>)是Web页面中的基本元素.表单对象最主要的功能就是能够直接访问页面中的表单.利用表单对象,可以实现与用户的交互:不需要服务器的介入,就可以实现动态改变Web页面的行为.对于Web页面表单,通常使用document对象的forms数组可以很方便地访问不同的表单.例如,某HTML文件片段如下: <form name="form1"> <input type="text"> <input t

Java虚拟机:如何判定哪些对象可回收?

版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在堆内存中存放着Java程序中几乎所有的对象实例,堆内存的容量是有限的,Java虚拟机会对堆内存进行管理,回收已经"死去"的对象(即不可能再被任何途径使用的对象),释放内存.垃圾收集器在对堆内存进行回收前,首先要做的第一件事就是确定这些对象中哪些还存活着,哪些已经死去.Java虚拟机是如何判断对象是否可以被回收的呢? 引用计数算法        引用计数算法的原理是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

Oracle事务和常用数据对象

防伪码:一寸光阴一寸金 前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务.索引.视图等.那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化. 一.事务 1.简介 事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败.DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突. 1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存所有的更改的数据. 2)显示回滚

javascript中15种原生对象类型系统综述

前面的话 在编程语言中,能够表示并操作的值的类型称做数据类型,编程语言最基本的特性就是能够支持多种数据类型.javascript拥有强大的类型系统,主要包括原生对象.宿主对象和浏览器拓展对象,本文主要介绍15种原生对象类型系统 原生对象(15种) 原生对象分为两类:原始类型(primitive type)和对象类型(object type).原始类型又分为两类,一类是空值,一类是包装对象:对象类型也可以分为两类:一类是构造器对象,一类是单体内置对象 空值(2种) 与其他语言不同,javascri

javascript面向对象系列1——理解对象

[对象定义]无序属性的集合,其属性可以包含基本值.对象或者函数 //简单的对象实例 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name); } [内部属性类型]内部属性无法直接访问,ECMAScript5把它们放在两对方括号

[Java Concurrency in Practice]第三章 对象的共享

对象的共享 第二章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据,而第三章则介绍如何共享和发布对象,从而使它们能够安全地由多个线程同时访问.这两章合在一起就形成了构建线程安全类以及通过java.util.concurrent类库来构建并发应用程序的重要基础. synchronized不仅仅只有原子性,还具有内存可见性.我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化.如果没有同步,那么这种情况就