gpt4 book ai didi

postgresql - 绕其局部轴旋转几何体

转载 作者:行者123 更新时间:2023-11-29 12:09:34 25 4
gpt4 key购买 nike

我试图围绕其局部轴旋转几何体,但还没有找到这样做的方法。我知道有用于 2D 计算的 ST_Rotate(参见 https://postgis.net/docs/ST_Rotate.html)和(除其他外)ST_RotateX(参见 https://postgis.net/docs/ST_RotateX.html),但是这些方法围绕起源。当我试图改变(似乎是)原点(即 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 的一种非常基本的方法,即围绕其局部轴之一旋转几何体?

最佳答案

仔细看看ST_Rotate ,并注意有三个参数签名:

geometry ST_Rotate(geometry geomA, float rotRadians);
geometry ST_Rotate(geometry geomA, float rotRadians, float x0, float y0);
geometry ST_Rotate(geometry geomA, float rotRadians, geometry pointOrigin);

最后两个签名的 x0y0pointOrigin 参数执行您的问题:它们允许旋转围绕自定义坐标。

文档中的一个示例展示了如何围绕质心顺时针旋转几何体 60 度:

SELECT ST_AsEWKT(ST_Rotate(geom, radians(-60.0), 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)

关于postgresql - 绕其局部轴旋转几何体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com