gpt4 book ai didi

postgresql - 在postgis中按中心点、半径、内角和方位角绘制扇区

转载 作者:行者123 更新时间:2023-11-29 12:50:51 30 4
gpt4 key购买 nike

我正在使用 Bing Maps API 构建一个 javascript 应用程序,我想根据中心点和扇形参数构成扇形几何图形。

我在 PostgreSQL 数据库中有一个表“points”,顶部是 PostGIS,它包含点几何图形:

id  st_astext(geom)
1 POINT(4.331 50.869)
2 POINT(4.323 50.832)
3 POINT(4.373 50.853)
4 POINT(4.356 50.837)

我有另一个表“segemnts”,其中每个条目都有以下属性:方位角(以度为单位)、波束宽度(以度为单位)、范围(以米为单位)和基本上是“点”表外键的 centerid:

centerid    azimuth beamwidth   range
1 210 60 750
2 135 30 500
3 80 60 600
4 165 90 750

如何在我的数据库中获取表格或 View 以选择以上述点为中心点、范围为半径、波束宽度为内角、方位角为方向的圆段?

enter image description here

最佳答案

您可以使用 st_buffer() 在您的点周围获得给定半径的圆,而不是使用 st_project() 构建内角等于您的波束宽度的三角形,而不是您可以将它们相交以获得扇形几何图形,例如:

create view sectors as 
select s1.*, st_intersection(st_buffer(p1.geom::geography, s1.range, 50)::geometry, st_makepolygon(st_makeline(array[p1.geom, st_project(p1.geom::geography, s1.range*2, radians(s1.azimuth-s1.beam/2))::geometry, st_project(p1.geom::geography, s1.range*2, radians(s1.azimuth+s1.beam/2))::geometry, p1.geom]))) as geom
from sector s1
left join points p1
on p1.id=s1.centerid

注意,我在 geographygeometry 之间使用类型转换来匹配预期的函数参数,我还乘以 s1 .range 两个,所以它足够大,可以切割整个扇区,我使用 50 作为第三个 st_buffer() 参数,所以你的扇区足够平滑。

您的示例数据呈现为某些内容,例如:

enter image description here

关于postgresql - 在postgis中按中心点、半径、内角和方位角绘制扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54350015/

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