[OSGeoJapan-discuss] PostGISでの図形の回転について

Hiroo Imaki hiroo @ angeli.org
2012年 12月 13日 (木) 18:22:06 PST


古田さま、
はじめまして、今木と申します。
以前、古田さんがやろうとしていたことに私も随分頭を悩ました覚えがあります。私も最初はST_Rotate()だと思ったのですが、結局ST_Affin()を使いました。
http://postgis.refractions.net/documentation/manual-2.0/ST_Affine.html
というのは、昔のRotateは、原点からの回転だけを扱ったので、任意の原点になった時に上手く働いてくれませんでした。そこで私の場合、回転させる軸となる点の位置をオフセットして回転させましたAffineは回転とオフセットを一回でやってくれます。しかしこれは面倒です。一応今でもできますが。

さすがに改善されたろうと思ってRotate()のところをもう一度読みなおしてみたら、以下のように原点を指定して回転させられるとのことで、これでいいのではないでしょうか?

--セントロイドを使って時計回りに60度回転
SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom)))
FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo;
                           st_asewkt
--------------------------------------------------------------
 LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708)
(1 row)

古田さんの場合だと、
SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, (select 'POINT (2 2)'::geometry
AS b)))
FROM (SELECT 'LINESTRING (1 1,3 1,2 3,1 1)'::geometry AS geom) AS foo;
でいいのではないでしょうか?

参考までに。

今木



2012/12/13 Takeshi FURUTA MQSOL LLC <furuta @ mq-sol.jp>

> 古田です。
>
> PostGISについての質問です。
>
> 図形の回転について教えて欲しいのですが、図形の中心(もしくは任意の点)で
> 回転させるのはどうしたいのでしょうか?
>
> RotateX,RotateY,RotateZを使えばいいのはわかるのですがどう組み合わせてい
> いのかがわかりません。
>
> 例えば、LINESTRING(1 1,3 1,2 3,1 1)の三角形をPoint(2 2)を中心としてθ
> (ラジアン)回転させるのはどうやるのでしょうか?
>
>
> よろしくお願いします。
>
>
> ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
> 合同会社 マップクエストソリューションズ
>http://mq-sol.jp/> 代表 古田 武士 ( furuta @ mq-sol.jp )
> 住所:〒103-0028 東京都中央区八重洲1−9−13
> 八重洲駅前合同ビル6階
> 電話: 03-5843-5923 携帯:090-8985-1587
>
> 埼玉: 〒331-0013 埼玉県戸田市喜沢1−33−8
> ベルテラス板橋202
> 電話・FAX:048−229−0554
> ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>



-- 
Hiroo Imaki
hiroo @ angeli.org
http://www.geopacific.org
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20121213/af9d87a0/attachment-0001.html>


More information about the OSGeoJapan-discuss mailing list