ArcEngine 创建线要素图层
在创建要素图层的时候,默认的几何类型是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 创建线要素图层的更多相关文章
- ArcEngine环境下合并断开的线要素(根据属性)
1.遇到的问题: 最近遇到在线要素(矢量数据)中,一条完整的道路.河流等往往是断开的,如下图1所示: 2.思路: 在ArcGIS Desktop中没有相关的工具可以将这些断开的线要素进行自动合并,今天 ...
- ArcEngine中合并断开的线要素(根据几何判断)
在上一篇ArcEngine环境下合并断开的线要素(根据属性)随笔中介绍了如何通过shp文件属性表中相同的属性字段进行线要素的合并.今天刚把通过几何条件判断的方式连接断开的线要素的ArcGIS 插件完成 ...
- C# ArcEngine创建内存图层(转载)
C#+Arcengine---创建内存图层 分类:技术文档 2009-12-11 14:43阅读(1498)评论(0) #region 在内存中创建图层 /// <summary& ...
- ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层
今年7月刚刚发布的ArcGIS 10.2为GIS的web开发带来了一个很实在的功能,JSON转要素.以往GIS图层外部数据(如文本数据,数据库数据)动态地写入地图服务中的图层是一件不可想象的事情,如今 ...
- 用IFeatureWorkspaceAnno.CreateAnnotationClass 创建注记图层时报“The application is not licensed to modify or create schema”的错误的解决方案。
用IFeatureWorkspaceAnno.CreateAnnotationClass 的方法创建注记图层的时候报"The application is not licensed to m ...
- ArcGIS 网络分析[1.4] 制作点线要素时需要注意的地方
有很多同学虽然成功做好了网络数据集,但是分析时会出现这样的问题: 这是为什么呢? 这有三个可能的原因: 1. 两个点之间所有的道路没有连通(问题出在点.线数据上). 2. 网络数据集出现了孤立的点位置 ...
- 在ArcMap中发布FeatureLayer(要素图层)
FeatureLayer(要素图层)是ArcGIS Server发布的一种很重要的地图服务,发布后使用提供的url地址就可以在代码中调用并在地图上显示.编辑这个FeatureLayer.在HTML页面 ...
- 转:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述
原文地址:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述 ArcGIS JavaScript API允许在地图上绘制graphic(图形) ...
- ArcGIS Desktop和Engine中对点要素图层Graduated Symbols渲染的实现 Rotation Symbol (转)
摘要 ArcGIS中,对于要素图层的渲染,支持按照要素字段的值渲染要素的大小,其中Graduated Symbols可以对大小进行分级渲染.在个人开发系统的过程中,也可以用来美化数据显 ...
随机推荐
- 下推栈实现(c++编程思想 p136)
1 头文件Stack.h #ifndef STACK_H #define STACK_H struct Stack { struct Link { void* data; Link* next; vo ...
- multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
情景再现: 上传文件到.net(wcf)后台时,总是上传不成功,后台要求Content-Type是application/octet-stream,我使用multipart/form-data方式,c ...
- Java动态编译优化——提升编译速度(N倍)
一.前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译.并且编译速度是原来的2-3倍.原本打算直接用这个 ...
- indexdb开cai发keng实zhi践lu
一直在维护一个用html2canvas截图转base64保存的项目,先不说html2canvas不同版本的不同坑的问题,就说转出来的这个base64字符长度实在太大了,尤其是遇到设计出图高度达到3千多 ...
- 关于MySQL中查询大数据量的情况下分页limit的性能优化
https://blog.csdn.net/weixin_37848710/article/details/80772725
- 使用BFD检测EBGP邻居
在广域网BGP环境中,通常使能BFD以快速实现链路故障后的路由的主动收敛. BFD使用UDP在链路上进行双向检测,BFD有Echo mode和asynchronous mode两种模式,默认为Echo ...
- Excel数据处理
合并计算: 数据面板下的合并计算 然后设置好合并计算的区域 以及勾选 首行跟最左列
- javaweb项目部署到tomcat之后java文件没有编译
1.选中你的项目==>选择Project 2.将Build Automatcally前的对号去掉后再Clean一下你的项目 这样就可以了,
- PAC 代理自动发现简介
一 简介 1.1 什么是PAC文件 代理自动配置(PAC)文件包含一组用javaScript编码的规则,允许web浏览器确定是将Web流量直接发送到Internet还是通过代理服务器发送 ...
- windows10 powershell上切换至cmd
前言 在windows10 上是遇到了坑,因为出现了这样的情况!不要说什么盗版,公司买的正版呢. 上图是powershell,下图是 cmd,然后我同样使用powershell 与 cmd,查询nod ...