由于大面积矢量数据难以快速进行数学计算,使用栅格数据一样能达到同样的结果。
数据:GLobeland 30
预处理:数据预处理在Arcgis和Python2.7平台上完成,包括批量投影转换、批量处理无效值、批量图幅拼接和掩膜提取。为便于精确计算面积,投影转换选用Albers等积投影,WGS-1984地理坐标系。
数据要求:是适用于面积计算的等积投影坐标系
数据属性如下图(可以不加type,光有代码一样):

步骤1:打开Spatial Analyst工具-局部分析-合并
选中要处理的不同年份的栅格(注意:30m分辨率的大面积数据跑起来还是较慢,要耐心等待)

结果如下图:
转换结果在属性表可查

2.导出属性表

点击导出,导出txt文件


3.表内分析
首先将txt文件转到表中
注意点逗号

做运算单位为平方千米:栅格分辨率×栅格分辨率/1000000。下拉改变格式

选中三列,插入数据透视表

右下方选项行是起始年份,列是目标年份,值为面积。

结果如下图所示(将类型代码替换为类型即可)

4.结果分析
黄色部分:2000-2020年(类型50:湿地)土地利用类型无变化的面积38932.38。
大红部分:2000-2020年有75556.26面积的(类型30:草地)转化为湿地。
玫红色部分(最下面一行):2020年各土地利用类型面积。
紫色部分:2000年各土地利用类型面积。

python实现

# -*- coding: utf-8 -*-
import os
import sys
import numpy as np
from sklearn.metrics import confusion_matrix
from osgeo import gdal
# reference: https://blog.csdn.net/sinat_35763722/article/details/117791706
​
def read_tif(path):g = gdal.Open(path)b = g.GetRasterBand(1)data = b.ReadAsArray(0, 0)return data
​
# 转移矩阵计算函数
def transition_matrix(Start_LUCC_image, End_LUCC_image):# 读取影像矩阵Start_LUCC_image = read_tif(Start_LUCC_image)End_LUCC_image = read_tif(End_LUCC_image)# 重排列数组。flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。lucc_start_array = np.asarray(Start_LUCC_image).flatten()lucc_end_array = np.asarray(End_LUCC_image).flatten()# 构建混淆矩阵transition_area = confusion_matrix(lucc_start_array, lucc_end_array)# 提取有效区域(去除空值),得到土地利用面积转移矩阵trans_matr = transition_area[:len(transition_area) - 1, :len(transition_area) - 1]print("transition_matrix:", "\n", trans_matr)return trans_matr
​
# 马尔科夫预测
def markov(trans_matr, Start_year, End_year, Pred_year):sum_Start_year = trans_matr.sum(axis=1)  # 按行求各地类和sum_End_year = trans_matr.sum(axis=0)  # 按列求各地类和whole_area = trans_matr.sum()  # 计算总栅格数P_End_year = sum_End_year / trans_matr.sum()  # 计算初始状态矩阵# 计算一阶转移概率矩阵Ptrans0 = np.empty(trans_matr.shape)for i in range(len(sum_Start_year)):Ptrans0[i] = trans_matr[i] / sum_Start_year[i]# 计算转移概率矩阵n = int((Pred_year - End_year) / (End_year - Start_year))print(n)E = np.identity(len(sum_Start_year))for i in range(n):E = np.dot(E, Ptrans0)Ptrans = E# 计算预测年份状态矩阵P_Pred_year = np.dot(P_End_year, Ptrans)# 计算预测年份各地类面积Pred_year_area = np.array(np.around(P_Pred_year * whole_area), dtype=int)np.set_printoptions(formatter={'float': '{: 0.6f}'.format})print("转移概率矩阵:", "\n", np.around(Ptrans, decimals=6))print("预测年份状态矩阵:", "\n", np.around(P_Pred_year, decimals=6))print("预测年份各地类面积:", Pred_year, "年\n", Pred_year_area)return Ptrans, P_Pred_year, Pred_year_area
​
# 保存计算结果
def Save(Pred_year, Ptrans, P_Pred_year, Pred_year_area):outpath = r"G:\21_能量与三北防护林\2-data\statistic\model_out_semi-humid" + str(Pred_year) + ".txt"with open(outpath, 'w') as f:  # 写入numpy.ndarray数据f.write('%d' % Pred_year)f.write(":\n")f.write("转移概率矩阵:\n")np.savetxt(f, np.round(Ptrans, 6), delimiter="\t", fmt="%.6f")f.write("预测年份状态矩阵:\n")np.savetxt(f, np.round(P_Pred_year, 6), delimiter="\t", fmt="%.6f")f.write("预测年份各地类面积:\n")np.savetxt(f, Pred_year_area, delimiter="\t", fmt="%s")f.close()  # 关闭
​
​
if __name__ == '__main__':
​lucc_st_img = r'G:\21_能量与三北防护林\2-data\land_use_CIC\TNSP_region\semi-humid\1992.tif' # 开始年份lucc_ed_img = r'G:\21_能量与三北防护林\2-data\land_use_CIC\TNSP_region\semi-humid\2015.tif' # 结束年份trans_matr = transition_matrix(lucc_st_img, lucc_ed_img)print(trans_matr)Start_year = 2000End_year = 2015Pred_year = 2020Ptrans, P_Pred_year, Pred_year_area = markov(trans_matr, Start_year, End_year, Pred_year)Save(Pred_year, Ptrans, P_Pred_year, Pred_year_area)
​

喜欢的同学一键三连呦!

超简单制作栅格数据土地利用转移矩阵(Arcgis和Python实现)相关推荐

  1. 超简单制作多系统启动U盘教程

    超简单制作多系统启动U盘教程 文章目录 超简单制作多系统启动U盘教程 前言 基本配置 配置PE系统 配置其他操作系统 前言 ​ 这两天心血来潮,本来想用Win to go做一个windows便携系统, ...

  2. 超简单制作Win7安装U盘

    超简单的话题,给新手看的,老鸟路过,想装windows7的方法可谓是多种多样,你觉得哪种方法方便就用哪种,我觉得还是用U盘来安装最Cool,携带方便而且速度快,微软自己也发布了一款傻瓜型的工具 win ...

  3. 用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)

    转载链接:http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安装 Windows7 ,下载回去后的ISO镜像文件很多人都是 ...

  4. html简单盒子代码,CSS3 3D盒子超简单制作

    这是我第一次在这里写文章,如果写得不好的话,请大家多多包涵一下. 在XX网学完CSS3之后,然后我懂了一个道理,XX网评论区域存在一个小明梗,这个梗是这样的:1+1=2, 2+2=4,问小明今年多少岁 ...

  5. WinSetupFromUSB - 超简单制作多合一系统安装启动U盘的工具 (支持Win/PE/Linux启动盘)

    很多同学都喜欢将电脑凌乱不堪的系统彻底重装以获得一个"全新的开始",但你会发现如今很多电脑都已经没有光驱了,因此制作一个U盘版的系统安装启动盘备用是非常必要的. 我们之前推荐过 I ...

  6. WinSetupFromUSB - 超简单制作多合一系统安装启动U盘的工具 (支持Win/PE/Linux启动盘)...

    很多同学都喜欢将电脑凌乱不堪的系统彻底重装以获得一个"全新的开始",但你会发现如今很多电脑都已经没有光驱了,因此制作一个U盘版的系统安装启动盘备用是非常必要的. 我们之前推荐过 I ...

  7. 超简单制作Win7安装U盘方法

    很多人想要安装 Windows7 ,下载回去后的ISO镜像文件很多人都是使用 Nero等工具刻录成光盘来安装的.但实际上,不需刻盘安装Win7的方法还是有不少的.例如使用 Daemon Tools 等 ...

  8. WinSetupFromUSB - 超简单制作多合一系统安装启动U盘的工具

    官网 http://www.winsetupfromusb.com WinSetupFromUSB是一款制作从usb磁盘(u盘和移动硬盘)启动安装操作系统的强大工具,支持各种windows.pe.li ...

  9. Unity3D_(游戏)跳一跳超简单制作过程

    跳一跳 工程文件界面 游戏界面 脚本 using DG.Tweening; using System.Collections; using System.Collections.Generic; us ...

  10. arcgis做土地利用转移矩阵(直接用栅格数据)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 本次实验主要使用arcgis的combine工具 如果你已经做好了两张土地利用类型的数据,不需要将栅格转为矢量数据→使用相交 ...

最新文章

  1. 聊一聊多源最短路径问题(只有5行代码哦)
  2. ruby中DBI连接MySQL数据库步骤详解
  3. IT绩效管理消除IT与业务之间的隔阂
  4. freemarker 学习笔记
  5. html表单和输入方法,HTML 表单和输入
  6. Chem 3D模型的参数值更改方法
  7. CMU计算机学院院长Andrew Moore离职,下一任院长人选未定
  8. for 循环 与forEach 里面return 的区别
  9. 盐城计算机考试时间安排,2019盐城中考具体时间安排 什么时候考试
  10. 【图像计数】基于matlab灰度二值化同类物体简单计数【含Matlab源码 759期】
  11. Linux一些有用的操作
  12. canvas实现简单的画图功能
  13. WatchGuard Firebox X50硬件防火墙
  14. Windows版GIT的用法
  15. Codeforces711C 【DP】
  16. bcd转ascii码 流程图_bcd码转ascii码代码
  17. 2021-04-21
  18. 网赚APP的“俄罗斯套娃”游戏
  19. 啊哈c语言第四章第六节练习1
  20. 联想V480关闭UEFI安装Win7

热门文章

  1. AppleAlc 工具 dump-coeff的使用方法
  2. python经典编程100例(1)
  3. Python 实例教程100例
  4. java中this和super的用法区别
  5. 01-ArcGIS从下载到卸载那些事儿
  6. POM文件详解(如何组织POM文件)
  7. STM32——串口通信及实验
  8. c# RestSharp(http请求)
  9. python 提取百度网盘下载_百度网盘直链提取工具下载
  10. layerdate时间插件不允许选着部分置灰效果处理