赞
踩
一、获取要素的几何图形pGeometry
1、创建新要素:例如新建线要素line1
- Dim pts As List(Of MapPoint) = New List(Of MapPoint)
- Dim pGeometry As ArcGIS.Core.Geometry.Geometry
- pts.Add(MapPointBuilderEx.CreateMapPoint(1.0, 1.0))
- pts.Add(MapPointBuilderEx.CreateMapPoint(3.0, 3.0))
- pts.Add(MapPointBuilderEx.CreateMapPoint(5.0, 1.0))
- Dim line1 As ArcGIS.Core.Geometry.Polyline = PolylineBuilderEx.CreatePolyline(pts)
- pGeometry = line1
2、获取加载图层的要素,TK_LINE图层名称
- Dim pLayer1 As FeatureLayer = Map.FindLayers("TK_LINE").First()
- Dim pfeatureClass As FeatureClass
- Dim tableCursor As RowCursor
- Dim pGeometry As ArcGIS.Core.Geometry.Geometry
-
- Await QueuedTask.Run(Sub()
- pfeatureClass = pLayer1.GetFeatureClass
- tableCursor = pfeatureClass.Search()
- While tableCursor.MoveNext
- pfeature = CType(tableCursor.Current, Feature)
- pGeometry = pfeature.GetShape
- End While
- End Sub)
一、平移
- Dim pGeometry As ArcGIS.Core.Geometry.Geometry
- Dim pGeometry1 As ArcGIS.Core.Geometry.Geometry
- Dim dx As Double
- Dim dy As Double
- '将pGeometry按X、Y方向各自的偏移量,平移pGeometry,得到pGeometry1
- pGeometry1 = GeometryEngine.Instance.Move(pGeometry, dx, dy)
二、缩放
- Dim pGeometry As ArcGIS.Core.Geometry.Geometry
- Dim pGeometry1 As ArcGIS.Core.Geometry.Geometry
- Dim Lpoint As MapPoint
- Dim dx As Double
- Dim dy As Double
- Dim Scale_x As Double
- Dim Scale_y As Double
- Dim px As Double
- Dim py As Double
- Lpoint = MapPointBuilderEx.CreateMapPoint(px, py) 'origin 缩放点
- '将pGeometry以缩放点Lpoint为中心按X、Y方向各自缩放比例,得到pGeometry1
- pGeometry1 = GeometryEngine.Instance.Scale(pGeometry, Lpoint, Scale_x, Scale_y)
三、旋转
- Dim pGeometry As ArcGIS.Core.Geometry.Geometry
- Dim pGeometry1 As ArcGIS.Core.Geometry.Geometry
- Dim Lpoint As MapPoint
- Dim PRotate As Double '旋转角
- Dim px As Double
- Dim py As Double
-
- Lpoint = MapPointBuilderEx.CreateMapPoint(px, py) 'origin 缩放点
- '将pGeometry以旋转点Lpoint为中心,得到pGeometry1
- pGeometry1 = GeometryEngine.Instance.Scale(pGeometry, Lpoint, Scale_x, Scale_y)
- Geometry rotatedPolyline = GeometryEngine.Instance.Rotate(textLine, origin, System.Math.PI *PRotate/180)
四、复制平移
- Dim Layer As FeatureLayer = Map.FindLayers("TK_LINE").First()
- Dim dx As Double
- Dim dy As Double
- '创建编辑器
- Dim duplicateFeatures = New EditOperation
- duplicateFeatures.Name = "Duplicate Features"
- '创建【inspector】实例
- Await QueuedTask.Run(Sub()
- Dim insp2 = New Inspector
- '加载
- Dim Oid As Long = 2
- insp2.Load(Layer, Oid)
-
- pfeatureClass = Layer.GetFeatureClass
- '获取复制对象
- Dim geom As ArcGIS.Core.Geometry.Geometry = insp2("SHAPE")
- '复制要素及全属性复制
- Dim rtoken = duplicateFeatures.Create(insp2.MapMember, insp2.ToDictionary(Function(a) a.FieldName, Function(a) a.CurrentValue))
- If duplicateFeatures.IsEmpty = False Then
- If duplicateFeatures.Execute = True Then
- '移动位置
- Dim modifyOp = duplicateFeatures.CreateChainedOperation
- modifyOp.Modify(Layer, rtoken.ObjectID, GeometryEngine.Instance.Move(geom, dx, dy))
- If modifyOp.IsEmpty = False Then
- modifyOp.Execute()
- End If
- End If
- End If
- End Sub)
五、平行复制
- Dim roadsLayer = MapView.Active.Map.FindLayers("Roads").FirstOrDefault()
- ' 建立平行复制生成器,并设置参数
- Dim parOffsetBuilder = New ParallelOffset.Builder()
- With parOffsetBuilder
- .Selection = MapView.Active.Map.GetSelection() '所选要素
- '.Template = roadsLayer.GetTemplate("Freeway") '模板(可以不选)
- .Distance = 200 '偏移距离
- .Side = ParallelOffset.SideType.Both '偏移方式(左,右,两侧)
- .Corner = ParallelOffset.CornerType.Mitered '拐角处理方式(圆角,斜接角,斜面角)
- .Iterations = 1 '重复偏移的次数
- .AlignConnected = False '是否对齐连接线的方向
- .CopyToSeparateFeatures = False '是否复制到独立要素
- .RemoveSelfIntersectingLoops = True '是否移除自相交环
- End With
-
- '创建编辑器并执行
- Dim parallelOp = New EditOperation()
- parallelOp.Create(parOffsetBuilder)
- If parallelOp.IsEmpty = False Then
- Dim Result = parallelOp.Execute()
- If Result = False Then
- MsgBox("操作失败。")
- Exit Sub
- End If
- End If
六、炸开多部件
- Dim FeatureLayer = MapView.Active.Map.FindLayers("TK_Polygon").FirstOrDefault()
- Layer = FeatureLayer
- pfeatureClass = Layer.GetFeatureClass
- Dim POid As List(Of Long)
- POid = New List(Of Long)
- POid.Add(0)
- explodeFeatures.Explode(FeatureLayer, POid, True)
- If explodeFeatures.IsEmpty = False Then
- Dim result = explodeFeatures.Execute()
- If result = False Then
- MsgBox("操作失败。")
- Exit Sub
- End If
- End If
七、缓冲
Geometry1 = GeometryEngine.Instance.Buffer(Geometry, 5.0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。