Arcpy进行地图代数栅格运算 您所在的位置:网站首页 arcgis栅格计算器取最大值 Arcpy进行地图代数栅格运算

Arcpy进行地图代数栅格运算

2023-07-15 00:57| 来源: 网络整理| 查看: 265

Python利用Arcpy进行栅格运算 ArcGIS栅格计算器介绍Arcpy对栅格文件的读取、创建和写入Arcpy进行栅格数学分析的三角函数和逻辑运算归纳总结实例及运行结果 环境;ArcGIS、Python 2.7

ArcGIS栅格计算器介绍

ArcGIS中的工具箱有栅格计算器工具,它提供的时地图代数功能,可以实现很多复杂的栅格代数运算处理,但栅格计算器工具专门用于 ArcGIS for Desktop 应用程序(仅作为 GP 工具对话框)或模型构建器。它不适用于脚本的编写,而且也不能用于 ArcPy Spatial Analyst 模块。

在这里插入图片描述 为此,通过查看ArcGIS 工具箱中的空间分析模块(Spatial Analyst简称sa),发现其中有很多数学分析运算(我们主要用到的多为三角函数和逻辑运算)(见下图) 在这里插入图片描述 因此,为了更好地利用Arcpy中的空间分析工具来进行栅格数据的地图代数运算,需要首先在Python的py文件中导入ArcPy和Spatial Analysis模块,见下面的代码:

#-*- coding: UTF-8 -*- import arcpy from arcpy import env from arcpy.sa import * # Check out the ArcGIS Spatial Analyst extension license arcpy.CheckOutExtension("Spatial") Arcpy对栅格文件的读取、创建和写入

Arcpy读取栅格:

inRaster = arcpy.Raster("D:\\test\\myinputraster.tif")#读取tif文件

Arcpy可以创建 常量栅格、正态栅格 和 随机栅格:

outConstRaster = CreateConstantRaster(12.7, "FLOAT", 2, Extent(0, 0, 250, 250))#常量栅格创建 outNormalRaster = CreateNormalRaster(2, Extent(0, 0, 150, 150))#正态栅格创建 outRandRaster = CreateRandomRaster(100, 2, Extent(0, 0, 150, 150))#随机栅格创建

在这里插入图片描述 Arcpy保存栅格:

OutputRaster.save("D:\\test\\myoutputraster.tif")#保存tif文件 Arcpy进行栅格数学分析的三角函数和逻辑运算归纳总结 三角函数运算对应代码作用SinoutSinRaster = Sin(inRaster)计算栅格中像元的正弦CosoutCosRaster = Cos(inRaster)计算栅格中像元的余弦TanoutTanRaster = Tan(inRaster)计算栅格中像元的正切SinHoutSinHRaster = SinH(inRaster)计算栅格中像元的双曲正弦CosHoutCosHRaster = CosH(inRaster)计算栅格中像元的双曲余弦TanHoutTanHRaster = TanH(inRaster)计算栅格中像元的双曲正切ASinoutASinRaster = ASin(inRaster)计算栅格中各像元的反正弦ACosoutACosRaster = ACos(inRaster)计算栅格中像元的反余弦ATanoutATanRaster = ATan(inRaster)计算栅格中各像元的反正切ATan2outATan2Raster = ATan2(inRaster1, inRaster2)计算栅格中各像元的反正切(基于 x、y)ASinHoutASinHRaster = ASinH(inRaster)计算栅格中各像元的反双曲正弦ACosHoutACosHRaster = ACosH(inRaster)计算栅格中各像元的反双曲余弦ATanHoutATanHRaster = ATanH(inRaster)计算栅格中各像元的反双曲正切

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

逻辑运算对应代码作用图片加outPlus = Plus(inRaster1, inRaster2)逐个像元地将两个栅格的值相加(求和)减outMinus = Minus(inRaster1, inRaster2)逐个像元地从第一个输入栅格的值中减去第二个输入栅格的值乘outTimes = Times(inRaster, inConstant)将两个栅格的值逐个像元地相乘除outDivide = Divide(inRaster01, inRaster02)将两个栅格的值逐个像元地相除平方outSquare = Square(inRaster)计算栅格中像元值的平方值平方根outSQRT = SquareRoot(inRaster)计算栅格中像元值的平方根幂outPower = Power(inRaster1, inRaster2)对栅格中的像元值进行乘方运算,结果为在另一个栅格中找到的值取反outNegate = Negate(inRaster)逐个像元地更改输入栅格的像元值符号(乘以 -1)绝对值outAbs = Abs(inRaster)计算栅格中像元的绝对值ExpoutExp = Exp(inRaster)计算栅格中各像元以 e 为底的指数Exp2outExp2 = Exp2(inRaster)计算栅格中各像元以 2 为底的指数Exp10outExp10 = Exp10(inRaster)计算栅格中各像元以 10 为底的指数LnoutLn = Ln(inRaster)计算栅格中各像元的自然对数(以 e 为底)Log2outLog2 = Log2(inRaster)计算栅格中各像元以 2 为底的对数Log 10outLog10 = Log10(inRaster)计算栅格中各像元以 10 为底的对数上舍入outRoundURaster = RoundUp(inRaster)返回栅格中每个像元的最近的较大整数,但表示为浮点型下舍入outRoundDRaster = RoundDown(inRaster)返回栅格中每个像元的最近的较小整数,但表示为浮点型求模outMod = Mod(inRaster1, inRaster2)逐个像元地求出第一个栅格数据除以第二个栅格数据的余数(模)转为整型outInt = Int(inRaster)通过截断将栅格的每个像元值转换为整型转为浮点型outFloat = Float(inRaster)将每个栅格像元的值转换为浮点型表达形式 实例及运行结果

        由于Arcpy对一些简单的栅格加、减、乘、除等运算进行了符号重载,因此可以直接用+、-、*、/等运算符来进行栅格和常量、栅格与栅格之间的数学运算,PyCharm中的计算NPP的具体实例如下所示:

// ArcPy计算NPP代码-Python by jjg #-*- coding: UTF-8 -*- import arcpy from arcpy import env from arcpy.sa import * # Check out the ArcGIS Spatial Analyst extension license arcpy.CheckOutExtension("Spatial") #读取NPP模型的输入数据 NDVI_Raster = arcpy.Raster("H:\\CASA_Model_200101\\200101输入数据\\NDVI\\MOD13Q1.A200101.hdf.250m_16_days_NDVI_projected1_mask(0-1).tif")#读取tif文件 SOL_Raster = arcpy.Raster("H:\\CASA_Model_200101\\200101输入数据\\sun_radiation\\Y2001M1_sun_radi.img")#读取tif文件 ET_Raster = arcpy.Raster("H:\\CASA_Model_200101\\200101输入数据\\ET\\MOD16A2.200101ET_500m_MVC_Projected_mask.tif")#读取tif文件 PET_Raster = arcpy.Raster("H:\\CASA_Model_200101\\200101输入数据\\PET\\MOD16A2.A200101.hdf.PET_500m_MVC_projected_mask.tif")#读取tif文件 T_Raster = arcpy.Raster("H:\\CASA_Model_200101\\200101输入数据\\TAVG_CORR\\Y2001M1_TAVG_CORR.img")#读取tif文件 SRmin = 0.5 SRmax = 1.5 FPARmin = 0.001 FPARmax = 0.95 T_opt = 26 e_max = 0.389 SR = (1 + NDVI_Raster) / (1 - NDVI_Raster) FPAR = FPARmin + (FPARmax - FPARmin) * ((SR - SRmin) / (SRmax - SRmin)) APAR = SOL_Raster * FPAR * 0.5 def func(a): if a > -10: return 0.8 + 0.02 * a - 0.0005 * a * a else: return 0 T1 = func(T_opt) T2 = (1.184/(1+Exp(0.2*(T_opt-10-T_Raster))))*(1/(1+Exp(0.3*(T_Raster -10-T_opt)))) W = 0.5 +0.5* ET_Raster / PET_Raster e = T1 *T2 * W *e_max NPP = APAR * e NPP.save("H:\\CASA_Model_200101\\NPP\\NPP.tif")

运行结果如下: 在这里插入图片描述 掩膜提取后: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有