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
子句中的连接,而不是使用 JOIN
s.
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;
我承认我对 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
子句中的连接,而不是使用 JOIN
s.
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;