GDAL 多边形化命令行和 python
GDAL polygonize command line and python
我一直在命令行中使用 gdal
将 asc
文件转换为 GeoJSON
输出。我可以成功做到这一点:
gdal_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: in method 'Polygonize', argument 1 of type 'GDALRasterBandShadow *'
为什么命令行版本有效而 python 版本无效?
找出您对 gdal.Polygonize 的调用有何问题的最简单方法是调查该函数的文档。您可以通过 C 算法 API 找到它 here。不可否认,GDAL 的文档并不是最连贯和最容易访问的。对于 C API 到 Python.
的转换,这是双重正确的
GDALPolygonize
GDALPolygonize (GDALRasterBandH hSrcBand,
GDALRasterBandH hMaskBand,
OGRLayerH hOutLayer,
int iPixValField,
char ** papszOptions,
GDALProgressFunc pfnProgress,
void * pProgressArg
)
可以看到前两个参数是RasterBand类型。输出类型是 OGRLayer,还有其他(在本例中是不必要的)选项。
要使用 gdal.Polygonize()
,您需要使用 gdal 打开输入文件,获取栅格波段,然后将其传递给函数。同样,您需要创建一个新的 geojson 矢量文件,并将其图层传递给函数。
使用subprocess
作为替代方案,您可以使用 python 的 subprocess
模块来调用您已知的相同命令行程序。
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)
我一直在命令行中使用 gdal
将 asc
文件转换为 GeoJSON
输出。我可以成功做到这一点:
gdal_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: in method 'Polygonize', argument 1 of type 'GDALRasterBandShadow *'
为什么命令行版本有效而 python 版本无效?
找出您对 gdal.Polygonize 的调用有何问题的最简单方法是调查该函数的文档。您可以通过 C 算法 API 找到它 here。不可否认,GDAL 的文档并不是最连贯和最容易访问的。对于 C API 到 Python.
的转换,这是双重正确的GDALPolygonize
GDALPolygonize (GDALRasterBandH hSrcBand,
GDALRasterBandH hMaskBand,
OGRLayerH hOutLayer,
int iPixValField,
char ** papszOptions,
GDALProgressFunc pfnProgress,
void * pProgressArg
)
可以看到前两个参数是RasterBand类型。输出类型是 OGRLayer,还有其他(在本例中是不必要的)选项。
要使用 gdal.Polygonize()
,您需要使用 gdal 打开输入文件,获取栅格波段,然后将其传递给函数。同样,您需要创建一个新的 geojson 矢量文件,并将其图层传递给函数。
使用subprocess
作为替代方案,您可以使用 python 的 subprocess
模块来调用您已知的相同命令行程序。
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)