gpt4 book ai didi

python - GDAL多边形化命令行和python

转载 作者:行者123 更新时间:2023-11-28 22:33:16 24 4
gpt4 key购买 nike

我一直在命令行中使用 gdalasc 文件转换为 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 的调用有什么问题,最简单的方法是调查该函数的文档。你可以找到它here通过 C 算法 API。不可否认,GDAL 的文档并不是最连贯和最容易访问的。这对于将 C API 转换为 Python 来说是双重正确的。

GDAL多边形化

GDALPolygonize  (GDALRasterBandH    hSrcBand,
GDALRasterBandH hMaskBand,
OGRLayerH hOutLayer,
int iPixValField,
char ** papszOptions,
GDALProgressFunc pfnProgress,
void * pProgressArg
)

您可以看到前两个参数是 RasterBand 类型。输出类型是 OGRLayer,还有其他(在本例中是不必要的)选项。

要使用 gdal.Polygonize(),您需要使用 gdal 打开您的输入文件,获取栅格波段,并将其传递到函数中。同样,您需要创建一个新的 geojson 矢量文件,并将其图层传递给函数。

使用子进程

作为替代方案,您可以使用 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)

关于python - GDAL多边形化命令行和python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com