我有一个包含大约 60 个类的 .shp 文件,想要计算每个类相对于整个面积的面积。 假设有两个类,称为“森林”和“道路”,我想自动提取属于前两个类的所有多边形,计算它们相应的面积,然后获取每个类占整个覆盖区域的百分比面积所有班级。 如果用 Python 或 QGIS 来做就太好了
我编写的代码应该可以解决我的问题:
import geopandas as gpd
import pandas as pd
import csv
pd.options.display.max_rows = 999
vec_data = gpd.read_file("shapefile.shp")
vec_data = vec_data.set_index("class_name")
with pd.option_context('display.max_rows', None):
vec_data["area"] = vec_data.area
vec_data.area.to_csv('vec_data.csv', encoding='utf-8', index=True,header=False, quotechar="'", na_rep='0')
index = {}
with open('vec_data.csv', newline='') as csv_file:
cr = csv.reader(csv_file)
for row in cr:
index.setdefault(row[0], []).append(float(row[1]))
with open('vec_data2.csv', 'w', newline='\n') as csv_file:
writer = csv.writer(csv_file)
for key, values in index.items():
##CALCULATE the %
values = (sum(values)/float(5.76258e9))*100
writer.writerow([key, value])
print('done')
欢迎任何建议