2017-05-03 22 views
2

ローカル軸を中心にジオメトリを回転しようとしましたが、方法が見つかりませんでした。私は(https://postgis.net/docs/ST_RotateX.htmlを参照してください)2次元計算のためとST_RotateX(特に)(https://postgis.net/docs/ST_Rotate.htmlを参照)ST_Rotateがあることを知っているが、これらの方法では、原点を中心にジオメトリを回転させます。私は変更しようとしたとき、私はまた、原点(すなわち0/0/0)(ように思われるもの)ST_Affineを悪用しようとした:ローカル軸を中心にジオメトリを回転する

SELECT ST_Affine(
     ST_GeomFromText(ST_AsText(runway_area)), 
     1, 0, 0, 0, 
     cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 
     --- use the geometry's centroid instead of 0, 0, 0 
     ST_X(ST_GeomFromText(ST_AsText(runway_area))), ST_Y(ST_GeomFromText(ST_AsText(runway_area))), ST_Z(ST_GeomFromText(ST_AsText(runway_area))) 
    ) 

それがうまくいかなかった - 私が得たすべての方法だったものでした意図された場所から離れる。 PostGISの非常に基本的な方法を、ローカル軸の1つの周りでジオメトリを回転させるのに欠けていますか? ST_Affine

+0

をどのようにして、「ローカル軸」、すなわち、関心のジオメトリのあなたのセットに「ローカル」、またはグリッド(SRS)軸を定義していますか?元の場合は、関心のあるジオメトリの集合の中心をどのように決定しますか? –

答えて

0

最後の三つの引数は、原点が、アフィン変換における世界的な「シフト」を表すものではありません。 ST_RotateXのドキュメントでは、この関数を使用してx軸周りに回転を生成する方法を示しています。これらのパラメータはすべて、翻訳なしのローテーションなので、ゼロです。

あなたは一般的な軸を採用する場合は、対応するrotation matrixを構築し、引数ST_Affinea,b,c,d,e,f,g,h,iとゼロにxoff, yoff, zoffを設定するために、その要素を置換する必要があります。

0

あなたは、ST_Centroidで例ST_Rotateを組み合わせることができます

ST_Rotate(ST_GeomFromText(ST_AsText(runway_area)), -pi()/3, ST_Centroid(ST_GeomFromText(ST_AsText(runway_area))) 
関連する問題