jjzjj

Google earth engine——全球森林碳通量(2001-2021)数据集可视化含代码

此星光明 2023-03-28 原文
全球森林碳通量(2001-2021)

森林碳净通量是指2001年至2021年期间森林与大气之间的碳净交换量,计算方法是模型期间森林排放的碳与森林移除(或封存)的碳之间的平衡(兆克CO2排放量/公顷)。净碳通量的计算方法是将每个建模像素的年平均总清除量减去年平均总排放量;负值是指2001年至2021年期间森林为净碳汇,正值是指森林为净碳源。根据Hansen等人(2013)的全球森林变化树木覆盖率变化数据,在2000年存在森林或在2000年至2012年间建立森林的每个像素中,按照IPCC国家温室气体清单指南计算净通量。该层反映了模型期间(2001-2021年)的累积净通量,必须除以21才能得到年平均净通量;净通量值不能分配给模型的个别年份。

森林汇对大气的碳清除量(固存)是指在2001-2021年模型期间,已建和新植森林生长所捕获的累计碳(百万克CO2/公顷)。清除量包括地上和地下活体树木生物量中的碳积累。按照IPCC第一级假设的森林剩余量,枯木、废弃物和土壤碳库的移除量被假定为零。在每个像素中,按照IPCC国家温室气体清单指南计算碳清除量,其中森林在2000年存在或根据Hansen等人(2013)的全球森林变化树木覆盖率损失数据在2000年至2012年间建立。每个像素的碳移除量是基于森林类型(如红树林、种植园)、生态区(如潮湿的新热带地区)、林龄(如原始森林、古老的次生森林)和碳移除年数的地图。该层反映了模型期间(2001-2021年)的累积清除量,必须除以21才能得到模型期间的年平均数;清除率不能分配给模型的个别年份。


森林碳排放是指在每个模型年度发生的林分替代森林干扰所产生的温室气体排放(兆克二氧化碳排放/公顷,2001年至2021年)。排放量包括所有相关的生态系统碳库(地上生物量、地下生物量、枯木、垃圾、土壤)和温室气体(CO2、CH4、N2O)。每个像素的排放估计值是按照IPCC国家温室气体清单指南计算的,其中发生了林木替代干扰,如Hansen等人(2013)的全球森林变化年度树木覆盖损失数据中的映射。每个像素的碳排放是基于2000年的碳密度,并对2000年和干扰年之间的碳积累进行调整。排放反映了一个总的估计,即不包括随后重新生长的碳清除量。相反,清除后的再生所产生的总碳清除量被计入配套的森林碳清除层中。每个像素在受到干扰时的碳排放部分(排放因子)受到几个因素的影响,包括干扰的直接驱动因素、是否在观察到的干扰事件的当年或之前观察到火灾、干扰是否发生在泥炭上等等。所有的排放都假定发生在扰动的那一年。可以利用汉森树木覆盖物损失数据将排放量分配到特定年份。


所有这三层都是Harris等人(2021)描述的森林碳通量模型的一部分。本文介绍了一个用于估计全球森林碳通量的地理空间监测框架,它可以帮助政府和非政府行为者跟踪森林的温室气体通量,减少森林的排放或增加森林的清除。所有的输入层都被重新取样到每个0.00025 x 0.00025度的共同分辨率,以匹配Hansen等人(2013)。也请在全球森林观察上找到该数据集

​https://gfw.global/3jLklJ9​

数据集预处理

三层排放、清除和净流量的平铺图像在摄取前使用GDAL合并为单独的GEE图像对象。LZW压缩,并在马赛克操作过程中进行了平铺。

代码:

var emissions = ee.Image("projects/sat-io/open-datasets/forest_carbon_fluxes/gross_emissions");
var removals = ee.Image("projects/sat-io/open-datasets/forest_carbon_fluxes/gross_removals");
var net_flux = ee.Image("projects/sat-io/open-datasets/forest_carbon_fluxes/net_flux");
// 设定可视化参数. Adjust `quantity` for breakpoints.
var emissions_intervals =
'<RasterSymbolizer>' +
' <ColorMap type="intervals" extended="false" >' +
'<ColorMapEntry color="#f5e9ee" quantity="0" label="No Data"/>' +
'<ColorMapEntry color="#f0d3df" quantity="50" label="Gross Emissions"/>' +
'<ColorMapEntry color="#d8afbc" quantity="100" label="Gross Emissions"/>' +
'<ColorMapEntry color="#d687a4" quantity="175" label="Gross Emissions"/>' +
'<ColorMapEntry color="#c75d9d" quantity="250" label="Gross Emissions"/>' +
'<ColorMapEntry color="#c72a80" quantity="350" label="Gross Emissions"/>' +
'<ColorMapEntry color="#a62177" quantity="450" label="Gross Emissions"/>' +
'<ColorMapEntry color="#96267e" quantity="550" label="Gross Emissions"/>' +
'<ColorMapEntry color="#872782" quantity="650" label="Gross Emissions"/>' +
'<ColorMapEntry color="#782b8a" quantity="800" label="Gross Emissions"/>' +
'<ColorMapEntry color="#662d91" quantity="1000" label="Gross Emissions"/>' +
'<ColorMapEntry color="#592a85" quantity="1100" label="Gross Emissions"/>' +
'<ColorMapEntry color="#4c287a" quantity="1300" label="Gross Emissions"/>' +
'<ColorMapEntry color="#402773" quantity="1900" label="Gross Emissions"/>' +
'<ColorMapEntry color="#35256b" quantity="2600" label="Gross Emissions"/>' +
'<ColorMapEntry color="#262260" quantity="3652" label="Gross Emissions"/>' +
'</ColorMap>' +
'</RasterSymbolizer>';

var removals_intervals =
'<RasterSymbolizer>' +
' <ColorMap type="intervals" extended="false" >' +
'<ColorMapEntry color="#ffecaa" quantity="0" label="Gross Removals"/>' +
'<ColorMapEntry color="#ffe991" quantity="15" label="Gross Removals"/>' +
'<ColorMapEntry color="#fce479" quantity="25" label="Gross Removals"/>' +
'<ColorMapEntry color="#fcde5a" quantity="35" label="Gross Removals"/>' +
'<ColorMapEntry color="#fcdc3a" quantity="45" label="Gross Removals"/>' +
'<ColorMapEntry color="#f9d800" quantity="55" label="Gross Removals"/>' +
'<ColorMapEntry color="#e8d31b" quantity="70" label="Gross Removals"/>' +
'<ColorMapEntry color="#BAD12F" quantity="90" label="Gross Removals"/>' +
'<ColorMapEntry color="#bfc64e" quantity="110" label="Gross Removals"/>' +
'<ColorMapEntry color="#aac138" quantity="130" label="Gross Removals"/>' +
'<ColorMapEntry color="#96bc3e" quantity="150" label="Gross Removals"/>' +
'<ColorMapEntry color="#7ba53d" quantity="190" label="Gross Removals"/>' +
'<ColorMapEntry color="#629144" quantity="250" label="Gross Removals"/>' +
'<ColorMapEntry color="#4a8239" quantity="380" label="Gross Removals"/>' +
'<ColorMapEntry color="#307038" quantity="700" label="Gross Removals"/>' +
'<ColorMapEntry color="#0e6030" quantity="1500" label="Gross Removals"/>' +
'</ColorMap>' +
'</RasterSymbolizer>';

var net_flux_intervals =
'<RasterSymbolizer>' +
' <ColorMap type="intervals" extended="false" >' +
'<ColorMapEntry color="#0e6030" quantity="-1500" label="Net Flux"/>' +
'<ColorMapEntry color="#307038" quantity="-700" label="Net Flux"/>' +
'<ColorMapEntry color="#4a8239" quantity="-250" label="Net Flux"/>' +
'<ColorMapEntry color="#629144" quantity="-180" label="Net Flux"/>' +
'<ColorMapEntry color="#7ba53d" quantity="-150" label="Net Flux"/>' +
'<ColorMapEntry color="#b5bf28" quantity="-120" label="Net Flux"/>' +
'<ColorMapEntry color="#BFC64E" quantity="-100" label="Net Flux"/>' +
'<ColorMapEntry color="#94DE26" quantity="-80" label="Net Flux"/>' +
'<ColorMapEntry color="#B1E717" quantity="-70" label="Net Flux"/>' +
'<ColorMapEntry color="#cfed4f" quantity="-50" label="Net Flux"/>' +
'<ColorMapEntry color="#fce479" quantity="-30" label="Net Flux"/>' +
'<ColorMapEntry color="#ffe991" quantity="-15" label="Net Flux"/>' +
'<ColorMapEntry color="#ffecaa" quantity="35" label="Net Flux"/>' +

'<ColorMapEntry color="#f0d3df" quantity="60" label="Net Flux"/>' +
'<ColorMapEntry color="#d8afbc" quantity="80" label="Net Flux"/>' +
'<ColorMapEntry color="#d687a4" quantity="100" label="Net Flux"/>' +
'<ColorMapEntry color="#c75d9d" quantity="150" label="Net Flux"/>' +
'<ColorMapEntry color="#c72a80" quantity="200" label="Net Flux"/>' +
'<ColorMapEntry color="#a62177" quantity="275" label="Net Flux"/>' +
'<ColorMapEntry color="#96267e" quantity="350" label="Net Flux"/>' +
'<ColorMapEntry color="#872782" quantity="500" label="Net Flux"/>' +
'<ColorMapEntry color="#782b8a" quantity="700" label="Net Flux"/>' +
'<ColorMapEntry color="#662d91" quantity="1000" label="Net Flux"/>' +
'<ColorMapEntry color="#4c287a" quantity="1300" label="Net Flux"/>' +
'<ColorMapEntry color="#402773" quantity="1900" label="Net Flux"/>' +
'<ColorMapEntry color="#35256b" quantity="2600" label="Net Flux"/>' +
'<ColorMapEntry color="#262260" quantity="3652" label="Net Flux"/>' +
'</ColorMap>' +
'</RasterSymbolizer>';


// Layers not displayed, just to get the pixel values with pixel inspector
Map.addLayer(emissions, {}, 'Gross emissions values',false);
Map.addLayer(removals, {}, 'Gross removals values',false);
Map.addLayer(net_flux, {}, 'Net flux values',false);

// Layers displayed
Map.addLayer(emissions.sldStyle(emissions_intervals), {}, 'Gross emissions (Mg CO2e/ha between 2001 and 2020)');
Map.addLayer(removals.sldStyle(removals_intervals), {}, 'Gross removals (Mg CO2e/ha between 2001 and 2020)');
Map.addLayer(net_flux.sldStyle(net_flux_intervals), {}, 'Net flux (Mg CO2e/ha between 2001 and 2020)');
代码链接: ​​https://code.earthengine.google.com/?scriptPath=users/sat-io/awesome-gee-catalog-examples:agriculture-vegetation-forestry/GLOBAL-FOREST-CARBON-FLUXES​


License​​¶​

The Global Forest Carbon Fluxes (2001-2019) products are provided free of charge, without restriction of use. For the full license information see the ​​Creative Commons Attribution 4.0 International License​​ publications, models and data products that make use of these datasets must include proper acknowledgement, including citing the datasets and the journal article as in the following citation.

Created by: Harris, N.L., Gibbs, D.A., Baccini, A. et al

Curated in GEE by: Samapriya Roy

Keywords: Carbon emissions, forest change, climate, carbon

Last updated on GEE: 2022-04-27

参考文献:

Harris, N.L., Gibbs, D.A., Baccini, A. et al. Global maps of twenty-first century forest carbon fluxes. Nat. Clim. Chang. 11, 234–240 (2021). ​​https://doi.org/10.1038/s41558-020-00976-6​

有关Google earth engine——全球森林碳通量(2001-2021)数据集可视化含代码的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  7. ruby - Ruby 中的波形可视化 - 2

    我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  8. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  9. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐