Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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
GDAL polygonize命令行和python_Python_Gdal - Fatal编程技术网

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)