在创建要素图层的时候,默认的几何类型是Polygon:

Dim objectClassDescription As IObjectClassDescription = New FeatureClassDescription
Dim fields2 As Fields = objectClassDescription.RequiredFields

代码来源:http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//0049000000pz000000

上面代码的fields2包含2个字段,一个OBJECTID字段和一个SHAPE字段,而SHAPE字段决定了要素的几何类型(GeometryType),这个是环境自己生成,他的几何类型是Polygon。

如果想生成其他的几何类型的要素图层就要自己手动创建这两个字段,并在SHAPE添加几何类型的信息,下面图层的要素类型为Polyline。如下代码(VB)所示:

 Dim featureClassName As String = "图层名称" '临时图层名称
Dim workspaceFactory As IWorkspaceFactory = New InMemoryWorkspaceFactory() '内存空间
Dim WorkspaceName As IWorkspaceName = workspaceFactory.Create("", "MyWorkspace", Nothing, )
Dim name As IName = WorkspaceName
Dim workspace As IWorkspace = name.Open()
Dim featureWorkspace As IFeatureWorkspace = workspace 'Dim workspace2 As IWorkspace2 = workspace
Dim fields As IFields = Nothing
Dim CLSID As ESRI.ArcGIS.esriSystem.UID = Nothing
Dim CLSEXT As ESRI.ArcGIS.esriSystem.UID = Nothing
Dim strConfigKeyword As String = ""
Dim featureClass As IFeatureClass
' 赋值类ID如果未分配
If CLSID Is Nothing Then
CLSID = New ESRI.ArcGIS.esriSystem.UID
CLSID.Value = "esriGeoDatabase.Feature"
End If
'环境默认生成的两个字段,字段的几何类型为Polygon,决定了要素图层的集合类型
'Dim objectClassDescription As IObjectClassDescription = New FeatureClassDescription
'Dim fields2 As Fields = objectClassDescription.RequiredFields
If fields Is Nothing Then
' 创建要素几何信息
Dim pGeometryDef As IGeometryDef = New GeometryDef() ' 为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照
Dim pGeometryDefEdit As IGeometryDefEdit = pGeometryDef
pGeometryDefEdit.GridCount_2 =
pGeometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline '决定要素图层的几何类型
pGeometryDefEdit.SpatialReference_2 = pMap.SpatialReference '必须设置图层的空间参考系 fields = New Fields
Dim fieldsEdit As IFieldsEdit = CType(fields, IFieldsEdit)
'自己创建OBJECTID字段
Dim fieldOID As IField = New Field()
Dim fieldEditOID As IFieldEdit = CType(fieldOID, IFieldEdit)
fieldEditOID.Name_2 = "OBJECTID"
fieldEditOID.AliasName_2 = "OBJECTID"
fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID
fieldEditOID.Editable_2 = False
fieldsEdit.AddField(fieldOID) '自己创建几何字段,
Dim fieldShape As IField = New Field()
Dim fieldEditShape As IFieldEdit = CType(fieldShape, IFieldEdit)
fieldEditShape.Name_2 = "SHAPE"
fieldEditShape.AliasName_2 = "SHAPE"
fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry
fieldEditShape.GeometryDef_2 = pGeometryDef
fieldEditShape.Editable_2 = True
fieldsEdit.AddField(fieldShape) Dim field As IField = New Field
Dim fieldEdit As IFieldEdit = CType(field, IFieldEdit) ' 显示转换
' 设置字段属性
fieldEdit.Name_2 = "RISK"
fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble
fieldEdit.IsNullable_2 = False
fieldEdit.AliasName_2 = "RISK"
fieldEdit.DefaultValue_2 =
fieldEdit.Editable_2 = True
fieldsEdit.AddField(field)
Dim field2 As IField = New Field
Dim fieldEdit2 As IFieldEdit = CType(field2, IFieldEdit) ' 显示转换
' 设置字段属性
fieldEdit2.Name_2 = "管线ObjId"
fieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger
fieldEdit2.IsNullable_2 = False
fieldEdit2.AliasName_2 = "管线ObjId"
fieldEdit2.DefaultValue_2 =
fieldEdit2.Editable_2 = True
'添加到字段集中
fieldsEdit.AddField(field2)
fields = CType(fieldsEdit, IFields)
End If
Dim strShapeField As String = ""
Dim j As Int32
For j = To fields.FieldCount
If fields.Field(j).Type = esriFieldType.esriFieldTypeGeometry Then
strShapeField = fields.Field(j).Name
'fields.Field(j).GeometryDef.GeometryType = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline
Exit For
End If
Next j
Dim fieldChecker As IFieldChecker = New FieldChecker
Dim enumFieldError As IEnumFieldError = Nothing
Dim validatedFields As IFields = Nothing
fieldChecker.ValidateWorkspace = workspace
fieldChecker.Validate(fields, enumFieldError, validatedFields)
featureClass = featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword)

C#

/// <summary>
/// 创建点要素图层,内存图层
/// </summary>
/// <param name="featureClassName">图层名称</param>
/// <returns>要素图层</returns>
private IFeatureClass CreateFeatureClass(string featureClassName)
{
IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactory();//内存空间
IWorkspaceName WorkspaceName = workspaceFactory.Create("", "MyWorkspace", null, );
IName name = WorkspaceName as IName;
IWorkspace workspace = name.Open();
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFields fields=null;
ESRI.ArcGIS.esriSystem.UID CLSID= null;
ESRI.ArcGIS.esriSystem.UID CLSEXT=null;
String strConfigKeyword = "";
IFeatureClass featureClass;
//赋值类ID如果未分配
if( CLSID==null){
CLSID = new ESRI.ArcGIS.esriSystem.UID();
CLSID.Value = "esriGeoDatabase.Feature";
}
//环境默认生成的两个字段,字段的几何类型为Polygon,决定了要素图层的集合类型
//Dim objectClassDescription As IObjectClassDescription = New FeatureClassDescription
//Dim fields2 As Fields = objectClassDescription.RequiredFields
if( fields==null)
{
//创建要素几何信息
IGeometryDef pGeometryDef = new GeometryDef();//为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照
IGeometryDefEdit pGeometryDefEdit=pGeometryDef as IGeometryDefEdit;
pGeometryDefEdit.GridCount_2 = ;
pGeometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint; //决定要素图层的几何类型
pGeometryDefEdit.SpatialReference_2 = axSceneControl1.Scene.SpatialReference;//必须设置图层的空间参考系
fields = new Fields();
IFieldsEdit fieldsEdit =fields as IFieldsEdit;
//自己创建OBJECTID字段
IField fieldOID = new Field();
IFieldEdit fieldEditOID =fieldOID as IFieldEdit;
fieldEditOID.Name_2 = "OBJECTID";
fieldEditOID.AliasName_2 = "OBJECTID";
fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
fieldEditOID.Editable_2 = false;
fieldsEdit.AddField(fieldOID); //自己创建几何字段,
IField fieldShape = new Field();
IFieldEdit fieldEditShape = fieldShape as IFieldEdit;
fieldEditShape.Name_2 = "SHAPE";
fieldEditShape.AliasName_2 = "SHAPE";
fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;
fieldEditShape.GeometryDef_2 = pGeometryDef;
fieldEditShape.Editable_2 = true;
fieldsEdit.AddField(fieldShape); IField field = new Field();
IFieldEdit fieldEdit =field as IFieldEdit;// 显示转换
//设置字段属性
fieldEdit.Name_2 = "RISK";
fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit.IsNullable_2 = false;
fieldEdit.AliasName_2 = "RISK";
fieldEdit.DefaultValue_2 = ;
fieldEdit.Editable_2 = true;
fieldsEdit.AddField(field);
IField field2 = new Field();
IFieldEdit fieldEdit2=field2 as IFieldEdit; // 显示转换
//设置字段属性
fieldEdit2.Name_2 = "管线ObjId";
fieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger;
fieldEdit2.IsNullable_2 = false;
fieldEdit2.AliasName_2 = "管线ObjId";
fieldEdit2.DefaultValue_2 = ;
fieldEdit2.Editable_2 = true;
//添加到字段集中
fieldsEdit.AddField(field2);
fields =fieldsEdit as IFields;
}
String strShapeField = "";
for (int j = ; j < fields.FieldCount; j++)
{
if(fields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)
{
strShapeField =fields.get_Field(j).Name;
}
}
IFieldChecker fieldChecker =new FieldChecker();
IEnumFieldError enumFieldError =null;
IFields validatedFields =null;
fieldChecker.ValidateWorkspace = workspace;
fieldChecker.Validate(fields,out enumFieldError, out validatedFields);
featureClass = featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword)
return featureClass;
}

打开内存空间(C#)

 IRasterLayer pRasterLayer = new RasterLayerClass();
IWorkspaceFactory workspaceFactory2 = new InMemoryWorkspaceFactory();
IRasterWorkspace2 workspace = (IRasterWorkspace2)workspaceFactory2.OpenFromFile("MyWorkspace", );

PS:不同线程不能打开同一个工作空间。

ArcEngine 创建线要素图层的更多相关文章

  1. ArcEngine环境下合并断开的线要素(根据属性)

    1.遇到的问题: 最近遇到在线要素(矢量数据)中,一条完整的道路.河流等往往是断开的,如下图1所示: 2.思路: 在ArcGIS Desktop中没有相关的工具可以将这些断开的线要素进行自动合并,今天 ...

  2. ArcEngine中合并断开的线要素(根据几何判断)

    在上一篇ArcEngine环境下合并断开的线要素(根据属性)随笔中介绍了如何通过shp文件属性表中相同的属性字段进行线要素的合并.今天刚把通过几何条件判断的方式连接断开的线要素的ArcGIS 插件完成 ...

  3. C# ArcEngine创建内存图层(转载)

    C#+Arcengine---创建内存图层 分类:技术文档 2009-12-11 14:43阅读(1498)评论(0) #region 在内存中创建图层        /// <summary& ...

  4. ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层

    今年7月刚刚发布的ArcGIS 10.2为GIS的web开发带来了一个很实在的功能,JSON转要素.以往GIS图层外部数据(如文本数据,数据库数据)动态地写入地图服务中的图层是一件不可想象的事情,如今 ...

  5. 用IFeatureWorkspaceAnno.CreateAnnotationClass 创建注记图层时报“The application is not licensed to modify or create schema”的错误的解决方案。

    用IFeatureWorkspaceAnno.CreateAnnotationClass 的方法创建注记图层的时候报"The application is not licensed to m ...

  6. ArcGIS 网络分析[1.4] 制作点线要素时需要注意的地方

    有很多同学虽然成功做好了网络数据集,但是分析时会出现这样的问题: 这是为什么呢? 这有三个可能的原因: 1. 两个点之间所有的道路没有连通(问题出在点.线数据上). 2. 网络数据集出现了孤立的点位置 ...

  7. 在ArcMap中发布FeatureLayer(要素图层)

    FeatureLayer(要素图层)是ArcGIS Server发布的一种很重要的地图服务,发布后使用提供的url地址就可以在代码中调用并在地图上显示.编辑这个FeatureLayer.在HTML页面 ...

  8. 转:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述

    原文地址:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述 ArcGIS JavaScript API允许在地图上绘制graphic(图形) ...

  9. ArcGIS Desktop和Engine中对点要素图层Graduated Symbols渲染的实现 Rotation Symbol (转)

    摘要         ArcGIS中,对于要素图层的渲染,支持按照要素字段的值渲染要素的大小,其中Graduated Symbols可以对大小进行分级渲染.在个人开发系统的过程中,也可以用来美化数据显 ...

随机推荐

  1. H3C 局域网与OSI参考模型

  2. [Err] 1062 - Duplicate entry '0' for key 'PRIMARY'

    问题描述: sql语句执行的时候,插入语句无法正确执行 问题原因: 主键 重复 出现 0 解决方案: 将主键设置为自增 然而,设置自增后还是可能会出现下面的问题 #1062 – Duplicate e ...

  3. 数据存储在哪里? Java是值传递还是引用传递?

    寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,java不能控制寄存器,所以在程序中感觉不到它的存在 栈(stack) : 位于RAM(内存)中,速度仅次于寄存器,存储对象的引用( ...

  4. Python--day70--ORM一对一表结构

    ORM一对一表结构:

  5. Activiti学习之spring boot 与activiti整合

    声明:本文是springboot2.0的多项目构建,springboot2.0和spingboot1.5的配置是有出入的,构建项目之前请规范您的springboot版本,选择2.0以上. 一.在IDE ...

  6. Codeforces Round #177 (Div. 1 + Div. 2)

    A. Polo the Penguin and Segments 模拟. B. Polo the Penguin and Matrix 每个数字模d余数必须一样. 枚举结果,可计算操作次数,取最小. ...

  7. 2018-8-10-git-提交添加-emoij-文字

    title author date CreateTime categories git 提交添加 emoij 文字 lindexi 2018-08-10 19:16:52 +0800 2018-2-1 ...

  8. codeforce 382 div2 E —— 树状dp

    题意:给一棵n个结点的无根树染色,求使每个结点距离为k的范围内至少有一个被染色的结点的总染色方法数目 分析:首先我们定义: 对于结点v, 如果存在一个黑色结点u距离v不超过k,则结点v被“控制” 首先 ...

  9. UVa 1354 Mobile Computing[暴力枚举]

    **1354 Mobile Computing** There is a mysterious planet called Yaen, whose space is 2-dimensional. Th ...

  10. H3C DHCP服务器可选配置