我有三张桌子:闪电,电线,桅杆。
主要领域:
lightnings.geo_belief -一个可能命中的椭圆。powerlines.geo_path -电力线路径的一条地理折线。masts.geo_coordinates -桅杆放置的地理点。任务
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';你不能为选择提出好的解决方案吗?
发布于 2012-09-13 17:09:35
以下是我一个人所做的一切:
SELECT
t.*,
ROUND(st_distance(namos_transform_meters(m.geo_coordinates), namos_transform_meters(t.geo_belief))) AS dist_m
FROM obj_powerline_masts AS m
JOIN
(
SELECT
l.*,
(SELECT id FROM nearest_mast(1, l.geo_belief)) AS mast_id
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)
LIMIT 50 OFFSET 50
) AS t
ON t.mast_id=m.id但我不确定这是否是一个最佳解决方案。例如,在PHP中,我不能将dataProviders应用于这样的查询(这是抽象的,例如,使用分页),因为我们不能以一种微不足道的方式影响子查询。
https://stackoverflow.com/questions/12411406
复制相似问题