在创建要素图层的时候,默认的几何类型是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. Python--day70--ORM一对一表结构

    ORM一对一表结构:

  2. HDU 2602Bone Collector 01背包问题

    题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值 思路:01背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...

  3. Spring Data JPA查询指定列,并返回实体(改)

    现有PostEntiy实力,包含各种属性,如: /** * @Auther: DingShuo * @Date: 2018/7/18 11:09 * @Description: */ @Entity ...

  4. SVN:符号

    问号:未纳入SVN控制之下的新文件感叹号:已经修改过还没上传的文件红叉:准备删除尚未提交绿勾:从服务器上取下来没修改过的文件黄色感叹号:发生冲突蓝色加号:准备加到服务器上还没提交

  5. linux清理函数

    每个非试验性的模块也要求有一个清理函数, 它注销接口, 在模块被去除之前返回所有资 源给系统. 这个函数定义为: static void   exit cleanup_function(void) { ...

  6. 2018-2-13-win10-UWP-ListView-模仿开始菜单

    title author date CreateTime categories win10 UWP ListView 模仿开始菜单 lindexi 2018-2-13 17:23:3 +0800 20 ...

  7. vue 项目使用局域网多端访问并实时自动更新(利用 browser-sync)

    在写vue的项目中时,虽然vue会自动更新页面,但是切换页面切来切去也很麻烦,有时候我们还要在公司另一台电脑或者手机上调试,这时候利用browser-sync插件,无需改动vue的代码即可实现: 1. ...

  8. Python中&、^与and、or

    导火索:给定两个列表,怎么找出他们相同的元素和不通的元素? list1 = [1, 2, 3, 4, 57, 8, 90] list2 = [2, 3, 4, 5, 6, 7, 8] lis = li ...

  9. Java零散记录

    接口不能被实例化,所以其成员变量必须为不可修改的,就是常量.

  10. 2019-6-23-win10-uwp-应用放到桌面

    title author date CreateTime categories win10 uwp 应用放到桌面 lindexi 2019-06-23 11:11:30 +0800 2019-06-2 ...