ArcEngine 创建线要素图层

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

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

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

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

 Dim featureClassName As String = "图层名称" ‘临时图层名称
        Dim workspaceFactory As IWorkspaceFactory = New InMemoryWorkspaceFactory() ‘内存空间
        Dim WorkspaceName As IWorkspaceName = workspaceFactory.Create("", "MyWorkspace", Nothing, 0)
        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 = 1
            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 = 0
            fieldEdit.Editable_2 = True
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry
            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 = 0
            fieldEdit2.Editable_2 = True
            ‘添加到字段集中
            fieldsEdit.AddField(field2)
            fields = CType(fieldsEdit, IFields)
        End If
        Dim strShapeField As String = ""
        Dim j As Int32
        For j = 0 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)
时间: 2024-10-11 00:30:06

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

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

1.遇到的问题: 最近遇到在线要素(矢量数据)中,一条完整的道路.河流等往往是断开的,如下图1所示: 2.思路: 在ArcGIS Desktop中没有相关的工具可以将这些断开的线要素进行自动合并,今天自己写了一个Arcmap上的一个插件,实现当点击插件按钮后,对地图窗口中断开的线要素进行合并.合并的依据是具有相同NAME属性(如长沙-张家界高速)的Polyline要素进行合并,然后存储在另一个线要素图层中.  3.程序的实现和结果: 程序运行的结果如下,这样本来属于同一段道路的多个Polylin

线要素的节点提取

首先我并不清楚是不是还有比这种方法更好的方法,但是由于项目需要只能暂时使用这个了,而且感觉还不错. 上篇中提到已经将线要素在折点处断开,是为了在空间分析中数据更加合理,但归根到底我们最后需要检索并分析的是节点数据,也就是管道的接口或阀门.所以接下来的工作就是提取节点.我用的方法是对断开的(不断开也可以)线要素创建网络数据集,这也是之前先把数据存入数据库的原因. 创建网络数据集都知道要先创建地理数据库,然后要素集,最后将线要素导入到要素集中并在要素集下创建网络数据集,这样就会得到一个**_ND_J

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

有很多同学虽然成功做好了网络数据集,但是分析时会出现这样的问题: 这是为什么呢? 这有三个可能的原因: 1. 两个点之间所有的道路没有连通(问题出在点.线数据上). 2. 网络数据集出现了孤立的点位置. 3. 网络数据集的连通性有问题. 我就从这三个方面说说,如何避免这些问题.因为标题起的是点线要素的制作情况,我就着重讲第一点了,后两个情况简单说说,在第四章网络数据集的连通性会详细说. 1. 问题出在点线数据上 还分两个简单的情况: 一个是点不在线上: 另一个比较复杂:线之间二维没有由折点连通.

ArcEngine数据编辑--选择要素

转自原文ArcEngine数据编辑--选择要素 好久没有写博文了,这段时间相对空闲一点,把AE数据编辑实现总结下. 要编辑要素,首先要选中要素,按shift键进行多选,按esc键清空选择. 个人了解的选择高亮显示有两种方式,都是在public override void OnMouseDown(int Button, int Shift, int X, int Y)事件中处理实现: 1.  IFeatureSelection 这个要求明确选择的图层 IPoint pPoint = pActive

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

摘要 ArcGIS中,对于要素图层的渲染,支持按照要素字段的值渲染要素的大小,其中Graduated Symbols可以对大小进行分级渲染.在个人开发系统的过程中,也可以用来美化数据显示,加强表达.参考ArcMap中对于Graduated Symbols的实现,有助于理解和编写ArcGIS Engine的相关代码. 1.ArcMap中Graduated Symbols渲染的实现 首先,在左侧图层中找到要渲染的图层,右击打开图层属性(Properties),在上方选择样式(Symbology)选项

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

FeatureLayer(要素图层)是ArcGIS Server发布的一种很重要的地图服务,发布后使用提供的url地址就可以在代码中调用并在地图上显示.编辑这个FeatureLayer.在HTML页面中,点击FeatureLayer的要素,还可以弹出相应的popup对话框以显示FeatureLayer字段值的信息(在编写代码时需要设置).下面讲解用ArcMap发布FeatureLayer的过程. 一.使用SQL Server创建一个数据库 FeatureLayer中要素的字段信息保存在地理数据库

Dotspatial 创建面状图层

using DotSpatial.Controls;using DotSpatial.Data;using DotSpatial.Data.Forms;using DotSpatial.Plugins.Measure;using DotSpatial.Symbology;using DotSpatial.Topology;using DotSpatial.Topology.Algorithm;using Point = DotSpatial.Topology.Point;using PointS

ArcSDE:C#创建SDE要素数据集

转自原文 ArcSDE:C#创建SDE要素数据集 /// <summary> /// 判断指定数据集是否存在 /// </summary> /// <param name="workspace">工作空间名称</param> /// <param name="strDataSetName">数据集名称</param> /// <returns>存在,true:否则,false<

Arcpy处理修改shapefile FeatureClass 线要素坐标

需求:在开发的webgis系统中需要将道路矢量数据与谷歌地图瓦片叠加,谷歌地图瓦片在国家测绘局的要求是进行了偏移处理的,人称“火星坐标系GCJ_02”,道路数据是WGS-84坐标系下的经纬度坐标,现在知道WGS-84向GCJ_02转换的公式,需要对道路矢量数据进行坐标转换和偏移的批处理. 简要描述: 处理shapefile线要素,修改每个点的坐标. 参考资料: 1. 关于坐标转换计算: 在另一篇文章中有参考资料 http://www.cnblogs.com/beautifulplanet/p/4