PostGIS 相交以根据相交状态更新字段

PostGIS Intersect to update a field based on intersected State

我承认我对 PostGIS 和数据库中的空间几何有点不适应,但这就是我所追求的:我需要用确定的相交美国州更新一个字段如果还没有一个对象。

DB结构如下:

成就

id name phys_state poly_point_line_id (fk Accomplishment_Feature)
1 Test Accomp 1 AK 123
2 Test Accomp 2 456
3 Test Accomp 3 789

Accomplishment_Feature(技术上在查询 AFAIK 中不需要,但包含在此处以防万一,因为它是成就与其几何之间的连接 table类型)

id
123
456
789

Accoomplishment_Poly

id (fk to Accomplishment_Feature) geom
123 [multipolygon geometry]

Accoomplishment_Line

id (fk to Accomplishment_Feature) geom
123 [multiline geometry]

Accoomplishment_Point

id (fk to Accomplishment_Feature) geom
123 [multipoint geometry]

我需要确定 physical_state 列中没有值的每个 geom 的相交美国状态。

我目前在我可以使用的另一个模式中有一个 table 美国州几何。

我目前有以下内容,但它出错了,我显然误解了如何编写查询。

UPDATE accomplishment a
SET a.phys_state = us_state.abbrev
FROM support_gis.state_g us_state
LEFT JOIN accomplishment_poly poly on a.poly_point_line_id = poly.id
WHERE st_intersects(st_centroid(poly.geom), us_state.geom) AND a.phys_state is null

如有任何指导或帮助,我们将不胜感激!

FROM 子句在 UPDATE 语句中的工作原理与 SELECT 中的略有不同 - 看图。另一种方法是走老路:只需将所有涉及的表放在 FROM 子句中并解决 WHERE 子句中的连接,而不是使用 JOINs.

UPDATE accomplishment 
SET phys_state = us_state.abbrev
FROM support_gis.state_g us_state, accomplishment_poly poly
WHERE 
  ST_Intersects(ST_Centroid(poly.geom), us_state.geom) AND 
  phys_state IS NULL AND
  poly_point_line_id = poly.id;