0

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

510C101510Cplat_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'

我还附上了这个小提琴样本数据以帮助理解。

4

1 回答 1

1

是你想要的吗?获取结构的包含 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<>小提琴

注意我添加了一个额外的行以确保至少一个结构在“Qrtr_Qrtr_Sections”内。

于 2021-07-21T19:40:52.167 回答