Arcgis-Tools_04使用Python制作土地利用转移矩阵

实现目的:分析多个省的国土和林地一张图的地类对应关系,林地作为主体。

1、数据准备

因操作过程中发现,以省为单位进行分析,数据量巨大,且最终结果只关注地类映射关系,采取如下操作:

对一张图进行修复几何——按照省、县、地类融合(不作为多部件)——使用国土标识林地——计算面积

注:此过程耗时较长,数据量巨大,各过程文件要存储在文件地理数据库,避免使用shp文件;可使用模型构建器创建上面流程,自动执行。

2、数据分析

  • 可使用数据库分析,将数据导入数据库,再执行sql语句,此操作过于繁琐,涉及数据多次导入导出。

  • 使用arcpy数据分析模块的arcpy.da.FeatureClassToNumPyArray函数(版本10.1以后)、 Python pandas和numpy模块分析,主要使用pandas的pivot_table函数。

import arcpy, time
import pandas as pd
import numpy as np

start = time.clock()
pd.set_option('display.width', 500)
myarray = arcpy.da.FeatureClassToNumPyArray(
    r"J:TT林地标识1.gdb青海PairwiseDiss_Identity",
    ["XIAN", "县名", "DI_LEI", "DLMC", "MJ"])
mydf = pd.DataFrame(myarray)
ddf = pd.pivot_table(mydf, index=["XIAN", "县名", "DI_LEI"], columns=["DLMC"], values=["MJ"], aggfunc=np.sum,
                     fill_value=0, margins=True)
# 不创建映射表,只产生原始分组统计
# ddf = pd.pivot_table(mydf, index=["XIAN", "县名", "DI_LEI", "DLMC"], values=["MJ"], aggfunc=np.sum,
                     # fill_value=0)
# 若安装了openpyxl可直接导出为excel,可选择是否合并单元格
# ddf.to_excel("青海.xlsx",merge_cells=False) 
ddf.to_csv("青海.csv")
end = time.clock()
print("运行时间:", end - start)

csv结果如下(展示数据为无效数据)

image-20200420111253579

3、pandas的pivot_table函数

微信图片_20200420111431
原文地址:https://www.cnblogs.com/bigmonk/p/12963332.html