В какие полигоны попадает точка?

0 голосов
спросил 24 Май, 12 от Flash-Samara (840 баллов) в категории Программные продукты Esri
Добрый день форумчане! Сразу оговорюсь новичек, только начал читать книгу Exploring ArcObjects, однако процесс замедляется из за необходимости перевода. Передо мной стоит следующая задача:
Пользователь вводит координаты точки в диалоговом окне, скрипт должен добавить точку в существующий слой или в новый слой(не суть) и вывести сообщение, содержащее информацию о том в какие полигоны из определенного слоя попадает точка. Как создать точку я вроде разобрался, а вот со второй частью встрял. Плиз, направьте хотя бы в какую сторону копать, может есть примеры какие то...

2 Ответы

0 голосов
ответил 20 Июнь, 12 от stil (300 баллов)
Код сравнения полигона и точки если входит то true если не входит то false


    Public Function GetPolygonIntersection_point(ByVal pLine As IPolygon, ByVal pPolygon As IPoint) As Boolean

        Dim pGeom As IGeometry
        Dim pTopo As ITopologicalOperator = pLine
        If Not pTopo.IsSimple Then pTopo.Simplify()
        pGeom = pTopo.Intersect(pPolygon, pPolygon.Dimension)
        If pGeom.IsEmpty Then
            Return False
        Else
            Return True
        End If

    End Function

0 голосов
ответил 10 Июль, 12 от Flash-Samara (840 баллов)
Спасибо большое, очень помогли!
Вот может кому то пригодится:

Public Sub AddPointButton_Click()

ListBox1.Clear

If Sh1.Text = Empty Or Sh2.Text = Empty Or Sh3.Text = Empty Or Do1.Text = Empty Or Do2.Text = Empty Or Do3.Text = Empty Then
MsgBox "Eror"
Exit Sub
End If

Dim pMxDocument As IMxDocument
Set pMxDocument = ThisDocument
Dim pMap As IMap
Set pMap = pMxDocument.FocusMap
Dim pFeatureLayer As IFeatureLayer
Set pFeatureLayer = pMap.Layer(0)
Dim pFeatureclass As IFeatureClass
Set pFeatureclass = pFeatureLayer.FeatureClass

Dim pTable As ITable
Set pTable = pFeatureclass

Dim pPoint As iPoint
Set pPoint = New Point

Dim Shirota As Double
Dim Dolgota As Double

Shirota = Sh1.Text + (Sh2.Text / 60) + (Sh3.Text / 3600)
Dolgota = Do1.Text + (Do2.Text / 60) + (Do3.Text / 3600)


pPoint.PutCoords Shirota, Dolgota

Dim i As Double

For i = 0 To pTable.RowCount(Nothing) - 1

    Dim pFeature As IFeature
    Set pFeature = pTable.GetRow(i)
   
    Dim pPolygon As IPolygon
    Set pPolygon = pFeature.Shape
   
    Dim Result As Boolean
    Result = GetPolygon(pPolygon, pPoint)
   
    Dim j As Double
    j = 0
   
    If Result = True Then
    ListBox1.AddItem pFeature.Value(6), j
    j = j + 1
    End If
Next i

End Sub


Public Function GetPolygon(ByVal pPolygon As IPolygon, ByVal pPoint As iPoint) As Boolean

        Dim pGeom As IGeometry
        Dim pTopo As ITopologicalOperator
        Set pTopo = pPolygon
        If Not pTopo.IsSimple Then pTopo.Simplify
        Set pGeom = pTopo.Intersect(pPoint, pPoint.Dimension)
        If pGeom.IsEmpty Then
            GetPolygon = False
        Else
            GetPolygon = True
        End If

    End Function

...