永发信息网

如何将选中的点集转换成Polygon

答案:2  悬赏:20  手机版
解决时间 2021-02-14 05:29
  • 提问者网友:孤山下
  • 2021-02-13 12:16
如何将选中的点集转换成Polygon
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-02-13 13:25
如何将选中的点集转换成Polygon
本例要实现的功能是根据一个FeatureLayer中被选择一个或多个MultiPoint,生成多个Point并把这些新生成的Point保存在一个Point类型的Feature Layer上。
l 要点
本例将选择的Multipoints上的每个点都生成一个对应得Point,并用一个接口IPointCollection的变量来接收。利用IPointCollection的方法point(index),取出新生成的每个点,用来创建Point类型的Feature。
l 程序说明
本例要求在ArcMap中添加两个层,最上面的是层Multipoint,下面是层wind。根据循环得到选择的每个Multipoint的每个点,为wind层生成新的Feature并保存
l 代码
Sub convertMultipointToPoints()
Dim pMxDocument As IMxDocument
Dim pMap As IMap
Dim pActiveView As IActiveView
Dim pEnumFeature As IEnumFeature
Dim pFeature0 As IFeature
Dim pFeatureLayer0 As IFeatureLayer
Dim pFeatureClass0 As IFeatureClass
Dim pFeature1 As IFeature
Dim pFeatureLayer1 As IFeatureLayer
Dim pFeatureClass1 As IFeatureClass
Dim pPointCollection As IPointCollection
Dim pDataSet As IDataset
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pWorkspaceEdit As IWorkspaceEdit
Dim lPointIndex As Long
Dim lPointFieldIndex As Long
On Error GoTo ErrorHanlder
'得到当前层
Set pMxDocument = ThisDocument
Set pMap = pMxDocument.FocusMap
Set pActiveView = pMap
'得到0层和1层的FeatureClass
Set pFeatureLayer0 = pMxDocument.FocusMap.Layer(0)
Set pFeatureClass0 = pFeatureLayer0.FeatureClass
Set pFeatureLayer1 = pMxDocument.FocusMap.Layer(1)
Set pFeatureClass1 = pFeatureLayer1.FeatureClass
'建立编辑工作区
Set pDataSet = pFeatureClass1
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pWorkspaceEdit = pWorkspaceFactory.OpenFromFile(pDataSet.Workspace.PathName, 0)
pWorkspaceEdit.StartEditOperation
pWorkspaceEdit.StartEditing True
'得到Feature
Set pEnumFeature = pMxDocument.FocusMap.FeatureSelection
Set pFeature0 = pEnumFeature.Next
If pFeature0 Is Nothing Then
MsgBox "Must have Select in Position 0"
Exit Sub
End If
'循环,通过每个MultiPoint,在1图层上,生成以每个点为特征的Points
While Not pFeature0 Is Nothing
If pFeature0.ShapeCopy.GeometryType = esriGeometryMultipoint Then
Set pPointCollection = pFeature0.ShapeCopy
For nPointIndex = 0 To pPointCollection.PointCount - 1
  Set pFeature1 = pFeatureClass1.CreateFeature
'在pFeature1上生成Point
Set pFeature1.Shape = pPointCollection.Point(nPointIndex)
'如果两Feature的FieldCount相同,赋每个Field的值,ID,
'TypeGeometry的Field除外
If pFeature1.Fields.FieldCount = pFeature0.Fields.FieldCount Then
For lPointFieldIndex = 0 To pFeature1.Fields.FieldCount - 1
If Not pFeature1.Fields.Field(lPointFieldIndex).Type = _ esriFieldTypeGeometry And Not pFeature1.Fields. _
Field(lPointFieldIndex).Type = esriFieldTypeOID Then
pFeature1.Value(lPointFieldIndex) = _
pFeature0.Value(lPointFieldIndex)
End If
Next
End If
'保存Feature
pFeature1.Store
Next
Else
MsgBox "Must have Multipoint in position 0"
Exit Sub
End If
Set pFeature0 = pEnumFeature.Next
Wend
'停止编辑
pWorkspaceEdit.StopEditOperation
pWorkspaceEdit.StopEditing True
Exit Sub
ErrorHanlder:
pWorkspaceEdit. AbortEditOperation
MsgBox Err.Description
End Sub
全部回答
  • 1楼网友:神的生死簿
  • 2021-02-13 13:59
我是来看评论的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯