Changes between Version 1 and Version 2 of UsersWikiCardinalDirection


Ignore:
Timestamp:
Apr 6, 2015, 7:22:00 PM (9 years ago)
Author:
Mike Taves
Comment:

update style and example

Legend:

Unmodified
Added
Removed
Modified
  • UsersWikiCardinalDirection

    v1 v2  
    44
    55{{{
    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);
     6CREATE OR REPLACE FUNCTION ST_CardinalDirection(azimuth float8) RETURNS character varying AS
     7$BODY$SELECT CASE
     8  WHEN $1 < 0.0 THEN 'less than 0'
     9  WHEN degrees($1) < 22.5 THEN 'N'
     10  WHEN degrees($1) < 67.5 THEN 'NE'
     11  WHEN degrees($1) < 112.5 THEN 'E'
     12  WHEN degrees($1) < 157.5 THEN 'SE'
     13  WHEN degrees($1) < 202.5 THEN 'S'
     14  WHEN degrees($1) < 247.5 THEN 'SW'
     15  WHEN degrees($1) < 292.5 THEN 'W'
     16  WHEN degrees($1) < 337.5 THEN 'NW'
     17  WHEN degrees($1) <= 360.0 THEN 'N'
     18END;$BODY$ LANGUAGE sql IMMUTABLE COST 100;
     19COMMENT ON FUNCTION ST_CardinalDirection(float8) IS 'input azimuth in radians; returns N, NW, W, SW, S, SE, E, or NE';
     20}}}
    1921
    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';
     22Example:
     23{{{
     24SELECT
     25  degrees(ST_Azimuth(origin, pt)) AS azimuth_in_degrees,
     26  ST_CardinalDirection(ST_Azimuth(origin, pt))
     27FROM (
     28  SELECT
     29    'POINT(0 0)'::geometry AS origin,
     30    ST_MakePoint(cos(radians(x)), sin(radians(x))) AS pt
     31  FROM generate_series(0, 365, 15) AS x
     32) AS f;
     33
     34  azimuth_in_degrees   | st_cardinaldirection
     35-----------------------+----------------------
     36                    90 | E
     37                    75 | E
     38                    60 | NE
     39                    45 | NE
     40                    30 | NE
     41                    15 | N
     42 3.50835464926744e-015 | N
     43                   345 | N
     44                   330 | NW
     45                   315 | NW
     46                   300 | NW
     47                   285 | W
     48                   270 | W
     49                   255 | W
     50                   240 | SW
     51                   225 | SW
     52                   210 | SW
     53                   195 | S
     54                   180 | S
     55                   165 | S
     56                   150 | SE
     57                   135 | SE
     58                   120 | SE
     59                   105 | E
     60                    90 | E
     61(25 rows)
    3562}}}