2017-05-03 35 views
2

我試圖圍繞其局部軸旋轉幾何圖形,但還沒有找到這樣做的方法。我知道對於2D計算以及(其中)ST_RotateX(請參見https://postgis.net/docs/ST_RotateX.html),有ST_Rotate(請參閱https://postgis.net/docs/ST_Rotate.html),但這些方法圍繞原點旋轉幾何。我也試圖濫用ST_Affine當我試圖改變(似乎是)原點(即0/0/0):繞其局部軸旋轉幾何圖形

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的一個非常基本的方法來圍繞它的一個本地軸旋轉幾何嗎?

+0

你如何定義「局部軸」,即「地方」到你設定的興趣,或電網(SRS)軸幾何?如果是前者,你會如何確定你感興趣的幾何圖形的中心? –

回答

0

ST_Affine的最後三個參數不代表原點,而是仿射變換中的全局「移位」。 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)))