| 1 | = Determine Cardinal Direction = |

| 2 | |

| 3 | See [http://en.wikipedia.org/wiki/Cardinal_direction Wikipedia] for a description for cardinal direction. |

| 4 | |

| 5 | {{{ |

| 6 | -- Function: ST_Cardinal_Direction(azimuth float8) |

| 7 | -- Returns N, NW, W, SW, S, SE, E, or NE from an azimuth direction |

| 8 | -- By: Mike Toews |

| 9 | -- |

| 10 | -- Usage: |

| 11 | -- postgis=# SELECT ST_Cardinal_Direction( |

| 12 | -- postgis(# ST_Azimuth('POINT(3 5)', 'POINT(5 5)')); |

| 13 | -- st_cardinal_direction |

| 14 | -- ----------------------- |

| 15 | -- E |

| 16 | -- (1 row) |

| 17 | -- |

| 18 | -- DROP FUNCTION ST_Cardinal_Direction(float8); |

| 19 | |

| 20 | CREATE OR REPLACE FUNCTION ST_Cardinal_Direction(azimuth float8) |

| 21 | RETURNS character varying AS |

| 22 | $BODY$SELECT CASE |

| 23 | WHEN $1 < 0.0 THEN 'less than 0' |

| 24 | WHEN $1*180/pi() < 22.5 THEN 'N' |

| 25 | WHEN $1*180/pi() < 67.5 THEN 'NE' |

| 26 | WHEN $1*180/pi() < 112.5 THEN 'E' |

| 27 | WHEN $1*180/pi() < 157.5 THEN 'SE' |

| 28 | WHEN $1*180/pi() < 202.5 THEN 'S' |

| 29 | WHEN $1*180/pi() < 247.5 THEN 'SW' |

| 30 | WHEN $1*180/pi() < 292.5 THEN 'W' |

| 31 | WHEN $1*180/pi() < 337.5 THEN 'NW' |

| 32 | WHEN $1*180/pi() <= 360.0 THEN 'N' |

| 33 | END;$BODY$ LANGUAGE sql IMMUTABLE COST 100; |

| 34 | COMMENT ON FUNCTION ST_Cardinal_Direction(float8) IS 'input azimuth in radians; returns N, NW, W, SW, S, SE, E, or NE'; |

| 35 | }}} |