Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用gdal从csv文件生成tiff文件_Python_Csv_Tiff_Gdal_Geotiff - Fatal编程技术网

在python中使用gdal从csv文件生成tiff文件

在python中使用gdal从csv文件生成tiff文件,python,csv,tiff,gdal,geotiff,Python,Csv,Tiff,Gdal,Geotiff,我有许多采用这种格式的csv文件: Latitude,Longitude,Concentration 53.833399,-122.825257,0.021957 53.837893,-122.825238,0.022642 .... 我的目标是基于这些文件中的信息生成GeoTiff文件(每个csv文件一个tiff文件),最好使用python。这是几年前在我正在做的项目上做的,但是他们以前是如何做的已经丢失了。我只知道他们很可能使用了GDAL 我试图通过研究如何使用GDAL来做到这一点,但这并

我有许多采用这种格式的csv文件:

Latitude,Longitude,Concentration
53.833399,-122.825257,0.021957
53.837893,-122.825238,0.022642
....
我的目标是基于这些文件中的信息生成GeoTiff文件(每个csv文件一个tiff文件),最好使用python。这是几年前在我正在做的项目上做的,但是他们以前是如何做的已经丢失了。我只知道他们很可能使用了GDAL

我试图通过研究如何使用GDAL来做到这一点,但这并没有让我有所收获,因为资源有限,我不知道如何使用GDAL


有人能帮我吗?

这是我为您的案例改编的一段代码。您需要将包含所有*.exe的GDAL目录添加到您的路径中,它才能工作(在大多数情况下,它是
C:\ProgramFiles(x86)\GDAL

它使用
gdal\u grid.exe
util(请参阅此处的文档:)

您可以根据需要修改
gdal\u cmd
变量

import subprocess
import os

# your directory with all your csv files in it
dir_with_csvs = r"C:\my_csv_files"

# make it the active directory
os.chdir(dir_with_csvs)

# function to get the csv filenames in the directory
def find_csv_filenames(path_to_dir, suffix=".csv"):
    filenames = os.listdir(path_to_dir)
    return [ filename for filename in filenames if filename.endswith(suffix) ]

# get the filenames
csvfiles = find_csv_filenames(dir_with_csvs)

# loop through each CSV file
# for each CSV file, make an associated VRT file to be used with gdal_grid command
# and then run the gdal_grid util in a subprocess instance
for fn in csvfiles:
    vrt_fn = fn.replace(".csv", ".vrt")
    lyr_name = fn.replace('.csv', '')
    out_tif = fn.replace('.csv', '.tiff')
    with open(vrt_fn, 'w') as fn_vrt:
        fn_vrt.write('<OGRVRTDataSource>\n')
        fn_vrt.write('\t<OGRVRTLayer name="%s">\n' % lyr_name)
        fn_vrt.write('\t\t<SrcDataSource>%s</SrcDataSource>\n' % fn)
        fn_vrt.write('\t\t<GeometryType>wkbPoint</GeometryType>\n')
        fn_vrt.write('\t\t<GeometryField encoding="PointFromColumns" x="Longitude" y="Latitude" z="Concentration"/>\n')
        fn_vrt.write('\t</OGRVRTLayer>\n')
        fn_vrt.write('</OGRVRTDataSource>\n')

    gdal_cmd = 'gdal_grid -a invdist:power=2.0:smoothing=1.0 -zfield "Concentration" -of GTiff -ot Float64 -l %s %s %s' % (lyr_name, vrt_fn, out_tif)

    subprocess.call(gdal_cmd, shell=True)
导入子流程
导入操作系统
#包含所有csv文件的目录
dir_with_csvs=r“C:\my_csv_文件”
#将其设置为active directory
chdir(dir_和csv)
#函数获取目录中的csv文件名
def find_csv_文件名(路径_至_目录,后缀=“.csv”):
filenames=os.listdir(路径到目录)
返回[如果filename.endswith(后缀),则返回filename中filename的filename]
#获取文件名
csvfiles=find_csv_文件名(dir_with_csv)
#循环浏览每个CSV文件
#对于每个CSV文件,制作一个关联的VRT文件,与gdal_grid命令一起使用
#然后在子流程实例中运行gdal_grid util
对于csvfiles中的fn:
vrt_fn=fn.替换(“.csv”和“.vrt”)
lyr_name=fn.replace('.csv','')
out_tif=fn.replace(“.csv”和“.tiff”)
开放式(vrt_fn,'w')作为fn_vrt:
fn\u vrt.write('\n')
fn\u vrt.write('\t\n'%lyr\u name)
fn\u vrt.write('\t\t%s\n'%fn)
fn\u vrt.write('\t\twkbPoint\n')
fn\u vrt.write('\t\t\n')
fn\u vrt.write('\t\n')
fn\u vrt.write('\n')
gdal_cmd='gdal_grid-a invdist:power=2.0:smoothing=1.0-zfield“Concentration”-GTiff-ot Float64-l%s%s%%(lyr_name,vrt_fn,outtif)
子进程调用(gdal\u cmd,shell=True)

只需将参数-a_srs“EPSG:32610”添加到代码中的“gdal_cmd”字符串中,即可设置输出文件的投影。