use*_*529 5 gis postgresql postgis bing-maps bing-api
我正在使用 Bing Maps API 构建一个 javascript 应用程序,我想根据中心点和扇区参数构建扇区几何形状。
我在 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)
Run Code Online (Sandbox Code Playgroud)
我有另一个表“segemnts”,其中每个条目都有以下属性:方位角(以度为单位)、波束宽度(以度为单位)、范围(以米为单位)和centerid,它基本上是“点”表的外键:
centerid azimuth beamwidth range
1 210 60 750
2 135 30 500
3 80 60 600
4 165 90 750
Run Code Online (Sandbox Code Playgroud)
如何获取数据库中的表格或视图来选择以以上点为中心点、范围为半径、波束宽度为内角、方位角为方向的圆段?
小智 5
您可以使用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
Run Code Online (Sandbox Code Playgroud)
请注意geography,我在和之间使用了类型转换geometry来匹配预期的函数参数,并且我还乘以了s1.range两倍,因此它足够大以切割整个扇区,并且我使用 50 作为第三个st_buffer()参数,因此您的扇区足够平滑。
您的示例数据呈现为某种形式,例如:
| 归档时间: |
|
| 查看次数: |
1948 次 |
| 最近记录: |