我有 3 张桌子:闪电、电力线、桅杆。
主要领域:
lightnings.geo_belief
- 可能击中的椭圆。powerlines.geo_path
- 电力线路径的地理折线。masts.geo_coordinates
- 桅杆放置的地理点。
任务:
- 计算击中电力线走廊的雷击(5000 米 - 其半径,并由函数生成为几何图形
powerline_corridor()
) - 获取有关电力线桅杆的信息,最接近相应的闪电击中,并获取到的距离。
lightning.geo_ellipse
masts.geo_coordinates
所以我可以选择闪电:
SELECT l.*
FROM lightnings l
JOIN ( SELECT geo_path, powerline_corridor(geo_path, 5000::smallint) AS geo_zone
FROM powerlines WHERE id=1)
AS by_pl
ON ST_Intersects(by_pl.geo_zone, l.geo_belief)
我也有这个功能namos_nearest_mast(powerlines.id, lightnings.geo_belief)
:
CREATE OR REPLACE FUNCTION public.namos_nearest_mast (
powerline_id integer,
geo public.geometry
)
RETURNS public.obj_powerline_masts AS
$body$
SELECT *
FROM obj_powerline_masts
WHERE powerline_id=$1
ORDER BY $2 <-> geo_coordinates ASC
LIMIT 1
$body$
LANGUAGE 'sql';
您不能提出好的选择解决方案吗?