GIS操作:Mutipolygon与Polygon的转换

概念

Polygon

多边形是由1个外部边界和0个或多个内部边界定义的平面曲面。每个内部边界在多边形中定义一个孔。外部边界LinearRing定义曲面的“顶部”,即外部边界看起来沿逆时针方向穿过边界的曲面一侧。内部LinearRings将具有相反的方向,从“顶部”观察时显示为顺时针方向。多边形(定义有效多边形的规则)的定义如下:多边形在拓扑上是闭合的;

  • 多边形的边界由一组LinearRings组成,这些LinearRing构成了多边形的外部和内部边界;
  • 边界中没有两个环相交,多边形边界中的环可以在一点相交,但只能作为切线相交;
  • 多边形可能没有剪切线、尖峰或穿孔;
  • 每个多边形的内部都是一个连接的点集;
  • 具有1个或多个孔的多边形的外部未连接。每个孔都定义了外部的连接构件。

以下是多边形的一些示例:
GIS操作:Mutipolygon与Polygon的转换_第1张图片

MultiPolygon

“多重多边形”是一种元素为“多边形”的“多重曲面”。MultiPolygons的定义如下:

  • 作为MultiPolygon元素的2个多边形的内部可能不会相交;
  • 作为MultiPolygon元素的任何2个多边形的边界可能不会“交叉”,并且可能只在有限数量的点处接触;
  • 多多边形被定义为拓扑上闭合的;
  • MultiPolygon可能没有剪切线、尖峰或穿孔,MultiPolygon是一个规则的闭合点集;
  • 具有多个多边形的“多重多边形”的内部未连接;多多边形内部连接组件的数量等于多多边形中多边形的数量
  • 多多边形的边界是一组闭合曲线(LineStrings),对应于其元素多边形的边界。MultiPolygon边界中的每条曲线正好位于1个元素Polygon的边界中,而元素Polygon边界上的每条曲线都位于MultiPolygon的边缘中。

以下是“多重多边形”的一些示例:
GIS操作:Mutipolygon与Polygon的转换_第2张图片

载体

shapefile

Esri的Shapefile中并没有区分Polygon与MultiPolygon,统一称之为Polygon(MultiPolygon)在ArcMap实际操作过程中,多边形以顺时针顺序创建,多边形内部的洞以逆时针创建,洞内部的岛以顺时针顺序创建。
GIS操作:Mutipolygon与Polygon的转换_第3张图片

WKT与GeoJson

Type GeoJson WKT 效果(geojson.io)
Polygon { “type”: “Polygon”, “coordinates”: [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] } POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
{ “type”: “Polygon”, “coordinates”: [ [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]] ] } POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))
MultiPolygon { “type”: “MultiPolygon”, “coordinates”: [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] } MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
((15 5, 40 10, 10 20, 5 10, 15 5)))
{ “type”: “MultiPolygon”, “coordinates”: [ [ [[40, 40], [20, 45], [45, 30], [40, 40]] ], [ [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]] ] ] } MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),
((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),
(30 20, 20 15, 20 25, 30 20)))

此部分示例参考 开源GIS(十九)——WKT、WKB与GeoJSON

转换

操作:ArcMap将shp文件中的MultiPolygon转为Polygon

大概执行过程如下:

  • 工具箱-Data Management Tools-要素-多部件至单部件
  • 选择要转换的图层,执行工具,输出到新的Shp文件中

GIS操作:Mutipolygon与Polygon的转换_第4张图片

**转换后值得注意的几个点:
**(1)原本的单个要素仍为单个要素;
(2)多个Polygon组成的MultiPolygon要素会被拆分成为两个要素;
GIS操作:Mutipolygon与Polygon的转换_第5张图片GIS操作:Mutipolygon与Polygon的转换_第6张图片
(3)一个不带洞和一个带洞组成的MultiPolygon要素会被拆分为两个要素;
GIS操作:Mutipolygon与Polygon的转换_第7张图片GIS操作:Mutipolygon与Polygon的转换_第8张图片GIS操作:Mutipolygon与Polygon的转换_第9张图片
(4)原本仅有一个洞组成的要素依然保持不变;
GIS操作:Mutipolygon与Polygon的转换_第10张图片GIS操作:Mutipolygon与Polygon的转换_第11张图片
(5)一个带洞且洞中含有岛的MultiPolygon,会以带洞本身要素执行拆分。
GIS操作:Mutipolygon与Polygon的转换_第12张图片GIS操作:Mutipolygon与Polygon的转换_第13张图片GIS操作:Mutipolygon与Polygon的转换_第14张图片

操作:GeoJson-MultiPolygon转为Polygon

  • **情况1:**每个几何类型为MultiPolygon的Feature并不存在多个Polygon的时候

这种情况下只需要修改geometry.type从“MultiPolygon”到“Polygon”,然后将geometry.coordinate对应的第一级[]标签删除即可。

  • **情况2:**几何类型为MultiPolygon的Feature存在多个Polygon的时候

这种情况举一个例子,比如我们具有一份区域建筑的GeoJson数据,其中包含有多个要素,每个要素代表一项建筑物平面分布,其中每个要素都具有“建筑名称”的属性;其中有一个要素,代表停车场,其几何类型为MultiPolygon,这个MultiPolygon中具有多个Polygon,代表一个个的停车位。假设我们的需求是根据这份GeoJson文件提取出区域停车场车位分布数据,每一个车位独立成为要素。大概操作流程如下:

**通过ArcMap
**(1)处理原始GeoJson文件,仅保留要素集合中的“停车场”要素;
(2)ArcMap,工具箱 - Convention Tools - Json - Json转要素,转换成shp文件(停车场.shp)
(3)ArcMap,工具箱 - Data Management Tools - 要素 - 多部件至单部件,选择停车场.shp,输出为停车场_single.shp
(4)ArcMap,工具箱 - Convention Tools - Json - 要素转Json,转成GeoJson文件,此时查看其几何类型已变成Polygon

通过QGIS(便捷,推荐)
(1)Browser中找到目标geojson文件加载到地图中;
(2)Layers - 右键 - Open Attribute Table - 双击记录选中要素
GIS操作:Mutipolygon与Polygon的转换_第15张图片
(3)工具箱 - Vector geometry - Multipart to singleparts - 填入参数 - 执行
GIS操作:Mutipolygon与Polygon的转换_第16张图片
(4)执行结果
GIS操作:Mutipolygon与Polygon的转换_第17张图片
GIS操作:Mutipolygon与Polygon的转换_第18张图片

你可能感兴趣的:(GIS,算法)