CSV文件转换成shp文件后通过IDW法插值处理生成栅格

这段代码展示了如何使用Python的arcpy库处理日照时数数据。首先,通过get_path函数遍历目录获取CSV文件路径,然后利用csvToShp将CSV转换为shapefile。接着,运用Idw插值方法计算日照分布,并用ExtractValuesToPoints将结果投影到DEM的shapefile上。整个过程涉及地理信息系统和数据分析操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理日照时数数据,要根据观测站所测得的数据计算整张黄土高原的日照时数分布。

代码如下:

import arcpy
from arcpy import env
from arcpy.sa import *
import os
from netCDF4 import Dataset
import csv
import math
import re
import arcpy.da
import pandas as pd


def get_path(filenames_in,nameExtension):
    path_list = []
    for root, dirs, files in os.walk(filenames_in):
        for file in files:
            # print(dir)
            if file[-3:] == f"{nameExtension}":
                filePath = os.path.join(filenames_in, file)
                # print(pathDir)
                path_list.append(filePath)
    return path_list

def csvToShp(path,outpath):
    path = str(path)
    name = getName(path)
    outpath = outpath + os.path.sep + name + ".shp"
    if not os.path.exists(outpath):
        nc = arcpy.management.XYTableToPoint(path, outpath, "lon", "Lat")
        return outpath


def getName(path):
    name = path.split('\\')[-1]
    timelist = re.findall("\d+", name)[0]
    time = f'{timelist[:4]}y{timelist[4:]}m'
    return time

def tifToShp(pointRoot, tifPath, outFilie):
    out_path = tifPath.split('\\')[-1]
    out_path = outFilie + "\\" + out_path[:-3] + 'shp'
    print(out_path)
    if os.path.exists(out_path):
        pass
    else:
        nc_Ra = ExtractValuesToPoints(pointRoot, tifPath, out_path, "NONE")
        print(1)
        print(out_path + '已转换成shp文件')
        return nc_Ra

work_space = r"D:\项目文件\Aconada\untitled\SSDcsv"
shpOutPath = r"D:\datasum\pointShp\ssd"
pointRoot = r"D:\datasum\DEM\\slope1.shp"
csvPathList = get_path(work_space,"csv")
for csvPath in csvPathList:
    shpPath = csvToShp(csvPath,shpOutPath)
    if shpPath == None:
        continue
    outIDW = Idw(shpPath, "SSD", cell_size=0.0288000000000002)
    shpOut_path = shpOutPath + os.path.sep + shpPath.split("\\")[-1][:-4]
    ExtractValuesToPoints(pointRoot, outIDW, shpOut_path, "NONE","ALL")
    print(shpOut_path," have been writed!")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值