GDAL polygonize命令行和python
我一直在使用命令行中的GDAL polygonize命令行和python,python,gdal,Python,Gdal,我一直在使用命令行中的gdal将asc文件转换为GeoJSON输出。我可以成功地做到这一点: gdal\u polygonize.py input.asc-f“GeoJSON”output.json 现在,我希望使用Python并对一系列文件执行此过程 import gdal import glob for file in glob.glob("dir/*.asc"): new_name = file[:-4] + ".json" gdal.Polygonize(file, "-
gdal
将asc
文件转换为GeoJSON
输出。我可以成功地做到这一点:
gdal\u polygonize.py input.asc-f“GeoJSON”output.json
现在,我希望使用Python并对一系列文件执行此过程
import gdal
import glob
for file in glob.glob("dir/*.asc"):
new_name = file[:-4] + ".json"
gdal.Polygonize(file, "-f", "GeoJSON", new_name)
Hpwever,对于完全相同的文件,我得到以下错误TypeError:在方法'Polygonize'中,参数1的类型为'GDALRasterBandShadow*'
为什么命令行版本有效而python版本无效?找到对gdal.Polygonize的调用的错误的最简单方法是查看该函数的文档。您可以通过C算法API找到它。诚然,GDAL的文档并不是最连贯、最容易访问的。对于C API到Python的转换来说,这是双重事实 杏仁多角质化 您可以看到前两个参数是RasterBand类型。输出类型是OGRLayer,还有其他(在本例中不需要)选项 要使用
gdal.Polygonize()
您需要使用gdal打开输入文件,获取光栅带,并将其传递到函数中。类似地,您将需要创建一个新的geojson矢量文件,并将其层传递到函数中
使用子流程
作为替代方案,您可以使用python的子流程
模块来调用您已经知道的同一个命令行程序
import subprocess
import glob
import os
for f in glob.glob("dir/*.asc"): # don't override python's file variable
out_file = f[:-4] + ".json"
in_file = os.path.join("dir", f) # need the full path of the input
cmdline = ['gdal_polygonize.py', in_file, ,"-f", "GeoJSON", out_file]
subprocess.call(cmdline)
import subprocess
import glob
import os
for f in glob.glob("dir/*.asc"): # don't override python's file variable
out_file = f[:-4] + ".json"
in_file = os.path.join("dir", f) # need the full path of the input
cmdline = ['gdal_polygonize.py', in_file, ,"-f", "GeoJSON", out_file]
subprocess.call(cmdline)