Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Creates a star with given parameters.
- *
- * Needs both PostgreSDQl and Postgis.
- *
- * Please contact jansen (at) terrestris (dot) de when you use this function.
- *
- * @language PL/PGSQL
- * @see selectoid.wordpress.com
- * @license MIT, http://www.opensource.org/licenses/mit-license.php
- * @copyright 2008, M. Jansen jansen (at) terrestris (dot) de
- */
- CREATE OR REPLACE FUNCTION ST_StarAtPoint(
- IN point geometry,
- IN inner_radius NUMERIC,
- IN outer_radius NUMERIC,
- IN number_of_spikes INTEGER,
- IN additional_rotation_degrees NUMERIC
- ) RETURNS GEOMETRY AS
- $body$
- DECLARE
- star_geom geometry;
- BEGIN
- SELECT
- ST_MakePolygon(
- ST_AddPoint(
- ST_MakeLine(
- ST_MakePoint(
- ST_X(
- ST_EndPoint(
- ST_RotateZ(
- ST_MakeLine(
- ST_MakePoint(0, 0)
- , ST_MakePoint(
- 0, CASE WHEN i = 1 THEN outer_radius ELSE inner_radius END
- )
- ),
- CASE WHEN i = 1
- THEN radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees)
- ELSE radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees) + (radians((360/number_of_spikes)) / 2) END
- )
- )
- ) + ST_X(point)
- , ST_Y(
- ST_EndPoint(
- ST_RotateZ(
- ST_MakeLine(
- ST_MakePoint(0, 0)
- , ST_MakePoint(
- 0, CASE WHEN i = 1 THEN outer_radius ELSE inner_radius END
- )
- ),
- CASE WHEN i = 1
- THEN radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees)
- ELSE radians((360/number_of_spikes)*spike) + radians(additional_rotation_degrees) + (radians((360/number_of_spikes)) / 2) END
- )
- )
- ) + ST_Y(point)
- )
- ),
- ST_MakePoint(
- ST_X(
- ST_EndPoint(
- ST_RotateZ(
- ST_MakeLine(
- ST_MakePoint(0, 0), ST_MakePoint(0, outer_radius)
- )
- , radians(additional_rotation_degrees)
- )
- )
- ) + ST_X(point)
- ,ST_Y(
- ST_EndPoint(
- ST_RotateZ(
- ST_MakeLine(
- ST_MakePoint(0, 0), ST_MakePoint(0, outer_radius)
- )
- , radians(additional_rotation_degrees)
- )
- )
- ) + ST_Y(point)
- )
- , -1
- )
- ) INTO star_geom
- FROM generate_series(0, number_of_spikes) spike,
- generate_series(1, 2) i;
- RETURN star_geom;
- END;
- $body$
- LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement