Python基于Excel数据加以反距离加权空间插值并掩膜图层

这篇具有很好参考价值的文章主要介绍了Python基于Excel数据加以反距离加权空间插值并掩膜图层。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文介绍基于PythonArcPy模块,实现Excel数据读取生成矢量图层,同时进行IDW插值批量掩膜的方法。

1 任务需求

  首先,我们来明确一下本文所需实现的需求。

  现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据Excel表格文件,我们需要将其中的数据依次读入一个包含北京市各PM2.5浓度监测站点的矢量点要素图层中;随后,基于这些站点导入的23个逐小时PM2.5浓度数据,逐小时对北京市PM2.5浓度加以反距离加权(IDW)方法的插值,即共绘制23幅插值图;最后,基于已有的北京市边界矢量数据,分别对这23幅插值图加以掩膜。

  在这里,包含北京市各PM2.5浓度监测站点的矢量点要素图层是基于Python基于Excel生成矢量图层及属性表信息:ArcPy得到的,如下图所示。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  其中,该矢量图层还包括属性表,属性表内容包括每一个站点的编号、地理位置与中文名称,如下图所示。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  而记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据Excel表格文件则如下所示,其中包括各站点在23个整点时所监测到的PM2.5浓度。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

2 代码实现

  了解了需求后,我们就基于Python中的ArcPy模块,进行详细代码的撰写与介绍。

  这里需要说明的是:在编写代码的时候,为了方便执行,所以希望代码后期可以在ArcMap中直接通过工具箱运行,即用到Python程序脚本新建工具箱与自定义工具的方法;因此,代码中对于一些需要初始定义的变量,都用到了arcpy.GetParameterAsText()函数。大家如果只是希望在IDLE中运行代码,那么直接对这些变量进行具体赋值即可。关于Python程序脚本新建工具箱与自定义工具,大家可以查看ArcMap将Python写的代码转为工具箱与自定义工具详细了解。

  上面提到需要初始定义的变量一共有十个,其中arcpy.env.workspace参数表示当前工作空间,csv_path参数表示存储有北京市2019年05月18日00时至23时(其中不含19时)逐小时PM2.5浓度数据的.csv文件,shape_file_path参数表示站点信息矢量数据文件,boundary_file_path参数表示投影后北京市边界矢量数据文件,spatial_resolution参数表示IDW插值结果栅格图的像元大小,power参数表示IDW插值时所用距离的幂指数,look_point参数表示IDW插值时所用最邻近输入采样点数量的整数值,max_distance参数表示IDW插值时对最邻近输入采样点的限制距离,单位依据地图坐标系确定;idw_result_dir参数表示IDW插值结果图层保存路径,mask_result_dir参数表示IDW插值结果图层经掩膜后保存路径。

  代码的整体思路为:首先利用pd.read_csv函数读取记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据Excel表格文件数据,随后在北京市各PM2.5浓度监测站点的矢量点要素图层的属性表中新建23个列,每一个列表示该监测站点在某一时刻的浓度数据(共有23个时刻,因此共有23个列);其次,由于矢量要素图层中的部分站点在Excel文件中并没有数据,因此需要将这些站点从矢量要素图层中删除;最后,分别利用Idw函数与ExtractByMask函数进行IDW插值与掩膜。

  具体代码如下。

# -*- coding: utf-8 -*-
# @author: ChuTianjia

import copy
import arcpy
import pandas as pd
from arcpy.sa import *

arcpy.env.workspace=arcpy.GetParameterAsText(0)
csv_path=arcpy.GetParameterAsText(1)
shape_file_path=arcpy.GetParameterAsText(2)
idw_result_dir=arcpy.GetParameterAsText(8)
boundary_file_path=arcpy.GetParameterAsText(3)
mask_result_dir=arcpy.GetParameterAsText(9)
spatial_resolution=arcpy.GetParameterAsText(4)
power=arcpy.GetParameterAsText(5)
look_point=arcpy.GetParameterAsText(6)
max_distance=arcpy.GetParameterAsText(7)

csv_data=pd.read_csv(csv_path,header=0,encoding="gbk")
column_name_list=list(csv_data)
hour_column=csv_data["hour"]

pm_25_list=[[0]*len(csv_data) for i in range(csv_data.shape[1]-3)]

for i in range(3,csv_data.shape[1]):
    for index,data in csv_data.iterrows():
        pm_25_list[i-3][index]=data[i]

field_list=["hour_00","hour_01","hour_02","hour_03","hour_04","hour_05",\
            "hour_06","hour_07","hour_08","hour_09","hour_10",\
            "hour_11","hour_12","hour_13","hour_14","hour_15",\
            "hour_16","hour_17","hour_18","hour_20",\
            "hour_21","hour_22","hour_23"]
field_list_use=copy.deepcopy(field_list)
field_list_use.insert(0,"Name")

# Update the columns in the attribute table
for i in range(len(field_list)):
    arcpy.AddField_management(shape_file_path,field_list[i],"SHORT")

delete_num=0
delete_name=[]
with arcpy.da.UpdateCursor(shape_file_path,field_list_use) as cursor:
    for row in cursor:
        for column_name in column_name_list:
            if column_name==row[0]:
                for i in range(len(csv_data[column_name])):
                    row[i+1]=csv_data[column_name][i]
                    cursor.updateRow(row)

        # Find stations that without any data        
        if row[0] not in column_name_list:
            cursor.deleteRow()
            delete_num+=1
            delete_name.append(row[0])

arcpy.AddWarning("Delete {0} site(s) that do not contain any data, and the site(s) name is(are):".format(delete_num))
for i in delete_name:
    arcpy.AddMessage(i)
arcpy.AddMessage("\n")

# Perform IDW interpolation
arcpy.env.extent=boundary_file_path
for i in range(len(field_list)):
    idw_result=Idw(shape_file_path,field_list[i],spatial_resolution,power,RadiusVariable(look_point,max_distance))
    idw_result_path=idw_result_dir+"\\"+"BJ_"+field_list[i]+".tif"
    idw_result.save(idw_result_path)
    arcpy.AddMessage("{0} has completed IDW interpolation.".format(field_list[i]))

# Perform mask
tif_file_list=arcpy.ListRasters("BJ_hour_*","TIF")
for raster in tif_file_list:
    mask_result=ExtractByMask(raster,boundary_file_path)
    mask_result_path=mask_result_dir+"\\"+raster.strip(".tif")+"_Mask.tif"
    mask_result.save(mask_result_path)
    arcpy.AddMessage("{0} has been masked.".format(raster.strip(".tif")))

3 运行结果

  执行上述代码,如果是在ArcMap中直接通过工具箱运行,则可以看到代码运行过程中出现的提示。

  例如,下图所示提示可以知道有哪几个站点是没有数据、从而被剔除的。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  下图则可以显示出目前代码的运行情况。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  同时,在我们设定的结果文件夹中可以看到,23小时的插值图与掩膜图都将自动生成并保存在指定文件夹。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  再来看看具体的图片长什么样子。

  首先查看IDW插值结果图;我们以当日10时的插值结果图为例进行查看。可以看到其已对北京市边界矢量数据所包含的矩形范围完成了插值。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  接下来,查看IDW插值结果图经过掩膜后的图像;我们同样以当日10时的插值、掩膜结果图为例进行查看。可以看到,经过掩膜操作后的图像已经完全符合北京市边界矢量数据的范围。

Python基于Excel数据加以反距离加权空间插值并掩膜图层

  至此,大功告成。文章来源地址https://www.toymoban.com/news/detail-846450.html

到了这里,关于Python基于Excel数据加以反距离加权空间插值并掩膜图层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 中国气象要素年度空间插值数据集

     摘要      中国气象要素年度空间插值数据集是 地理遥感生态网平台 基于全国2400多个站点的气象要素站点日观测数据,在计算各气象要素年值的基础上,基于Anuspl插值软件生成1960-2021年各年度蒸发量、地温、降水量、气压、相对湿度、日照时数 、气温、风速8个气象要素的

    2024年03月09日
    浏览(33)
  • 基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 matlab2022a       平板脉冲响应(Pulse Response)是通信和雷达等领域中的重要参数,它描述了信号在空间中传播的特性。在现实应用中,获取完整的脉冲响应通常是耗时且昂贵的

    2024年02月13日
    浏览(24)
  • 基于python实现最近邻插值双线性插值径向基函数插值(代码实现详细教程)

    三种插值方法都是使用Python自己实现的。 寻找每个中心点周围的八个点中有无未丢失的点,如果有的话就赋值为第一个找到的点,如果没有就扩大范围再次寻找,在最大范围内都找不到的话就跳过。 使用解方程的方法求解,整体思路类似colorization作业的实现,每个点用周围

    2024年02月07日
    浏览(28)
  • python根据excel数据,基于散点图绘制棋盘图

    一、需求 根据可视化的需要,下图的数据需要使用棋盘图的样式来展示, 原始数据: 最终效果图: 二、处理方式 1、先将DataFrame数据转换为Numpy数组; 2、先使用np.transpose函数,找到0和1值的索引; 3、然后创建散点图; 4、完成散点图后,由于需要展示的坐标值是文本,所以

    2024年02月16日
    浏览(33)
  • Python基于指定范围筛选并剔除Excel表格中的数据

      本文介绍基于 Python 语言,读取 Excel 表格文件,基于我们给定的规则,对其中的数据加以 筛选 ,将 不在指定数据范围内 的数据剔除,保留 符合我们需要 的数据的方法。   首先,我们来明确一下本文的具体需求。现有一个 Excel 表格文件(在本文中我们就以 .csv 格式

    2024年02月08日
    浏览(41)
  • 【Python数据插值】

    插值是一种从离散数据点构建函数的数学方法。插值函数或者插值方法应该与给定的数据点完全一致。插值可能的应用场景: 根据给定的数据集绘制平滑的曲线 对计算量很大的复杂函数进行近似求值 插值和前面介绍过的最小二乘拟合有些类似。在最小二乘拟合中,我们感兴

    2024年02月16日
    浏览(27)
  • 285个地级市空间权重矩阵(空间邻接、地理距离、经济距离、经济地理嵌套矩阵)

    285个地级市空间权重矩阵(空间邻接、地理距离、经济距离、经济地理嵌套矩阵) 1、范围:285个地级市 2、数据包括:包括空间邻接矩阵、空间地理距离矩阵、空间经济距离矩阵、空间经济地理嵌套矩阵 其中空间经济距离矩阵根据2003-2019年人均GDP得到 3、指标说明: 空间权

    2024年02月16日
    浏览(46)
  • SQL Server实战二:创建、修改、复制、删除数据库表并加以数据处理

      本文介绍基于 Microsoft SQL Server 软件,实现数据库 表 的 创建、修改、复制、删除 与 表数据处理 的方法。 目录 1 交互式创建数据库表T 2 交互式创建数据库表S 3 T-SQL创建数据库表C 4 T-SQL创建数据库表SC 5 T-SQL创建数据库表TC 6 交互式向数据库表S中添加新列NATIVE 7 交互式修改

    2024年04月26日
    浏览(37)
  • matlab做经济地理、地理距离、经济距离空间权重矩阵

    首先讲下地理加权空间权重矩阵: 该矩阵的经济含义是通过不同点的坐标系之间的距离远近来衡量两地之间的关系重要程度,当两点之间距离较远,所占的权重越低,而距离越近,权重越高。故操作如下: 首先需要导入坐标数据: A=csvread(\\\'JWD.csv\\\',1,0); % JWD.csv是文件名,csvrea

    2023年04月12日
    浏览(30)
  • 全面地介绍 将二维数据矩阵插值拟合为二维曲面方程——基于matlab

    要利用matlab将二维数据矩阵拟合成一个二维曲面方程,首先,我们得明白什么是插值和拟合。下面,从对洋流数据的处理入手,先以一个基本的流程为例,进行问题的概述,然后介绍两种具体的方法。 根据已知的数据点,生成一个连续的函数,可以在任意位置求值。matlab 提

    2024年04月11日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包