【发布时间】:2021-01-09 12:33:51
【问题描述】:
我有一个包含手机信号塔信息的数据集,如下所示。 lat 和 lon 字段是塔的位置。
目标是获取蜂窝塔覆盖的扇区的面积(几何形状),从 start_angle 到 end_angle。如下图所示,以数据集的第一行为例,我可以从 start_angle 275 和 end_angle 35 获取行,但我希望缓冲区的其余部分消失。
使用的查询:
第一个查询用于创建和旋转从 start_angle 和 end_angle 开始的线以及 0 度的线。
WITH vertices AS
(SELECT
id,
start_angle,
end_angle,
(ST_DumpPoints(geom)).path[1] AS v_id,
(ST_DumpPoints(geom)).geom AS vertex
FROM celulas
), teste as
(SELECT
id,
v_id,
ST_SetSRID(ST_Translate(ST_Rotate(ST_MakeLine(ST_MakePoint( 1.0,0.0),
ST_MakePoint(-1.0,0.0)),
radians(start_angle * -1)), ST_X(vertex), ST_Y(Vertex)),
ST_SRID(vertex)) AS startline,
ST_SetSRID(ST_Translate(ST_Rotate(ST_MakeLine(ST_MakePoint( 1.0,0.0),
ST_MakePoint(-1.0,0.0)),
radians(end_angle * -1)), ST_X(vertex), ST_Y(Vertex)),
ST_SRID(vertex)) AS endline,
ST_SetSRID(ST_Translate(ST_Rotate(ST_MakeLine(ST_MakePoint( 1.0,0.0),
ST_MakePoint(-1.0,0.0)),
radians(0)), ST_X(vertex), ST_Y(Vertex)),
ST_SRID(vertex)) AS midline
FROM vertices
)
我还使用下一个查询来合并所有几何图形:半径缓冲区和线条
select St_intersection(st_split(buffer, midline), st_split(buffer, angulo))
from angulo
【问题讨论】:
-
你好。 “我希望缓冲区的其余部分消失”到底是什么意思?
-
你好。正如您在图像中看到的那样,我拥有手机信号塔的整个半径。但我只想显示从 start_angle 到 end_angle 的扇区,即从 275 度到 35 度。圆的其余部分无关紧要。
-
好的。您能否将用于创建此几何/缓冲区的查询添加到您的问题中?
标签: postgresql postgis spatial-query