原文链接:https://www.yuque.com/higis/gisinpython/zhqgbm
GIS In Python系列文章:https://www.yuque.com/higis/gisinpython

文章目录

  • Raster栅格对象
    • 常用方法
      • 打开栅格数据
      • 保存栅格数据
      • 列出工作目录下的所有栅格
      • 栅格转换为NumPy数组
    • 属性
    • 操作
  • 案例
    • 镶嵌(求多幅影像的平均值)
    • 求多幅影像的平均值(去除最大值、最小值)
    • 求多幅影像的中值
  • 错误集合
    • 运行py文件出错
    • 统计多个栅格的平均值 报错

Raster栅格对象

常用方法

打开栅格数据

Raster(inRaster) #数据类型:Raster# 例子
r = Raster("c:/data/dem") # 绝对路径
r = Raster("19960909.img") #相对路径,当不是ArcGIS的栅格数据时,要加上后缀

保存栅格数据

rasterObj.save(path) #使用:Raster对象.save(路径字符串)# 例子
r.save("c:/data/dem_1") # 绝对路径保存

列出工作目录下的所有栅格

arcpy.ListRasters({wild_card},{raster_type})# 例子:列出工作空间中的Grid栅格名称
import arcpy
arcpy.env.workspace = "c:/data/DEMS"
rasters = arcpy.ListRasters("*","GRID")
for raster in rasters:print raster
参数 说明 数据类型
wild_card 通配符可限制返回的结果,例如匹配前面有A的文件名(“A*”) String
raster_type 栅格格式 String

栅格转换为NumPy数组

使用例子:https://blog.csdn.net/summer_dew/article/details/78867410

转换成NumPy便于我们对像元进行操作,详细请点我

RasterToNumPyArray (in_raster, {lower_left_corner}, {ncols}, {nrows}, {nodata_to_value})

RasterToNumPyArray支持将多波段栅格直接转换成多维数组(ndarray)

  1. 如果输入Raster实例基于多波段栅格,则会返回 ndarry,其中第一维的长度表示波段数。ndarray 将具有维度(波段、行、列)
  2. 如果输入Raster实例基于单个栅格或多波段栅格中的特定波段,则会返回含维度(行、列)的二维数组。

转换时隐含规则:

  1. 如果数组的定义(左下角以及行数和列数)超出 in_raster 的范围,则数组值将分配为 NoData
  2. 如果 lower_left_corner 与像元角不重合,则会自动捕捉到最近像元角的左下角,该捕捉方法采用的规则与“捕捉栅格”环境设置中的规则相同。RasterToNumPy 函数内的捕捉操作不会与“捕捉栅格”环境设置相混淆;该函数只使用相同的交互

属性

属性 说明 数据类型 属性 说明 数据类型
bandCount 波段数量 Integer pixelType 像素类型(U32:Unsigned 32 bit integers) String
name 数据名称 String spatialReference 空间参考 SpatialReference
path 完整路径和名称 String catalogPath 全路径和名称的字符串 String
compressionType 压缩类型 String format 数据格式 String
extent 栅格数据的范围 Extent hasRAT 存在关联的属性表 Boolean
height 行数 Integer width 列数 Integer
isInteger 数据具有整数类型 Boolean isTemporary 数据是临时的 Boolean
maximum 最大值 Double minimum 最小值 Double
mean 平均值 Double standardDeviation 标准差 Double
uncompressedSize 磁盘大小 Double noDataValue 在数据中NoData的值 Double

操作

【官方文档】

  • 栅格计算器
  • 像元统计
out_raster=in_raster1*in_raster2 #直接运算
out_raster = Slope("dem") #指定函数:参数为字符串,全路径或相对路径
out_raster = Con(in_raster >= 2, 1, 0) #栅格计算器中的函数
outStats = CellStatistics(["inraster1", "inraster2", "inraster3"], "MEAN", "DATA") #平均值

案例

名称 说明
多个栅格文件相加 创建一个相同范围,像元值都为0的栅格文件aoi_value_0,递归相加,保存

镶嵌(求多幅影像的平均值)

def mosaic(in_dir, out_fp):# inputin_datas = []fns = os.listdir(in_dir)for fn in fns:if fn.endswith("tif"):fp = os.path.join(in_dir, fn)in_datas.append(fp)print "\t[data] {}".format(fp)if len(in_datas) == 0:print "\t[No data] {}".format(in_dir)return Noneelse:print "\t[find data] {}".format(len(fns) )# copy out_dataprint "\t[new] create the out file"first_data = in_datas[0]out_raster = Raster(first_data)out_raster.save(out_fp)# Mosaicprint "\t[doing]"arcpy.Mosaic_management(in_datas[1:], out_fp, "MEAN")print "\t[done]"return out_fp

求多幅影像的平均值(去除最大值、最小值)

def mosaic_nomaxmin(in_dir, out_fp):# inputenv.workspace = in_direnv.extent = "MAXOF"in_datas = []fns = os.listdir(in_dir)for fn in fns:if fn.endswith("tif"):in_datas.append(fn)print "\t[data] {}".format(fn)if len(in_datas) == 0:print "\t[No data] {}".format(in_dir)return Noneelse:print "\t[find data] {}".format(len(fns))# max and min rastersum_raster = CellStatistics(in_datas, "SUM", "DATA")max_raster = CellStatistics(in_datas, "MAXIMUM", "DATA")min_raster = CellStatistics(in_datas, "MINIMUM", "DATA")# the number of Datacnt_raster = Con(IsNull(sum_raster), 0, 0)for data in in_datas:cnt_raster = Con( IsNull(data), cnt_raster, cnt_raster+1 )# cnt_raster.save(r"F:\out\cnt.tif")# computeprint "\t[doing]"raster = (sum_raster - max_raster - min_raster) / ( cnt_raster - 2)raster.save(out_fp)print "\t[done]"return out_fp

求多幅影像的中值

def mosaic_median(in_dir, out_fp):# inputenv.workspace = in_direnv.extent = "MAXOF"in_datas = []fns = os.listdir(in_dir)for fn in fns:if fn.endswith("tif"):in_datas.append(fn)print "\t[data] {}".format(fn)if len(in_datas) == 0:print "\t[No data] {}".format(in_dir)return Noneelse:print "\t[find data] {}".format(len(fn))# computeprint "\t[doing]"raster = CellStatistics(in_datas, "MEDIAN", "DATA")raster.save(out_fp)print "\t[done]"return out_fp

错误集合

运行py文件出错

运行py文件出错,没有为脚本提供授权

错误:

Traceback (most recent call last):File "G:/workspace/python/arcpy/arcgis_running/file_add.py", line 6, in <module>out = Raster('19990101.img') + Raster('19990111.img')File "D:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\sa\Functions.py", line 4143, in Plusin_raster_or_constant2)File "D:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\sa\Utils.py", line 47, in swapperresult = wrapper(*args, **kwargs)File "D:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\sa\Functions.py", line 4140, in Wrapper["Plus", in_raster_or_constant1, in_raster_or_constant2])
RuntimeError


解决:
添加授权:arcpy.CheckOutExtension("spatial")

import arcpy
from arcpy import env
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")
env.workspace = "E:/user/Desktop/date"
out = Raster('19990101.img') + Raster('19990111.img')

统计多个栅格的平均值 报错

【代码】

def mosaic_median(in_dir, out_fp):# inputenv.workspace = in_dir# env.extent = "MAXOF"in_datas = []fns = os.listdir(in_dir)for fn in fns:if fn.endswith("tif"):in_datas.append(fn)print "\t[data] {}".format(fn)if len(in_datas) == 0:print "\t[No data] {}".format(in_dir)return Noneelse:print "\t[find data] {}".format(len(fn))# computeprint "\t[doing]"raster = CellStatistics(in_datas, "MEDIAN", "DATA")raster.save(out_fp)print "\t[done]"return out_fp

【报错】

Traceback (most recent call last):File "D:/mycode/GISandPython/2Arcpy/ArcGISTools/2MOD04-L2/process.py", line 223, in <module>mosaic_all(ret, case)File "D:/mycode/GISandPython/2Arcpy/ArcGISTools/2MOD04-L2/process.py", line 216, in mosaic_allmosaic_median(month_dir, out_fp)File "D:/mycode/GISandPython/2Arcpy/ArcGISTools/2MOD04-L2/process.py", line 189, in mosaic_medianraster = CellStatistics(in_datas, "MEDIAN", "DATA")File "C:\Program Files (x86)\ArcGIS\Desktop10.5\ArcPy\arcpy\sa\Functions.py", line 3149, in CellStatisticsignore_nodata)File "C:\Program Files (x86)\ArcGIS\Desktop10.5\ArcPy\arcpy\sa\Utils.py", line 53, in swapperresult = wrapper(*args, **kwargs)File "C:\Program Files (x86)\ArcGIS\Desktop10.5\ArcPy\arcpy\sa\Functions.py", line 3145, in Wrapper[function] + Utils.flattenLists(in_rasters_or_constants))
RuntimeError: <exception str() failed>

【错误分析】多个栅格的范围不一致导致的错误
【解决】多加一句环境配置
env.extent = "MAXOF"

[ArcPy] 1 ArcPy与栅格(Raster)相关推荐

  1. arcpy——利用Arcpy进行字段操作

    一.arcpy操作字段 1.删除字段函数:arcpy.DeleteField_management 语法:DeleteField_management (in_table,drop_field) 参数 ...

  2. [Arcpy] 0 Arcpy初识 | Arcpy开发思路

    原文链接:https://hellogis.yuque.com/docs/share/351e9e9d-831f-47bc-a7c6-871528beb8c2?# <Arcpy> 文章目录 ...

  3. 【GIS】arcpy对栅格的常见操作——拼接裁剪代数计算

    最近在做一个项目,主要任务是对栅格数据进行各种操作,将利用arcpy进行的各项操作记录于此帖中[持续更新] 下载栅格数据 主要用到MODIS数据,下载链接:MODIS数据下载 注意事项: MODIS数 ...

  4. Python中ArcPy实现对大量长时间序列栅格遥感影像批量逐像元求取像素平均值

      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取.   在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...

  5. 【Arcpy】批量计算缓冲区内的栅格面积

    配置云服务器 这里使用的是阿里云轻量云服务器,想着在服务器安装Arcgis pro:然后提供pycharm调用arcpy来批量执行操作.但是服务器性能不足.跑得很慢.这里主要记录配置操作. 云服务只能 ...

  6. Arcpy批量对栅格进行ZonalStatisticsAsTable

    (我是转载的,自己试了可行之后再发出来,原文找不到了) 利用arcgis的ZonalStatisticsAsTable功能,对多幅影像进行批处理计算 完整代码: # -*- coding: utf-8 ...

  7. 【287】◀▶ arcpy 常用类说明

    ArcPy 类列表(按字母顺序) 01   Raster 创建一个可在 Python 脚本或地图代数表达式中使用的栅格对象. 02   Cursor Cursor 是一种数据访问对象,可用于在表中迭代 ...

  8. Arcpy点点滴滴学习教程

    Arcpy点点滴滴学习教程 第1章 ArcPy简介 1.1什么是 ArcPy? ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而 ...

  9. Python中ArcPy实现Excel时序数据读取、反距离加权IDW插值与批量掩膜

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的 ...

  10. Pycharm中利用arcpy实现灯光遥感数据的建成区批量提取

    一.突变检测法[8] 通过确定基于突变检测原则的单个阈值,该阈值既有显著降低灯光数据的噪声以及沿海城市的灯光溢出的功能,同时也能保留具有连续灯光亮度值的多边形即较大的城市区域.对于分离城市灯光区与非城 ...

最新文章

  1. 黑马程序员java笔记之二-----多线程
  2. n1进入recovery模式_启动自动变砖模式?三星Galaxy“智能”手机
  3. VIA笔试收集与解答
  4. 网络请求--Retrofit2使用方法
  5. ServiceLoader的使用
  6. 打开ADS提示23111@localhost后提示无法与执照伺服机连线,怎么解决?
  7. 004 排序(冒泡快排)
  8. 诡异的DateTime.TryParseExact方法
  9. 数据库备份策略 分布式_管理优秀的分布式数据团队的4种基本策略
  10. 白话中台战略:中台是个什么鬼?
  11. 【Linux】Linux按tab键补全文件(名)或路径不区分大小写
  12. form:errors path 不显示出错信息_视觉激光雷达信息融合与联合标定
  13. mysql服务启动成功后卸载_安装,启动与卸载Mysql系统服务(MYSQL常见问题)
  14. android textview全部属性,Android TextView属性大全
  15. 一篇吃透前置加加和后置加加(附练习题)
  16. 计算流体动力学软件和服务市场现状研究分析-
  17. 计算机专业必须考过英语4级吗,计算机专业英语必须过六级吗
  18. FIL会不会涨,至联云教你看这三点就知道
  19. Electron-Builder打包时报错could not find: “\XXX\0-messages.nsh“
  20. A cycle was detected in the build path of project 'core'. The cycle consists of projects {core, sms}

热门文章

  1. 线性代数的那些事(二)行列式与逆
  2. 分布式事务解决方案:7种常见解决方案汇总
  3. nepctf pwn easystack(_stack_chk_fail)
  4. 概率论与数理统计期末考试复习总结
  5. 推荐三款好用的终端开发平台
  6. 【第3版emWin教程】第57章 emWin6.x的炫酷时钟表盘设计,结合硬件RTC
  7. Ubuntu的一些高(sao)效(cao)率(zuo)工具
  8. [ArcGIS] 空间分析(四) 三维分析
  9. phpcms system.php,phpcms_v9.6.0_UTF8 PHPcms系统开源 很有用 - 下载 - 搜珍网
  10. 毕业设计 : 题目:基于深度学习的水果识别 设计 开题 技术