Parece que a função rotate no PostGIS gira a geometria somente sobre o centro do sistema de coordenada. Havia um truque que foi mencionado na lista do PostGIS por Bruce Rindhal para girar um polígono sobre seu centro:
CREATE TABLE shapes (gid serial PRIMARY KEY, name varchar); SELECT AddGeometryColumn('', 'shapes', 'the_geom', -1, 'POLYGON', 2); insert into "shapes" ("the_geom", "name") values ( 'POLYGON((2 2, 2 7, 12 7, 12 2, 2 2))', 'laying down');
Em seguida fazemos um translate no centróide do polygon para (0.0), o giramos 45 graus e movemos para baixo (para o centróide original).
SELECT translate( rotate( translate( the_geom, -x(centroid(the_geom)), -y(centroid(the_geom)) ), radians(45) ), x(centroid(the_geom)), y(centroid(the_geom)) ) from shapes where name = 'laying down';
Veja como ficou:
Antes | Depois |
Fonte: GeoLabs