Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql ArcMap联合的PostGIS等价物_Postgresql_Union_Postgis_Arcmap - Fatal编程技术网

Postgresql ArcMap联合的PostGIS等价物

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

在PostGIS/PostgreSQL中,ArcMap中的操作等效于什么

假设您有两个分别具有两个特征的形状文件。(PostGIS等效:两个表,两行,多边形几何)

然后,结果将是1个具有7个特征的shapefile。(PostGIS等价物:具有7行几何图形的表)


我看过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)