import fmeobjects
from functools import reduce
from math import sin, pi
def left_slope(feature_a, feature_b):
a_x = float(feature_a.getAttribute('x'))
a_y = float(feature_a.getAttribute('y'))
a_z = float(feature_a.getAttribute('z'))
b_x = float(feature_b.getAttribute('x'))
b_y = float(feature_b.getAttribute('y'))
b_z = float(feature_b.getAttribute('z'))
planar_distance = ((a_x-b_x)**2 + (a_y - b_y)**2)**(1/2)
delta_z = b_z - a_z
slope_degree = sin(delta_z/planar_distance) * 180 /pi
feature_a.setAttribute('_slope', slope_degree)
return feature_b
class FeatureProcessor(object):
def __init__(self):
self.features = []
def input(self,feature):
self.features.append(feature)
def close(self):
reduce(left_slope, self.features)
for feature in self.features:
self.pyoutput(feature)
Here is a funky solution. It assumes feature are sorted by your point ID definition.