pheight := args[2]::float;
dz_dx := ((matrix[3][1] + 2.0 * matrix[3][2] + matrix[3][3]) - (matrix[1][1] + 2.0 * matrix[1][2] + matrix[1][3])) / (8.0 * pwidth);
dz_dy := ((matrix[1][3] + 2.0 * matrix[2][3] + matrix[3][3]) - (matrix[1][1] + 2.0 * matrix[2][1] + matrix[3][1])) / (8.0 * pheight);
- IF dz_dx = 0 AND dz_dy = 0 THEN
+ IF abs(dz_dx) = 0::float AND abs(dz_dy) = 0::float THEN
RETURN -1;
END IF;
dz_dy := ((matrix[1][3] + 2.0 * matrix[2][3] + matrix[3][3]) - (matrix[1][1] + 2.0 * matrix[2][1] + matrix[3][1])) / (8.0 * pheight);
elevation_scale := args[6]::float;
slope := atan(sqrt(elevation_scale * pow(dz_dx, 2.0) + pow(dz_dy, 2.0)));
- aspect := atan2(dz_dy, -dz_dx);
+ -- handle special case of 0, 0
+ IF abs(dz_dy) = 0::float AND abs(dz_dy) = 0::float THEN
+ -- set to pi as that is the expected PostgreSQL answer in Linux
+ aspect := pi();
+ ELSE
+ aspect := atan2(dz_dy, -dz_dx);
+ END IF;
max_bright := args[5]::float;
IF aspect < 0 THEN