Postgresql ArcMap联合的PostGIS等价物
在PostGIS/PostgreSQL中,ArcMap中的操作等效于什么 假设您有两个分别具有两个特征的形状文件。(PostGIS等效:两个表,两行,多边形几何) 然后,结果将是1个具有7个特征的shapefile。(PostGIS等价物:具有7行几何图形的表)Postgresql ArcMap联合的PostGIS等价物,postgresql,union,postgis,arcmap,Postgresql,Union,Postgis,Arcmap,在PostGIS/PostgreSQL中,ArcMap中的操作等效于什么 假设您有两个分别具有两个特征的形状文件。(PostGIS等效:两个表,两行,多边形几何) 然后,结果将是1个具有7个特征的shapefile。(PostGIS等价物:具有7行几何图形的表) 我看过ST_Intersect、ST_Union和ST_Collect,但找不到正确的组合。非常感谢你的帮助 以下是基于以下答案的工作查询: 从a)读到d): 结果: 非常感谢迈克尔·恩廷 -- input data with po
我看过ST_Intersect、ST_Union和ST_Collect,但找不到正确的组合。非常感谢你的帮助 以下是基于以下答案的工作查询: 从a)读到d): 结果:
非常感谢迈克尔·恩廷
-- input data
with polys1 AS (
SELECT 1 df1, ST_GeogFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))') g
UNION ALL
SELECT 2, ST_GeogFromText('Polygon((2 2, 4 2, 4 4, 2 4, 2 2))')
),
polys2 AS (
SELECT 1 df2, ST_GeogFromText('Polygon((1 1, 3 1, 3 3, 1 3, 1 1))') g
UNION ALL
SELECT 2, ST_GeogFromText('Polygon((3 3, 5 3, 5 5, 3 5, 3 3))')
),
-- left and right unions
union1 AS (
SELECT ST_UNION_AGG(g) FROM polys1
),
union2 AS (
SELECT ST_UNION_AGG(g) FROM polys2
),
-- various combinations of intersections
pairs AS (
SELECT df1, df2, ST_INTERSECTION(a.g, b.g) g FROM polys1 a, polys2 b WHERE ST_INTERSECTS(a.g, b.g)
UNION ALL
SELECT df1, NULL, ST_DIFFERENCE(g, (SELECT * FROM union2)) g FROM polys1
UNION ALL
SELECT NULL, df2, ST_DIFFERENCE(g, (SELECT * FROM union1)) g FROM polys2
)
SELECT * FROM pairs WHERE NOT ST_IsEmpty(g)
请在gis.se上查看此答案:注意
ST_ExteriorRing
会掉任何洞ST_Boundary
将保留内环,但也将在内环内创建多边形。
-- input data
with polys1 AS (
SELECT 1 df1, ST_GeogFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))') g
UNION ALL
SELECT 2, ST_GeogFromText('Polygon((2 2, 4 2, 4 4, 2 4, 2 2))')
),
polys2 AS (
SELECT 1 df2, ST_GeogFromText('Polygon((1 1, 3 1, 3 3, 1 3, 1 1))') g
UNION ALL
SELECT 2, ST_GeogFromText('Polygon((3 3, 5 3, 5 5, 3 5, 3 3))')
),
-- left and right unions
union1 AS (
SELECT ST_UNION_AGG(g) FROM polys1
),
union2 AS (
SELECT ST_UNION_AGG(g) FROM polys2
),
-- various combinations of intersections
pairs AS (
SELECT df1, df2, ST_INTERSECTION(a.g, b.g) g FROM polys1 a, polys2 b WHERE ST_INTERSECTS(a.g, b.g)
UNION ALL
SELECT df1, NULL, ST_DIFFERENCE(g, (SELECT * FROM union2)) g FROM polys1
UNION ALL
SELECT NULL, df2, ST_DIFFERENCE(g, (SELECT * FROM union1)) g FROM polys2
)
SELECT * FROM pairs WHERE NOT ST_IsEmpty(g)