问题描述
在 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)
请注意,我添加了额外的一行以确保“Qrtr_Qrtr_Sections”中至少有一个结构。