It sounds like you'd like to apply an affine transformation (ST_Affine) to your 
geometry.

Two simple wrappers may help you:
  ST_Scale will expand/scale a polygon by a specified value in x and y.
  ST_Translate will translate the geometry if you wanted to scale at the 
midpoint of the geometry.

SELECT
  ST_AsText(
    ST_Translate(
      ST_Scale(geom, 3, 2),
      -3 * (ST_Xmin(geom)+ST_XMax(geom))/2 + ((ST_Xmin(geom)+ST_XMax(geom))/2),
      -2 * (ST_Ymin(geom)+ST_YMax(geom))/2 + ((ST_Ymin(geom)+ST_YMax(geom))/2))
  )

FROM
  (SELECT 'POLYGON (( 2 5, 2 6, 3 6, 3 5, 2 5 ))'::geometry AS geom) a;
                st_astext
------------------------------------------
 POLYGON((1 4.5,1 6.5,4 6.5,4 4.5,1 4.5))
(1 row)


-- Or use ST_Affine directly:
SELECT
  ST_AsText(
    ST_Affine(
      geom, 3, 0, 0, 2,
      -3 * (ST_Xmin(geom)+ST_XMax(geom))/2 + ((ST_Xmin(geom)+ST_XMax(geom))/2),
      -2 * (ST_Ymin(geom)+ST_YMax(geom))/2 + ((ST_Ymin(geom)+ST_YMax(geom))/2))
  )

FROM
  (SELECT 'POLYGON (( 2 5, 2 6, 3 6, 3 5, 2 5 ))'::geometry AS geom) a;
                st_astext
------------------------------------------
 POLYGON((1 4.5,1 6.5,4 6.5,4 4.5,1 4.5))
(1 row)


Ideally, it looks like there should an optional parameter to ST_Scale that would allow a user to scale about the midpoint or lower left directly. I'll add this as a wish list item.

Cheers,
Kevin


Yurka wrote:
I'm wondering if such thing exists.
I have a polygon that i need to expand by x for each coordinate
equivalent would be a function ST_Expand(), but ST_Expand expands the
bounding box not the polygon itself.

maybe someone has a workaround?

thanks in advance.
_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to