Python地理数据处理 二十一:基于arcpy批量操作(三)

这篇具有很好参考价值的文章主要介绍了Python地理数据处理 二十一:基于arcpy批量操作(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 实现一(批量裁剪的高级用法)

实现将给定的 .shp 文件中的所有省份作为裁剪范围,对给定的 .tif 文件进行裁剪,输出所有省份的单独 .tif 文件:

# -*- coding: cp936 -*-
import arcpy

arcpy.CheckOutExtension('Spatial')

# 定义输入文件的路径
shp_path = r"C:\Users\map.shp"
tif_path = r"C:\Users\dem.tif"

# 读取文件
shp = arcpy.mapping.Layer(shp_path)
tif = arcpy.Raster(tif_path)

# 获取.tif 文件的空间参考信息
spatial_ref = tif.spatialReference

# 创建一个用于存储输出的文件夹
output_folder = r"C:\Users\output"
arcpy.CreateFolder_management(output_folder, "clipped_tifs")

# 循环遍历 .shp 文件中的每个省份
for row in arcpy.da.SearchCursor(shp, ["SHAPE@", "name"]):
    # 构建输出.tif 文件的路径
    output_tif_path = output_folder + "\\clipped_tifs\\" + row[1] + ".tif"
    
    # 使用.shp 文件对.tif 文件进行裁剪
    arcpy.Clip_management(tif_path, "#", output_tif_path, row[0], "#", "ClippingGeometry")

    # 打印输出信息
    print row

# 删除中间变量
del shp, tif

2. 实现二(栅格计算器求和)

实现对文件名前14个字符一样的tif图像进行栅格运算求和:
如:XXXX_XXX_2003.M01_Mean、XXXX_XXX_2003.M02_Mean、XXXX_XXX_2003.M03_Mean;XXXX_XXX_2004.M01_Mean、XXXX_XXX_2004.M02_Mean、XXXX_XXX_2004.M03_Mean;XXXX_XXX_2005.M01_Mean、XXXX_XXX_2005.M02_Mean、XXXX_XXX_2005.M03_Mean。。。。。。

# -*- coding: cp936 -*-
import arcpy
import os

arcpy.CheckOutExtension('Spatial')

# 设置工作空间
arcpy.env.workspace = r"D:\Datasets"

# 获取所有.tif文件
tif_list = arcpy.ListRasters("*", "TIF")

# 创建字典,用于存储同一年份的栅格图像
tif_dict = {}

# 遍历所有.tif文件,将同一年份的栅格图像添加到字典中
for tif in tif_list:
    year = tif.split("_")[2][:4]
    if year in tif_dict:
        tif_dict[year].append(tif)
    else:
        tif_dict[year] = [tif]

# 对每个年份的栅格图像进行栅格运算求和,并保存结果
for year in tif_dict:
    tif_sum = None
    for tif in tif_dict[year]:
        tif_path = os.path.join(arcpy.env.workspace, tif)
        tif_raster = arcpy.Raster(tif_path)
        if tif_sum is None:
            tif_sum = tif_raster
        else:
            tif_sum += tif_raster
    output_name = "D:\\Datasets\\TIFClip\\" + year
    output_path = os.path.join(arcpy.env.workspace, output_name)
    tif_sum.save(output_path)
    print year

3. 实现三(使用栅格计算器删除指定值)

1、如果我们想删除栅格图像的属性表中的某个空值或者指定值,如9999或52668,如果在arcgis中操作的话,可以使用栅格计算器,输入以下代码即可:

Con((input.tif != 9999) & (input.tif != 52668), input.tif)

2、也可以使用arcpy进行批量处理:

# -*- coding: cp936 -*-
import arcpy
import os

arcpy.CheckOutExtension("spatial")
# 定义输入和输出文件夹
input_folder = r"D:\Datasets"
output_folder = r"D:\Datasets\tifclipCon"

# 循环遍历文件夹下的所有tif文件
for filename in os.listdir(input_folder):
    if filename.endswith(".tif"):
        # 构建输入和输出路径
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        # 使用Map Algebra表达式删除指定的属性表值
        expression = "Con((\"" + input_path + "\" != 9999) & (\"" + input_path + "\" != 52668), \"" + input_path + "\")"
        arcpy.gp.RasterCalculator_sa(expression, output_path)
        
        print filename

4. 实现四(读取两个文件夹中的tif文件进行相乘并保存)

读取两个文件夹中的tif文件,并对两个相对应的文件进行相乘:

# -*- coding: cp936 -*-
import arcpy
import os
import warnings
warnings.filterwarnings('ignore')

arcpy.CheckOutExtension('Spatial')

# 设置工作空间
arcpy.env.workspace = r"D:\RSE\dataset\1\output"

# 设置输入文件夹路径
t_folder = r"D:\RSE\dataset\t\output"
p_folder = r"D:\RSE\dataset\p\output"

# 设置输出文件夹路径
out_folder = r"D:\RSE\dataset\tbyp"

# 获取输入文件夹中以TEM开头的tif文件列表
t_list = arcpy.ListRasters("TEM*", "TIF")

# 遍历输入文件夹中的tif文件
for t_file in t_list:
    
    # 获取tif文件名的后三个字符
    suffix = t_file[3:6]
    
    # 构造PRE文件路径
    p_file = os.path.join(p_folder, "PRE" + suffix + ".tif")
    
    # 判断PRE文件是否存在
    if not arcpy.Exists(p_file):
        print("PRE file does not exist for " + t_file)
        continue

    print "*******************************************************************"
    # 构造输出文件路径
    out_file = os.path.join(out_folder, "output" + suffix + ".tif")
    
    # 使用栅格计算器对两个tif文件进行相乘
    expression = "Times('{}', '{}')".format(t_file, p_file)
    arcpy.gp.RasterCalculator_sa(expression, out_file)
    
    print "Processed " + out_file
   

本代码使用Times()函数对两个栅格进行相乘

5. 实现五(文件夹中所有tif文件相加)

实现文件夹中所有tif文件相加:文章来源地址https://www.toymoban.com/news/detail-429503.html

# -*- coding: cp936 -*-
import arcpy
import os

arcpy.CheckOutExtension('Spatial')

# 设置工作空间
arcpy.env.workspace = r"D:\RSE\dataset\TbyP"

# 设置输出文件夹路径
out_folder = r"D:\RSE\dataset\TbyP"

# 获取输入文件夹中的所有tif文件
tif_list = arcpy.ListRasters("*", "TIF")

# 如果没有tif文件,则输出提示信息
if not tif_list:
    print("There are no TIFF files in the input folder.")
else:
    # 构造栅格计算器表达式
    #expression = " + ".join(tif_list)
    expression = ' + '.join(['"' + tif + '"' for tif in tif_list])

    # 构造输出文件路径
    out_file = os.path.join(out_folder, "outputAll.tif")

    # 使用栅格计算器对所有tif文件进行相加
    arcpy.gp.RasterCalculator_sa(expression, out_file)

    print"The output file is located at " + out_file
    

到了这里,关于Python地理数据处理 二十一:基于arcpy批量操作(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据集处理】基于Python处理EAR5数据

    ERA5是ECMWF(欧洲中期天气预报中心)对1950年1月至今全球气候的第五代大气再分析数据集。 包含了四个 基本变量(日平均温度、降水、比湿度和距离地表2米的气压) ,这些变量在每日时间尺度上覆盖全球,从而可以对不同地区和时间段进行全面和统一的分析 时间分辨率:194

    2024年02月05日
    浏览(52)
  • (二十八)ArcGIS空间数据的转换与处理——数据结构转换

    空间数据的来源很多,如地图、工程图、规划图、航空与遥感影像等,因此空间数据也有多种格式。根据应用需要,需对数据进行格式转换,不同数据结构间的转换主要包括矢量数据到栅格数据的转换和栅格数据到矢量数据的转换。利用数据格式转换工具,可以转换Raster、

    2024年02月11日
    浏览(49)
  • 基于python的心脏病个人指数数据集数据处理——结课论文

    前言: 此论文是小赵的python数据分析与应用的结课作业 , 未上传论文涉及的所有数据集,本论文所涉及的数据预处理,数据分析和可视化仅以这些数据集为准,所有处理方法,结果以及结论仅个人观点。 心脏病个人指数数据集数据处理 摘要:     本论文包含了对心脏病个

    2024年02月04日
    浏览(42)
  • 【API篇】十一、Flink水位线传递与迟到数据处理

    上游task处理完水位线,时钟改变后,要把数据和当前水位线继续往下游算子的task发送。当一个任务接收到多个上游并行任务传递来的水位线时,以 最小的那个作为当前任务的事件时钟 。如图:上游算子并行度为4,: 总结: 接收到上游多个,取最小 往下游多个发送,广播

    2024年02月08日
    浏览(48)
  • 基于Python的微信聊天记录分析——数据处理与分析

    本篇为《基于Python的微信聊天记录分析》系列的第二篇,主要讲解获取到聊天记录数据之后,在Python环境下对其进行数据处理、分析和可视化,涉及库的安装、相关操作的Python代码等内容。希望和大家多多交流,共同进步! 数据分析的基础是“数据”,俗话说基础不牢,地动

    2024年02月19日
    浏览(52)
  • 大数据Flink(六十一):Flink流处理程序流程和项目准备

    文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程

    2024年02月11日
    浏览(39)
  • 数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析

    案例数据集是在线零售业务的交易数据,采用Python为编程语言,采用Hadoop存储数据,采用Spark对数据进行处理分析,并使用Echarts做数据可视化。由于案例公司商业模式类似新零售,或者说有向此方向发展利好的趋势,所以本次基于利于公司经营与发展的方向进行数据分析。

    2024年02月11日
    浏览(42)
  • 基于Python的海量豆瓣电影、数据获取、数据预处理、数据分析、可视化、大屏设计项目(含数据库)

    项目介绍 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主!!!!!!!!!! 本文基于Python的网络爬虫手段对豆瓣电影网站进行数据的抓取,通过合理的分析豆瓣网站的网页结构,并设计出规则来获取电影数据的JSON数据包,采用正态分布的延时措施

    2024年02月12日
    浏览(59)
  • Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)

    卷积神经网络,也叫 CNN ,它是计算机视觉应用几乎都在使用的一种深度学习模型。我们都知道,成功提取显著相关的特征是保障任何机器学习的算法成功的保障,传统的机器学习模型依赖领域专家的输入特征,或者基于计算特征的提取技术。神经网络能够自动地从原始数据

    2024年02月03日
    浏览(58)
  • python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解

    滑动平均滤波法 (又称: 递推平均滤波法 ),它把连续取N个采样值看成一个队列 ,队列的长度固定为N ,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则) 。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。 N值的选取:流量,N=

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包