Расположение точки относительно полигона

0 голосов
спросил 21 Авг, 06 от Darwin (800 баллов) в категории Программные продукты Esri
Всем привет!
Помогите пожалуйста, написать функцию которая определит лежит ли точка на полигоне или вне его
Function bF(pPolygon As IPolygon, pPoint As IPoint) As Boolean

11 Ответы

0 голосов
ответил 21 Авг, 06 от Tatkis (2,420 баллов)
Используйте ITopologicalOperator.Intersect или ISpatialFilter Smile
0 голосов
ответил 21 Авг, 06 от Alexander_Vishn (1,900 баллов)
Как вариант QueryPointAndDistance(..) .
0 голосов
ответил 22 Авг, 06 от Darwin (800 баллов)
Всем спасибо!
использовал QueryPointAndDistance.
0 голосов
ответил 22 Авг, 06 от Alexander_Vishn (1,900 баллов)
К чему собственно QueryPointAndDistance. Я использовал ITopologicalOperator.Intersect/Constain/Touch пр раоте с растром, всмысле у меня полилиния была в задана в координатах растра. Постоянно артефачило, то тот пиксель вылетел, то этот не зачелся. При QueryPointAndDistance я контролирую попадание по длине, граничные пикселы не вылетают. Или я как то неправильно использовал ITopologicalOperator?.
Вообще как можно имея полилинию или полигон в координатах карты соьбрать весь список пикселей, котоые охватывает данный примитив на растре?.
0 голосов
ответил 22 Авг, 06 от Darwin (800 баллов)
Выделив площадь подлежащую вычислению для чего использую простой графический элемент.
Получив массив значение пикселей растра начинаю расчет значений которые ячеек которые лежат внутри полигона остальные NoData:
    For i = 0 To pRasterProps.Width - 1
      For j = 0 To pRasterProps.Height - 1
        Xr = pRasterProps.Extent.XMin + i * pRasterProps.MeanCellSize.x
        Yr = pRasterProps.Extent.YMax - j * pRasterProps.MeanCellSize.y
        pPoint.Project pRasterProps.SpatialReference
        pPoint.PutCoords Xr, Yr
       
        If bFunction(pPolygon, pPoint) = True Then
           pPixelData(i, j) = CallcVal(pPixelData(i, j))
        Else
            pPixelData(i, j) = pRasterProps.NoDataValue
        End If
      Next j
    Next i

функция bFunction определяет принадлежит ли текущий пиксель полигону
Function bFunction(pPolygon As IPolygon, pPoint As IPoint) As Boolean
    Dim pCurve As ICurve
    Dim TempPoint As IPoint
    Set TempPoint = New Point
    
    Dim distAlong As Double, distFrom As Double
    Dim bRightHandSide As Boolean
    
    Set pCurve = pPolygon
    
    pCurve.QueryPointAndDistance 0, pPoint, False, TempPoint, distAlong, distFrom, bRightHandSide
    bFunction = bRightHandSide
    Set TempPoint = Nothing
    Set pCurve = Nothing
End Function

0 голосов
ответил 22 Авг, 06 от Alexander_Vishn (1,900 баллов)
Ну да, аналогично. Под CallcVal что имеется ввиду?.
0 голосов
ответил 22 Авг, 06 от Darwin (800 баллов)
математическая функция решает СДУ
0 голосов
ответил 22 Авг, 06 от Alexander_Vishn (1,900 баллов)
Т.е?. СДУ?.
Сейчас столкнулся с проблемой - нужно градиентно залить полигон, полигон есть берег реки, точнее есть два полигона - полигон реки и полигон берега. Полигон реки равномерно забивается некоторыми значениями, фактически опускается или поднимается поверхность воды. Далее возникает разлет между зерклом воды и берегом. Пробывал поднять-опустить пикселы берега по различным зависимостям от положения от воды, но постоянно вознакают артефакты при построении горизонталей Sprecial Analyst`ом. С утра бъюсь Быть может подход неправильный?. :)
0 голосов
ответил 22 Авг, 06 от Darwin (800 баллов)
СДУ - Система Диференциальный Уравнений
а твою задачу даже и не знаю как решать в этом я даже не новичек, сорри.

    
0 голосов
ответил 22 Авг, 06 от Alexander_Vishn (1,900 баллов)
Гм. А причем тут система дифферинциальных уравнений то?. Вроде как нужно из растра значения пикселей повыдергивать?. :) 
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...