使用Postgis绘制相机范围

Ara*_*gon 6 postgresql postgis openlayers

我正在研究一些相机数据.我有一些点,包括方位角,角度,距离,当然还有坐标字段属性.在postgresql postgis中我想用函数绘制这样的形状.

我怎么画这个粉红色的范围形状?起初我应该绘制360度圆然后从我的形状中提取...我不知道怎么做?

在此输入图像描述

Nat*_*ate 4

我将用您的半径距离围绕点(x,y)创建一个圆,然后使用下面的信息创建一个高度大于半径的三角形。

然后使用这两个多边形在两个几何图形之间进行 ST_Intersection。

注意:此方法仅在角度小于 180 度时有效。

请注意,如果延伸外边缘并与弧的中点以 90 度角相交,则会有一个角度和一条相邻边。现在你可以SOH CAH TOA了!

延伸并制作直角三角形

获得 B 点和 C 点

令 A 点 = (x,y)

要获得最高点:

B 点 = (x + 半径, y + (r * tan(角度)))

得到底点:

点 C = (x + 半径, y - (r * tan(角度)))

将三角形旋转到你的方位角

现在您已经有了三角形,您需要将其旋转到您的方位角,轴心点为 A。这意味着您在进行旋转时需要将 A 点置于原点。旋转是最棘手的部分。它一直用于计算机图形学。(实际上,如果您了解 OpenGL,您可以让它为您完成旋转。)

注意:此方法绕原点逆时针旋转一个角度 (theta)。您可能需要相应地调整方位角。

第一步: 平移三角形,使 A(原始 x,y)位于 0,0。无论您对 x 和 y 添加/减去什么,对其他两点执行相同的操作。

(你需要平移它,因为你需要A点位于原点)

第二步:然后使用旋转矩阵旋转 B 点和 C 点。更多信息在这里,但我会给你公式:

旋转矩阵

Your new point is (x', y')
Run Code Online (Sandbox Code Playgroud)

对 B 点和 C 点执行此操作。

第三步:通过加减法将它们翻译回原来的位置。如果上次减去 x,这次加上。

最后,使用点 {A,B,C} 创建一个三角形。

然后执行 ST_Intersection(geom_circle,geom_triangle);

因为这需要大量计算,所以最好编写一个程序来执行所有这些计算,然后填充表。