Guest User

M Jansen

a guest
Dec 22nd, 2008
459
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;
  94.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×