使用gdal_translate时如何保留源栅格投影?

时间:2019-05-02 14:16:09

标签: python-3.x gis raster gdal map-projections

我目前正在使用小型栅格优化工具。我们的目标是拥有一个简单的CLI工具,从地理参考的源栅格计算图块并创建相应的index.shp。为此,我正在使用python 3.7和gdal。该工具可以平稳运行,并生成预期的图块和shapefile,但是它摆脱了存储在源栅格中的投影。 Qgis将新计算的图块默认为EPSG 4326,同时通知我有关未知投影的信息。原始栅格位于EPSG 25832中。

我的设置:

Windows 10 64位

Python 3.7.2

Gdal我无法访问特定版本,因为未安装gdal-config且无法使其工作,但它是64位的,并且我是通过gisinternals.com提供的二进制文件安装的。 Windows软件列表显示GDAL 204 MSVC 2017。

在运行脚本时,我收到错误消息,告诉我有关文件丢失的信息,例如pcs.csv,datum.csv ellipsoid.csv等。这表明拥有这些文件可以解决我的问题。 但奇怪的是,我使用Osgeo4W来安装带有gdal的python 2.7,它的工作原理很吸引人,当然已经调整了python部件。瓦片将被计算并停留在源的投影中。没有任何指定投影的外部文件,实际上使用的是完全相同的数据,这确实让我感到困惑。

据我了解,没有标志或选项会迫使gdal保持投影。如果忽略或误解了文档,我很乐意为您提供建议。

在任何人问之前,我都知道使用osgeo4w安装程序显然是这里简单易行的解决方案。但是请记住,Python 2.7即将停产,并以此为契机学习新知识,我想构建一个在机器上安装了gdal的基于3.7的工具

相应的代码如下所示:

1。)命令字符串已构建

2。)字符串传递给os.system,该操作系统随后相应地执行

    for i in range(0, width, tilelenght):
        y = 0
        for j in range(0, height, tilelenght):
            gdaltranString = f'gdal_translate -of GTIFF -srcwin {i}, {j}, {tilelenght}, {tilelenght} {input_filepath} {output_filepath}{x}_{y}.tif'
            subprocess.run(gdaltranString)
            y = y+1
        x = x+1

预期结果将是功能性.tif文件的集合,这些文件具有源文件的EPSG代码,在这种情况下为25832。

但是正如已经提到的,投影在过程中的某个位置丢失了。

1 个答案:

答案 0 :(得分:0)

因此,我找到了解决我的问题的方法,却没有真正理解它是如何成为一个问题的。

解决方案是创建一个用户变量 GDAL_DATA,其中包含投影定义文件的路径。

奇怪的是,我现在拥有GDAL_DATA,作为系统变量用户变量,它们都指向同一目录。

如果有人对Windows系统变量的神秘方式有更多了解,请分享您的智慧,或所说智慧的来源。