Разрезать линию

0 голосов
спросил 08 Июль, 04 от Vius (7,580 баллов) в категории Программные продукты Esri
Есть два слоя - линейный и точечный. Точки находятся на линии. Как эту линию разделить на отрезки от точки до точки. Чувствую, вроде можно, а как - не сообразить.

11 Ответы

0 голосов
ответил 08 Июль, 04 от Mihail1 (4,560 баллов)
По-моему, через "Редактора"
0 голосов
ответил 08 Июль, 04 от Vius (7,580 баллов)

Там нет функции использовать точечный слой для разделения, как ни странно... По крайней мере, я этого там не нашел.

0 голосов
ответил 08 Июль, 04 от Mihail1 (4,560 баллов)
Хм, действительно нет...Я делаю так: "Замыкание" ставлю на вершины точечного слоя; затем инструментом "Разбить линию" попадаю точно в нужную точку (замыкание само ставит на них курсор) и всё - линия делится.
0 голосов
ответил 08 Июль, 04 от Vius (7,580 баллов)

Это понятноimage. Но линий огромное количество, а точек на них - еще больше. В этом и проблема.

0 голосов
ответил 08 Июль, 04 от Alexander1 (32,520 баллов)
0 голосов
ответил 08 Июль, 04 от Vius (7,580 баллов)

я повесил тот код на кнопку, но что-то вообще ничего не происходит, наверное, я  неправильно это сделал. Куда это все нужно впихнуть?

0 голосов
ответил 08 Июль, 04 от Alexander1 (32,520 баллов)

Открой ArcMap, загрузи первым слоем точки, вторым линии.
Кликни Tools > Macros > создай новый макрос и поставь вызов этой процедуры (я её модифицировал):

Sub SplitAll()
    Dim pMxDoc As IMxDocument
    Set pMxDoc = ThisDocument
   
    Dim pMap As IMap
    Set pMap = pMxDoc.FocusMap
   
    Dim pPointL As IFeatureLayer
    Set pPointL = pMap.Layer(0) 'point layer to split lines with
   
    Dim pLineL As IFeatureLayer
    Set pLineL = pMap.Layer(1) 'line layer to be split
   
   
    Dim pLineFC As IFeatureClass
    Set pLineFC = pLineL.FeatureClass
   
    Dim pPointFC As IFeatureClass
    Set pPointFC = pPointL.FeatureClass
   
    Dim pPointCursor As IFeatureCursor
    Set pPointCursor = pPointFC.Search(Nothing, False)
   
    Dim pPointF As IFeature
    Set pPointF = pPointCursor.NextFeature
   
    Dim pRelOp As IRelationalOperator
   
    Do Until pPointF Is Nothing
        Dim pPoint As IPoint
        Set pPoint = pPointF.Shape
        Set pRelOp = pPoint

        Dim pSF As ISpatialFilter
        Set pSF = New SpatialFilter
       
        With pSF
            Set .Geometry = pPoint
            .GeometryField = "Shape"
            .SpatialRel = esriSpatialRelIntersects
        End With
       
        Dim pLineCursor As IFeatureCursor
        Set pLineCursor = pLineFC.Search(pSF, False)
       
        Dim pLineF As IFeature
        Set pLineF = pLineCursor.NextFeature
       
        Do Until pLineF Is Nothing
            Dim pPolyCurve As IPolycurve
            Set pPolyCurve = pLineF.Shape
           
  If pPolyCurve.Length > 0 Then
            Dim pToPoint As IPoint
            Set pToPoint = pPolyCurve.ToPoint
           
            Dim pFromPoint As IPoint
            Set pFromPoint = pPolyCurve.FromPoint
           
            If pRelOp.Equals(pFromPoint) Or _
               pRelOp.Equals(pToPoint) Then
               'do nothing
            Else
                Dim pFeatureEdit As IFeatureEdit
                Set pFeatureEdit = pLineF
                pFeatureEdit.Split pPointF.Shape
            End If
           
            Set pLineF = pLineCursor.NextFeature
   End If
           
        Loop
       
        Set pPointF = pPointCursor.NextFeature
    Loop
   
End Sub

 

0 голосов
ответил 09 Июль, 04 от Гость (210,080 баллов)

Зайди в ArcMap----выдели нужный обьект-----Editor-----Divide---установи на какое количество разрезать----OK.

Удачи!!!!

0 голосов
ответил 09 Июль, 04 от Vius (7,580 баллов)

2 Alexander

Спасибо! Сейчас попробую.

2 Lama

Мне не надо на количество. См. первый пост.

0 голосов
ответил 09 Июль, 04 от Vius (7,580 баллов)
Супер!!! А как его на кнопку повесить, чтобы этот код постоянно не висел в VBA?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...