转自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;
}
}
}

最新文章

  1. php如何妩媚地生成执行的sql语句
  2. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)
  3. 【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
  4. C++中一个函数隐藏的有趣例子
  5. Collections类方法详解
  6. Log4net 自定义字段到数据库
  7. 从svn下载项目后build path为灰色
  8. [置顶] 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
  9. maven的安装配置以及在IDEA中配置
  10. dubbo核心要点及下载(dubbo二)
  11. kubernetes in action - Overview
  12. 动态在线扩容root根分区大小的方法详解
  13. POJ 3162.Walking Race 树形dp 树的直径
  14. MySQL 非空约束位置不同对自增列造成的影响
  15. CISCO 动态路由(RIP)
  16. 语音笔记:CTC
  17. CentOS7下Docker中构建Jenkins容器
  18. HTTP API网关选择之一Kong介绍
  19. JavaScript 正则表达式 通俗解释 快速记忆
  20. ELK 日志管理系统,再次尝试记录

热门文章

  1. 【例题 8-1 UVA 120 】Stacks of Flapjacks
  2. Microsoft SQL Server Version List(SQL Server 版本)
  3. mysql 语句优化心得
  4. C# 实现Ajax的方式总结
  5. [Vue + TS] Write a Vue Component as a Class in TypeScript
  6. 三个水杯(BFS)
  7. python opencv —— io(帧、图像、视频的读取与保存)
  8. Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example(ScheduledThreadPoolExecutor例子——了解如何创建一个周期任务)
  9. 怎样用Adobe Acrobat 7 Pro把PDF文档拆分成多个啊?
  10. mangodb学习0.1 概念