由圆心,半径内角和azymuth在PostGIS的绘图部门

问题描述 投票:1回答:1

我建我的JavaScript应用程序,使用Bing地图API,我想从中心点和扇区参数组成部门的几何形状。

我有一个表“点”的PostgreSQL数据库在顶部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

如何获得表或视图在我的数据库选择具有上述各点为中心点,如范围圈半径段,波束宽度内角和方位角的方向? enter image description here

postgresql gis postgis bing-maps bing-api
1个回答
2
投票

您可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.