Автоматический расчет длин полилиний

0 голосов
спросил 16 Фев, 06 от a-d-k (340 баллов) в категории Программные продукты Esri
Как можно получить длину полилинии не используя "measure distance"?

5 Ответы

0 голосов
ответил 16 Фев, 06 от geologic (39,860 баллов)
Так же как и координаты и площадь, например, через Калькулятор. Ваш вопрос типовой, почитайте help или FAQ
0 голосов
ответил 17 Фев, 06 от filippov70 (5,320 баллов)
Уважаемый a-d-k.

Вот ниже процедура на VBA. То что закомментировано, выдает мессагу с
площадью и периметром в кв.м и м, при условии, что фрейм данных имеет систему координат метрическую.

Public Sub GeoInfoFeature()


Set pMxDoc = ThisDocument
Dim pEnumFeat As IEnumFeature
Dim pSelFeat As IFeature
Dim curva As ICurve
dGlobalPerimetr = 0
dGlobalArea = 0
 
Set pEnumFeat = pMxDoc.FocusMap.FeatureSelection
  If pMxDoc.FocusMap.SelectionCount <> 1 Then
    MsgBox "Необходимо выбрать ОДИН участок!", vbInformation
    Exit Sub
  End If
   
Set pSelFeat = pEnumFeat.Next
  If pSelFeat Is Nothing Then
        MsgBox "Не выбран участок", vbCritical
        Exit Sub
 
  End If

        If pSelFeat.Shape.GeometryType = esriGeometryPolygon Then
                          Dim pArea As IArea
                         
                          Set pArea = pSelFeat.Shape
                          Set curva = pSelFeat.Shape
                          Dim a As Double
                          Dim l As Double
                          Dim b As String
                          Dim P As String
                          Dim strA As String
                          Dim strP As String
                          'l = curva.Length
                          'a = pArea.Area
                          'gectar = a / 10000
                          'b = Round(a, 1)
                          'b = FormatNumber(b, 1)
                          'P = Round(l, 2)
                          'P = FormatNumber(P, 2)
                          'strA = "Площадь " & b & " кв.м"
                          'strP = "Периметр " & P & " м"
                          'MsgBox strA & vbNewLine & strP, vbInformation
                          'AttribResultFrm.lblArea = strA
                          'AttribResultFrm.lblArea = strP
                         
                          dGlobalArea = pArea.Area
                          dGlobalPerimetr = curva.Length
                         
                          frmGeoInfo.UserForm_Initialize
                          frmGeoInfo.txtArea.text = CStr(FormatNumber(dGlobalArea, 2))
                          frmGeoInfo.txtPer.text = CStr(FormatNumber(dGlobalPerimetr, 2))
                          frmGeoInfo.Show
                         
                     Else
                     'MsgBox "Выбранный объект не имеет площади", vbCritical
                         
                         
                          Set curva = pSelFeat.Shape
                          dGlobalPerimetr = curva.Length
                          frmGeoInfo.UserForm_Initialize
                          frmGeoInfo.txtArea.Enabled = False
                          frmGeoInfo.cmbPer.Enabled = False
                          frmGeoInfo.txtPer.text = CStr(FormatNumber(dGlobalPerimetr, 2))
      
0 голосов
ответил 17 Фев, 06 от filippov70 (5,320 баллов)
вот это
                          'AttribResultFrm.lblArea = strA
                          'AttribResultFrm.lblArea = strP

и

                          'gectar = a / 10000

совсем не надо

а это
                          dGlobalArea = pArea.Area
                          dGlobalPerimetr = curva.Length
                         
                          frmGeoInfo.UserForm_Initialize
                          frmGeoInfo.txtArea.text = CStr(FormatNumber(dGlobalArea, 2))
                          frmGeoInfo.txtPer.text = CStr(FormatNumber(dGlobalPerimetr, 2))
                          frmGeoInfo.Show
                         
                     Else
                     'MsgBox "Выбранный объект не имеет площади", vbCritical

                          Set curva = pSelFeat.Shape
                          dGlobalPerimetr = curva.Length
                          frmGeoInfo.UserForm_Initialize
                          frmGeoInfo.txtArea.Enabled = False
                          frmGeoInfo.cmbPer.Enabled = False
                          frmGeoInfo.txtPer.text = CStr(FormatNumber(dGlobalPerimetr, 2))
                          frmGeoInfo.Show

в сегодняшнем моем варианте выдает форму,
в которой можно конвертировать значения площади и периметра
0 голосов
ответил 17 Фев, 06 от a-d-k (340 баллов)
nukevlad, большое спасибо! Уже разобрался
0 голосов
ответил 05 Апр, 06 от Jazz (7,650 баллов)
а я как лентяй, конвертирую в покрытие, потом обратно, и оно уже с длинами возвращаеться, тем более что топологию клинить в любом случае желательно...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...