微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过在 Postgresql 中的字母数字序列中添加下一个,触发在 qgis 中放置一个点以自动完成一列

如何解决通过在 Postgresql 中的字母数字序列中添加下一个,触发在 qgis 中放置一个点以自动完成一列

在 QGIS 中,我有一个点表和一个区域表。当我在一个区域中放置一个点时,我需要发生以下情况。获取放置新点的区域的 ID(称为 plat_page)。然后我想根据该区域中已经存在的点将序列中的下一个值插入到名为“node_id”的列中的新条目中。我的问题是序列是字母数字,其中前 4 个字符是 plat_page,后三个是序列。同样,我不确定如何辨别我放置新点的区域。“node_id”看起来像这样:

510C101 其中 510C 是 plat_page,而 101 是我需要排序的数字。

这是一个例子,我在一个带有 plat_page 610C 的区域中放置了一个点。我想获取 plat_page,然后检查现有序列中的最高值是多少,比如说 100。然后我想生成序列 610C101 中的下一个值并将其插入到名为“node_id”的列中。

到目前为止,我有一种方法可以获取给定 plat_page 序列中的最高数字,但我想通过让插入点决定该 plat 页面是什么来自动执行此过程。同样,我不确定如何对最后一个数字进行排序,然后将其附加到 plat_page 值以生成“node_id”。以下是我所拥有的代码

SELECT MAX(RIGHT ("node_id",3)::numeric) from sewers.structures
    WHERE(
    ST_WITHIN(
        ST_CENTROID((ST_SetSRID(structures.geom,4326))),ST_SetSRID((SELECT geom FROM sewers."Qrtr_Qrtr_Sections" WHERE "plat_page" = '510D'),4326)) ) and "node_id" != 'PRIVATE'

我还附上了此 fiddle 和示例数据以帮助理解。

解决方法

这是你想要的吗?获取包含 plat_page 和结构的下一个 id。为简单起见省略 ST_SetSRID,假设所有几何图形都具有相同的 SRID。

select qqs.plat_page,(select MAX(RIGHT (s2."node_id",3)::numeric) 
      from structures s2
      where ST_WITHIN(ST_CENTROID(s2.geom),qqs.geom)) + 1 id,s.*
from structures s 
join "Qrtr_Qrtr_Sections" qqs on ST_WITHIN(ST_CENTROID(s.geom),qqs.geom)

db<>fiddle

请注意,我添加了额外的一行以确保“Qrtr_Qrtr_Sections”中至少有一个结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。