我在QGIS字段编辑器中的一个功能中工作,该编辑器使用来自多边形Z的X,Y和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
目标是使用要素几何并在所有内部代码中工作。 为了避免在Expression中传递很多变量。
例如:
geom=feature.geometry()
x1=geom.x(1)
y1=geom.y(1)
z1=geom.z(1)
依此类推...
你能帮我吗?
谢谢。