Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)

本文主要是介绍Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

InVEST(Integrated Valuation of Ecosystem Servicesand Tradeoffs)生态系统服务和权衡的综合评估模型,旨在通过模拟不同土地覆被情景下生态系统物质量和价值量的变化。它提供了多种生态系统服务功能评估,包括了淡水生态系统评估、海洋生态系统评估和陆地生态系统评估三大板块。其中陆地生态系统评估包括了生物多样性、碳储量、授粉等多种模型。

文章目录

  • ——0——说在前面——
  • ——1——配置环境——
  • ——2——编写脚本——

——0——说在前面——

InVEST模型有专门的处理软件,可以在官网直接下载——https://naturalcapitalproject.stanford.edu/software/invest
在这里插入图片描述

不过,当要处理的数据量有些大时,用软件处理就十分低效不便了。这时可以用Python来批量处理。官网有相应的包下载及版本配置要求——https://invest.readthedocs.io/en/latest/scripting.html

在下载相应的包以及配置python环境的的过程可能会遇到一些报错问题,这里,我将我成功配置好的处理环境做个记录,供参考。

——1——配置环境——

  • 使用Anaconda创建一个Python3.8 的环境,
  • conda create -n invest[虚拟环境名称] python=3.8
  • 安装运行 Invest 所需的软件包。下面是官网上给出的指定版本要求的依赖包,
    复制下来,找一个文件目录新建一个文本文档rqment.txt,粘贴上去。这里注意,GDAL下载时可能会出现失败的情况,因此注释掉,另外通过.whl的方式离线安装。

在这里插入图片描述

# GDAL>=3.4.2
Pyro4==4.77  # pip-only
pandas>=1.2.1
numpy>=1.11.0,!=1.16.0
Rtree>=0.8.2,!=0.9.1
shapely>=1.7.1,<1.8.2  # https://github.com/shapely/shapely/issues/1385
scipy>=1.9.0
pygeoprocessing>=2.4.0  # pip-only
taskgraph[niced_processes]>=0.11.0  # pip-only
psutil>=5.6.6
chardet>=3.0.4
openpyxl
xlrd
pint
Babel
Flask
flask_cors
  • 在命令行中进入rqment.txt文件所在目录,再进入执行activate invest创建好的python3.8的环境,然后通过镜像批量下载文本里的所有依赖包

  • pip install -r rqment.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

  • 下载GDAL包,在下载python包的网站上——https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal找到python3.8对应的GDAL的 whl下载包,注意,版本仍要满足GDAL>=3.4.2。这里我下载的是GDAL‑3.4.3‑cp38‑cp38‑win_amd64.whl

  • 将下载好的 whl文件复制到python3.8环境的下载第三方包的目录下,一般在如下路径中D:\anaconda3\envs\invest(定义的环境名)\Lib\site-packages,在命令行中进入该环境,执行下载命令

  • pip install GDAL‑3.4.3‑cp38‑cp38‑win_amd64.whl

🆗
依赖包都安装好了之后,通过pip install natcap.invest就可以安装InVEST Python Package了。
如果安装失败,可以在https://pypi.org/project/natcap.invest/#files里下载对应版本的 whl下载包,和GDAL包一样通过本地离线方式安装。
这里我下载的是natcap.invest-3.13.0-cp38-cp38-win_amd64.whl

🆗
natcap.invest及其依赖包都安装好了后,就可以写python脚本去调用InVEST模型批处理数据了。

——2——编写脚本——

natcap.invest 包的使用很简单,代码也很简洁——传输数据参数,执行功能计算模块🆗
官网API参考文档——https://invest.readthedocs.io/en/latest/api.html
InVEST模型快速入门(参数说明)——https://invest.readthedocs.io/en/latest/models.html

使用示例:
调用Carbon Storage and Sequestration固碳模块计算碳储量
固碳模块的介绍:https://storage.googleapis.com/releases.naturalcapitalproject.org/invest-userguide/latest/zh/carbonstorage.html#id4
InVEST模型 | 软件安装与固碳模块的使用

这里只输入下面这四个参数来计算

在这里插入图片描述

import natcap.invest.carbonargs = {'workspace_dir': 'D:\\InVEST\\workspace\\my_py', # 目录的路径,该目录将在计算过程中写入输出和其他临时文件。'results_suffix': "results_suffix", # 附加到任何输出文件名'lulc_cur_path': "D:\\InVEST\\SampleData\\Carbon\\lulc_current_willamette.tif", # 目前的碳储量# 'calc_sequestration': True,# 'lulc_fut_path': "",# 'do_redd': True,# 'lulc_redd_path': "",'carbon_pools_path': "D:\\InVEST\\SampleData\\Carbon\\carbon_pools_willamette.csv", #  CSV 或索引碳的路径 存储到LULC代码# 'lulc_cur_year': "",# 'lulc_fut_year': "",# 'do_valuation': "",# 'price_per_metric_ton_of_c':"",# 'discount_rate': "",# 'rate_change': 1.0,
}
natcap.invest.carbon.execute(args)

上面代码只能处理指定路径下的一条碳储量数据,当指定路径下有上百条数据时,我们可以结合 os库 读取所有文件再批量输入参数、批量输出结果。
在这里插入图片描述

import os
import natcap.invest.carbonpath = "D:\\CCI-LC文件夹"
fileList = os.listdir(path)
for name in fileList:# print(name)# 创建与数据同名文件夹dirName = os.path.splitext(name)[0]if not os.path.exists(dirName):os.mkdir("D:\\workspace输出工作空间"+'./'+dirName)luPath = "D:\\CCI-LC文件夹\\"+namewDir = 'D:\\\workspace\\'+dirNameargs = {'workspace_dir': wDir,'results_suffix': dirName,'lulc_cur_path': luPath,'carbon_pools_path': "D:\\carbon_pools.csv",}natcap.invest.carbon.execute(args)print(dirName) # 输出计算完成了的数据文件名,方便在控制台查看执行进程

输出结果(其一)目录结构:
在这里插入图片描述

OK!


其他功能模块的计算也类似,参考官网文档学习使用就OK!

这篇关于Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/312241

相关文章

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常