Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load firstStep("D:\point.shp", "D:\road.shp", "D:\new.shp") 'Dim newShapeFileFeatureLayer As ShapeFileFeatureLayer = GenerateNewShapeFile(originalShapeFileFeatureLayer, newShapefilePath) End Sub Private Sub firstStep(ByVal bridgeShapefilePath As String, ByVal roadShapefilePath As String, ByVal newShapefilePath As String) Dim bridge As ShapeFileFeatureLayer = New ShapeFileFeatureLayer(bridgeShapefilePath) Dim road As ShapeFileFeatureLayer = New ShapeFileFeatureLayer(roadShapefilePath) ShapeFileFeatureLayer.BuildIndexFile(bridgeShapefilePath, BuildIndexMode.DoNotRebuild) ShapeFileFeatureLayer.BuildIndexFile(roadShapefilePath, BuildIndexMode.DoNotRebuild) Dim newShapeFileFeatureLayer As ShapeFileFeatureLayer = GenerateNewShapeFile(bridge, newShapefilePath) UpdateNewShapeFile(bridge, road, newShapeFileFeatureLayer) End Sub Private Function GenerateNewShapeFile(ByVal b_originalShapeFileFeatureLayer As ShapeFileFeatureLayer, ByVal newShapefilePath As String) As ShapeFileFeatureLayer b_originalShapeFileFeatureLayer.Open() Dim shapeFileType As ShapeFileType = b_originalShapeFileFeatureLayer.GetShapeFileType() Dim oringinalDbfColumns As Collection(Of DbfColumn) = DirectCast(b_originalShapeFileFeatureLayer.FeatureSource, ShapeFileFeatureSource).GetDbfColumns() b_originalShapeFileFeatureLayer.Close() ShapeFileFeatureSource.CreateShapeFile(shapeFileType, newShapefilePath, oringinalDbfColumns) '建立新SHP FILE Dim newShapeFileFeatureLayer As New ShapeFileFeatureLayer(newShapefilePath, ShapeFileReadWriteMode.ReadWrite) Return newShapeFileFeatureLayer End Function Private Sub UpdateNewShapeFile(ByVal b_originalShapeFileFeatureLayer As ShapeFileFeatureLayer, ByVal r_originalShapeFileFeatureLayer As ShapeFileFeatureLayer, ByVal newShapeFileFeatureLayer As ShapeFileFeatureLayer) Dim bridgeS As New DataTable Dim roadS As New DataTable b_originalShapeFileFeatureLayer.Open() bridgeS = b_originalShapeFileFeatureLayer.QueryTools.ExecuteQuery("select pointid from point") r_originalShapeFileFeatureLayer.Open() roadS = r_originalShapeFileFeatureLayer.QueryTools.ExecuteQuery("select pointid,roadid from road where pointid<>''") Dim roadcollect As New Dictionary(Of String, String) Dim rStr(roadS.Rows.Count - 1) As String Dim bStr(bridgeS.Rows.Count - 1) As String For i As Integer = 0 To bridgeS.Rows.Count - 1 bStr(i) = bridgeS.Rows(i).Item("pointid") Next For j As Integer = 0 To roadS.Rows.Count - 1 rStr(j) = roadS.Rows(j).Item("pointid").ToString Next Dim combineList As New List(Of String) Dim interList As New List(Of String) Dim NointerList As New List(Of String) For i As Integer = 0 To bridgeS.Rows.Count - 1 combineList.Add(bridgeS.Rows(i).Item("pointid")) Next For j As Integer = 0 To roadS.Rows.Count - 1 If combineList.Contains(roadS.Rows(j).Item("pointid")) Then interList.Add(roadS.Rows(j).Item("roadid")) Else NointerList.Add(roadS.Rows(j).Item("roadid")) If NointerList.Count > 0 Then Exit For End If End If Next ' Dim shapeFileType As ShapeFileType = b_originalShapeFileFeatureLayer.GetShapeFileType() Dim dbfColumns As Collection(Of DbfColumn) = DirectCast(b_originalShapeFileFeatureLayer.FeatureSource, ShapeFileFeatureSource).GetDbfColumns() b_originalShapeFileFeatureLayer.Close() newShapeFileFeatureLayer.Open() newShapeFileFeatureLayer.EditTools.BeginTransaction() Dim features As New Collection(Of Feature) For i As Integer = 0 To NointerList.Count - 1 features = r_originalShapeFileFeatureLayer.QueryTools.GetFeaturesByColumnValue("roadid", NointerList(i)) System.Console.Write(i & vbNewLine) Next Dim shapeCollect As New Dictionary(Of String, MultilineShape) For i As Integer = 0 To features.Count - 1 shapeCollect.Add(NointerList(i), New MultilineShape(features.Item(i).GetShape())) ''''''''''it can't work. i don't know how to modify it. Next Dim pointcoordinates As New Dictionary(Of Integer, Vertex) Dim strx As String = "" Dim stry As String = "" Dim verX As Double Dim verY As Double 'get center of coordinates of road line For j As Integer = 0 To shapeCollect.Count - 1 Dim n = shapeCollect(j).Lines.Item(0).Vertices.Count If n Mod 2 <> 0 Then verX = shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2 + 1).X verY = shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2 + 1).Y pointcoordinates.Add(j, New Vertex(verX, verY)) Else verX = (shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2).X + shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2 + 1).X) / 2 verY = (shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2).Y + shapeCollect(j).Lines.Item(0).Vertices.Item(n / 2 + 1).Y) / 2 pointcoordinates.Add(j, New Vertex(verX, verY)) End If Next r_originalShapeFileFeatureLayer.Close() Dim dictionaryColumn As New Dictionary(Of String, String) '建立dbf內容 For i As Integer = 0 To NointerList.Count - 1 dictionaryColumn.Add("roadid", NointerList(i)) Next Dim Allfeatures As New Collection(Of Feature) For i As Integer = 0 To pointcoordinates.Count - 1 Allfeatures.Add(New Feature(pointcoordinates(i), dictionaryColumn(i))) Next For i As Integer = 0 To Allfeatures.Count - 1 newShapeFileFeatureLayer.EditTools.Add(Allfeatures(i)) Next newShapeFileFeatureLayer.EditTools.CommitTransaction() newShapeFileFeatureLayer.Close() End Sub