本质上,如果我们有一个代表多个小流域的流线网络,是否有办法将每个子集合并,从而使每个小子盆地的输出有一个单一的多线特征?我们希望将每个片段与仅存在于每个组的下游终端段上的值关联起来。
奇怪的是,是否有一种解决方案,就像电弧中的溶解一样,不使用属性,而不是溶解在一起,它只会将那些接触/流动的人组合在一起。
我已经看到了一些解决方案,如果每个组都有一个标识属性值,那么就可以这样做,但是如果有,我们也可以在Arc中这样做。
到目前为止,我想出的最好的解决方案(我们有to_node和from_node值)是循环遍历,将每个段跟踪到其最终相关的终端下游段。这肯定需要一些时间,我觉得一定会有更好的出路。
任何帮助都将不胜感激。也许我忽略了一些简单的东西。提前感谢!
以下是当前正在运行的内容。请注意,行集名为"lines_4326",我使用一个名为"PARENT“的字段来跟踪终端to_node值,而"line_ends”是一个只保存终端段的to_node值的表(如,在该列表中的值集中没有from_node值)。
创建或替换函数"TRACE_DOWN"()在$$声明时返回无效 count_left整数; 开始 更新lines_4326 SET“父”= to_node;从lines_4326中选择计数(Gid),其中“父”不在IN (从line_ends选择to_node )到count_left中; 而count_left >0循环 从lines_4326 b中更新“父”= b.to_node,其中lines_4326。“父”= b.from_node; 从lines_4326中选择COUNT(gid),其中“父”不是IN (从lines_4326中选择to_node,其中"IS_END“= '1')进入count_left; 末端回路; $$语言'plpgsql‘易失性
发布于 2017-08-11 14:28:34
我知道这是个老职位但是..。也许这会对其他人有帮助
因此,在寻找类似ZFlyGuy问题的解决方案时,我发现了这个(这里:https://georezo.net/forum/viewtopic.php?id=71450)
select (st_dump(st_linemerge(st_union(the_geom)))).geom from lines;对我来说这是解决方案的一部分
也许我们也能帮上忙,但我还没有读过:topology.pdf
发布于 2014-09-06 10:46:33
您希望将友联市与转储结合使用。ST_Dump将将ST_Union的结果分解为单个(多)列。
Select (ST_Dump(ST_Union(line))).geom from Lines_4326;假设您的线段被称为line。
因为ST_Dump是一个集合返回函数,所以它返回一行和一个几何图形,所以您需要使用语法(ST_Dump(geomcoll)).geom来获得组成几何图形。ST_Union相当于溶解在电弧世界,不需要任何属性的工作。它将返回一个几何集合、多个几何图形或单个几何图形,这取决于输入,但在您的示例中,它将返回由(多)行串组成的几何图形集合。
例如,要在某些工具中查看输出,您需要为每个不同的几何图形创建一个id字段,这可以通过使用row_number() over()来实现,例如,
Select row_number() over() as id, (ST_Dump(ST_Union(line))).geom from Lines_4326;EDIT在OP关于这种方法的效率的评论之后,注意到了Paul (Postgis的创建者)的这篇博客文章关于在建立联盟时级联联合和有效使用索引的问题。
https://stackoverflow.com/questions/25692463
复制相似问题