daily pastebin goal
39%
SHARE
TWEET

M Jansen

a guest Dec 22nd, 2008 362 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Creates a star with given parameters.
  3.  *
  4.  * Needs both PostgreSDQl and Postgis.
  5.  *
  6.  * Please contact jansen (at) terrestris (dot) de when you use this function.
  7.  *
  8.  * @language PL/PGSQL
  9.  * @see selectoid.wordpress.com
  10.  * @license MIT, http://www.opensource.org/licenses/mit-license.php
  11.  * @copyright 2008, M. Jansen jansen (at) terrestris (dot) de
  12.  */
  13. CREATE OR REPLACE FUNCTION ST_StarAtPoint(
  14.     IN point geometry,
  15.     IN inner_radius numeric,
  16.     IN outer_radius numeric,
  17.     IN number_of_spikes integer,
  18.     IN additional_rotation_degrees numeric
  19. ) RETURNS GEOMETRY AS
  20. $body$
  21.     DECLARE
  22.         star_geom geometry;
  23.     BEGIN
  24.         SELECT
  25.                 ST_MakePolygon(
  26.                         ST_AddPoint(
  27.                                 ST_MakeLine(
  28.                                         ST_MakePoint(
  29.                                                 ST_X(
  30.                                                         ST_EndPoint(
  31.                                                                 ST_RotateZ(
  32.                                                                         ST_MakeLine(
  33.                                                                                 ST_MakePoint(0, 0)
  34.                                                                                 , ST_MakePoint(
  35.                                                                                         0, CASE WHEN i = 1 THEN outer_radius ELSE inner_radius END
  36.                                                                                 )
  37.                                                                         ),
  38.                                                                         CASE WHEN i = 1
  39.                                                                           THEN radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees)
  40.                                                                           ELSE radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees) + (radians((360/number_of_spikes)) / 2) END
  41.                                                                 )
  42.                                                         )
  43.                                                 ) + ST_X(point)
  44.                                                 , ST_Y(
  45.                                                         ST_EndPoint(
  46.                                                                 ST_RotateZ(
  47.                                                                         ST_MakeLine(
  48.                                                                                 ST_MakePoint(0, 0)
  49.                                                                                 , ST_MakePoint(
  50.                                                                                         0, CASE WHEN i = 1 THEN outer_radius ELSE inner_radius END
  51.                                                                                 )
  52.                                                                         ),
  53.                                                                         CASE WHEN i = 1
  54.                                                                           THEN radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees)
  55.                                                                           ELSE radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees) + (radians((360/number_of_spikes)) / 2) END
  56.                                                                 )
  57.                                                         )
  58.                                                 ) + ST_Y(point)
  59.                                                
  60.                                         )
  61.                                 ),
  62.                                 ST_MakePoint(
  63.                                         ST_X(
  64.                                                 ST_EndPoint(
  65.                                                         ST_RotateZ(
  66.                                                                 ST_MakeLine(
  67.                                                                         ST_MakePoint(0, 0), ST_MakePoint(0, outer_radius)
  68.                                                                 )
  69.                                                                 , radians(additional_rotation_degrees)
  70.                                                         )
  71.                                                 )
  72.                                         ) + ST_X(point)
  73.                                         ,ST_Y(
  74.                                                 ST_EndPoint(
  75.                                                         ST_RotateZ(
  76.                                                                 ST_MakeLine(
  77.                                                                         ST_MakePoint(0, 0), ST_MakePoint(0, outer_radius)
  78.                                                                 )
  79.                                                                 , radians(additional_rotation_degrees)
  80.                                                         )
  81.                                                 )
  82.                                         ) + ST_Y(point)
  83.                                        
  84.                                 )
  85.                                 , -1
  86.                         )
  87.                 ) INTO star_geom
  88.            FROM generate_series(0, number_of_spikes) spike,
  89.                 generate_series(1, 2) i;
  90.         RETURN star_geom;
  91.     END;
  92. $body$
  93. LANGUAGE plpgsql;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top