Как получить координаты из 3D-полигона в редакторе функций QGIS? - PullRequest
0 голосов
/ 25 января 2019

Я работаю в функции внутри редактора полей QGIS, которая использует координаты X, Y и Z из полигона Z для вычисления DIP.

Код еще не хорошо, но работает.Выражение:

degrees( asin(dip($x_at( 0),$x_at( 1),$x_at( 2),$y_at( 0),$y_at( 1),$y_at( 2),z(point_n($geometry ,1)),z(point_n($geometry ,2)),z(point_n($geometry ,3)))))

Код:

from qgis.core import *
from qgis.gui import *
from qgis.utils import*
from qgis.analysis import*
import math

@qgsfunction(args='auto', group='Custom')  
def dip(x1,x2,x3,y1,y2,y3,z1,z2,z3,feature, parent):
    v1= ((y1-y2)*(z3-z2)-(y3-y2)*(z1-z2))
    v2= -((x1-x2)*(z3-z2)-(x3-x2)*(z1-z2))
    v3= ((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))

    if v1==0 and v2==0 and v3==0:

        di=0
    else:
        di=asin((((v1**2)+(v2**2))**0.5)/((v1**2)+(v2**2)+(v3**2))**0.5)  
    return di

Цель состоит в том, чтобы использовать геометрию элемента и обрабатывать весь код.Чтобы избежать передачи большого количества переменных в выражении.

Например:

geom=feature.geometry() 

x1=geom.x(1)
y1=geom.y(1)
z1=geom.z(1)

И так далее ...

Вы можете мне помочь?

Спасибо.

...