我有以下问题:我有一个纬度和经度点的数据集,我想计算所有这些点之间的最短距离。
虽然我找到了一个解决方案,它在显式指定参数时有效,但使用查询来获取这些参数当前都失败了。我的查询如下:
with data as(
SELECT testlonglat.*,f as id
FROM testlonglat, LATERAL get_closest_node( long,lat) f),
sourced as (
SELECT array_agg(id) from data where source = true),
targetd as (
SELECT array_agg(id) from data where source = false)
SELECT *
FROM sourced,
targetd,
LATERAL pgr_dijkstra(
'SELECT id,source,target,length::float8 AS cost FROM us1'::text,
sourced,
targetd,
false)
变量数据的第一个子查询获得每个纬度/经度坐标的节点ID。随后的sourced和targetd只是将这个大型数据集划分为源节点和目标节点,并将所有行连接成一个数组。结果数据集仅包含1个带数组的记录。
主查询应用pgr_dijkstra查找所有源节点和所有目标节点之间的最短路径。该算法的签名是
pgr_dijkstra(text,anyarray,anyarray,boolean)
但是,所述查询会生成记录并尝试调用以下函数
pgr_dijkstra(text,record,record,boolean)
有没有办法解决这个问题?将记录变量显式地转换为任何数组(例如,sourced :: bigint [])只会引发另一个异常,说明这种转换是不可能的。
感谢您的帮助。
答案 0 :(得分:1)
with data as(
select testlonglat.*,f as id
from testlonglat, lateral get_closest_node( long,lat) f
), sourced as (
select array_agg(id) as aid from data where source = true
), targetd as (
select array_agg(id) as aid from data where source = false
)
select *
from
sourced,
targetd,
lateral pgr_dijkstra (
'select id,source,target,length::float8 as cost from us1'::text,
(select aid from sourced),
(select aid from targeted),
false
)