【Arcpy】批量提取栅格数据到点(Extract Multi Values To Points )

需求

2011-2019年3月逐日数据,提取到点属性表后再输出Excel
由于总列数超过255,故只能一年31个数据输出一次Excel,然后清空属性表开始下一次提取

代码

# -*- coding: utf-8 -*-
# 把itvdi按点提取到表格 因为table to excel工具只能支持256列 所以每一年一输出excel并且清空table
# ---------------------------------------------------------------------------
import arcpy
from arcpy.sa import *
import os

# 点shapefile
point_shp_file = r"E:\IrrigationFinal\00SHP\HNfish.shp"
# 临时shapefile
temp_shp_file = r"E:\IrrigationFinal\00SHP\HNfish_temp.shp" # 副本的名称
arcpy.CopyFeatures_management(point_shp_file, temp_shp_file)


for year in range(2011, 2020):#Python切片 含前不含后
    arcpy.env.workspace = r"E:\IrrigationFinal\03iTVDI11_22" + "\\" + str(year)  # 环境设置
    rasterlist = arcpy.ListRasters("*", "dat")  # dat拓展名
    for rastername in rasterlist:#每一年每一天数据循环提取
        inRasterList = [[rastername, os.path.basename(rastername)[5:15]]] 
        arcpy.gp.ExtractMultiValuesToPoints_sa(temp_shp_file, inRasterList, "NONE")
        print(rastername)
    arcpy.TableToExcel_conversion(temp_shp_file, r"E:\IrrigationFinal\iTVDI" + str(year) + ".xls")#提取完一年后输出Excel
    fieldList = arcpy.ListFields(temp_shp_file)
    for field in fieldList:# 删除多余的字段
        if field.name != 'FID' and field.name != 'Shape' and field.name != 'Id' and field.name != 'num':
                arcpy.DeleteField_management(temp_shp_file, field.name)
# 删除临时shp
arcpy.Delete_management(temp_shp_file)
print("OK!")

DeBug

  1. 为了增加稳定性,采用CopyFeatures创建副本点shp文件来进行运算
  2. 因为使用了复制,或者其他原因,循环到下一个年份,或者对其他数据提取点再进行提取时,FID字段会变化,导致不同数据无法匹配
  3. 因此需要创建一个唯一编号字段num,之后的coding中代替FID的地位,代码如下:
import arcpy
point_shp_file = r"E:\IrrigationFinal\00SHP\HNfish.shp"
arcpy.AddField_management(point_shp_file, "num", "LONG")
with arcpy.da.UpdateCursor(point_shp_file, ["num", "SHAPE@"]) as cursor:
    for i, row in enumerate(cursor, start=1):  # 使用enumerate来计数,并从1开始
        row[0] = i  # 将计数器的值赋给新字段
        cursor.updateRow(row)  # 更新行

4.InRasterList变量的简单写法inRasterList = [(rastername, os.path.basename(rastername)[9:13])]
5.清空字段部分的简单写法`

    # 清空新加入的字段
    fieldList = [f.name for f in arcpy.ListFields(temp_shp_file) if f.name not in ['FID', 'Shape', 'Id', 'num']]
    arcpy.DeleteField_management(temp_shp_file, fieldList)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ArcGIS中,可以使用ArcPy批量提取数据。根据引用中提到的文章,可以使用ArcPy脚本来实现批量提取数据的操作。具体步骤如下: 1. 打开ArcGIS软件,并打开Python窗口。 2. 导入需要的模块,如arcpy和os。 3. 设置工作空间,即指定数据所在的文件夹路径。 4. 使用arcpy的ListRasters函数获取所有的数据文件名。 5. 使用循环遍历所有的数据文件名,并使用arcpyExtractByMask函数提取数据。 6. 指定提取后的数据保存的路径和文件名,并保存提取后的数据。 通过以上步骤,就可以实现对数据批量提取了。引用中提到的ArcPy方式进行数据处理的方法,同样也适用于批量提取数据的操作。 总结起来,使用ArcPy脚本可以方便地实现ArcGIS中的批量提取数据操作。123 #### 引用[.reference_title] - *1* *2* [ArcGIS批量裁剪数据ArcPy方法)](https://blog.csdn.net/qq_35056050/article/details/111868274)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Arcgis批量提取数据的Min、Max、Mean以及Std dev.等数值](https://blog.csdn.net/YuStewart/article/details/89388980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值