Arcgis操作系列一:shp矢量数据的面积计算

目录

  • 前言
  • 一、Arcgis中计算湿地面积占城市的比例
  • 二、python求湿地占城市的面积比例


前言

经常需要知道一个城市中湿地、绿地、道路等在整个城市占地的百分比,在这里我用Arcgis和python分别演示给大家看。


一、Arcgis中计算湿地面积占城市的比例

1、这里以新奥尔良城市为例,这是一张包含新奥尔良城市在内的水体和湿地的shp文件图。
Arcgis操作系列一:shp矢量数据的面积计算_第1张图片
2、打开属性表,可以看到Feature分为多种类型:Lake(水体)和Swamp or Marsh等(这里把水体外的统称为湿地)。Arcgis操作系列一:shp矢量数据的面积计算_第2张图片
3、按属性选择筛选出湿地
Arcgis操作系列一:shp矢量数据的面积计算_第3张图片
Arcgis操作系列一:shp矢量数据的面积计算_第4张图片
4、把新奥尔良城市和湿地shp图(包含奥尔良城市在内)进行相交,得到奥尔良城市的湿地图
Arcgis操作系列一:shp矢量数据的面积计算_第5张图片
5、打开奥尔良城市的湿地图属性表,新建属性字段area,通过字段计算器得到每个要素的面积。
Arcgis操作系列一:shp矢量数据的面积计算_第6张图片
Arcgis操作系列一:shp矢量数据的面积计算_第7张图片
6、同样的,我们计算新奥尔良城的面积
Arcgis操作系列一:shp矢量数据的面积计算_第8张图片
7.计算湿地占比
新奥尔良城湿地各个要素的总和如下
Arcgis操作系列一:shp矢量数据的面积计算_第9张图片

Arcgis操作系列一:shp矢量数据的面积计算_第10张图片

二、python求湿地占城市的面积比例

代码如下:

import os
from osgeo import ogr
from ospybook.vectorplotter import VectorPlotter
vp = VectorPlotter(True)
data_dir = r'C:\\Users\\zijiancao\\Desktop\\osgeopy-data\\osgeopy-data\\osgeopy-data'
#打开该地址的数据源
water_ds = ogr.Open(os.path.join(data_dir, 'US', 'wtrbdyp010.shp'))
#获取图层,shp文件只有1个图层
water_lyr = water_ds.GetLayer(0)
# 得出湿地。这里按属性选择出湿地,不是lake都认为是湿地
water_lyr.SetAttributeFilter("Feature != 'Lake'")
#通过clone复制湿地图层
marsh_feat = water_lyr.GetNextFeature()
marsh_geom = marsh_feat.geometry().Clone()
# 获得新奥尔良边城市边界
nola_ds = ogr.Open(os.path.join(data_dir, 'Louisiana', 'NOLA.shp'))
nola_lyr = nola_ds.GetLayer(0)
#通过clone复制奥尔良湿地图层
nola_feat = nola_lyr.GetNextFeature()
nola_geom = nola_feat.geometry().Clone()
#空间过滤。求出奥尔良城市的所有湿地
water_lyr.SetSpatialFilter(nola_geom)
wetlands_area = 0
# 累加多边形面积
for feat in water_lyr:
    intersect = feat.geometry().Intersection(nola_geom)
    wetlands_area += intersect.GetArea()
pcnt = wetlands_area / nola_geom.GetArea()
print('{:.1%} of New Orleans is wetland'.format(pcnt))



结果图:

你可能感兴趣的:(Arcgis操作系列一:shp矢量数据的面积计算)