如何转换(重新定位).tif栅格图层?


10

我开始将QGIS用于我的论文(环境物理学),并且不得不承认我对此一无所知-我一直使用Mathematica或Matlab。

我的问题是:我有一个.tif格式的栅格图层,该栅格图层放错了位置(我需要将其向南和向西移动100m)。我需要翻译(重新定位)它,而我完全不知道该怎么做。

我已经尝试过Affine转换,但是它不起作用(不允许我选择输入层);我也读过这篇《如何在Python中转换(重新定位)栅格》?但是我不得不承认我不太了解它,我尝试了几次,但是对python不好。


我假设.tif层以某种方式进行了地理参考?元数据中说明了哪个坐标参考系统?您很有可能只需要更正CRS设置,图层便会对齐。
Underdark

感谢您的评论!是的,它已经过地理定位,并且坐标系是正确的坐标系(WGS 84 / UTM区域32N)..不幸的是,位移来自我需要使用的(写得不好)插件,而且我无法更改/纠正..因此,需要重新定位图层...

Affine Transform插件仅适用于矢量图层。
AndreJ

Answers:


9

啊!我设法做到这一点,下面什么在链接的讨论中说...。(如何翻译(复位),一个在Python光栅?)显然它只是花了一段图如何使用Python控制台!;) 不管怎么说,多谢拉!:)

我从QGIS Python控制台使用了GDAL / Python!:)

我写的是:

from osgeo import gdal
gdal.AllRegister()
rast_src = gdal.Open('filename.tif', 1 )
gt = rast_src.GetGeoTransform()
gtl = list(gt)
gtl[0] -= 200
gtl[3] -= 100
rast_src.SetGeoTransform(tuple(gtl))
rast_src = None

编辑:将“ gdall.AllRegister()”切换为“ gdal.AllRegister()”。


代码中有一个字母错字:gdall.AllRegister不应拼写为两个“ L”。(它的产生是:“未定义'gdall'”)。不幸的是,我不能编辑它,因为编辑必须至少6个字符。
Smerla '18年

这个答案真的帮助了我!我唯一要添加的就是通过键入print(gtl)函数确定并检查转换之前的单位。例如,我的栅格以dd mm ss为单位,因此要弄清十进制度数是多少米,我使用了这里可用的表(更容易找到纬度而不是经度!):用于将米转换为十进制度的表
Justin Kray

1

Rasmover插件应该做您想要的。

您必须允许实验性插件才能在插件列表中获取它。

结果是一个虚拟的栅格文件,您可以根据需要使用文本编辑器进行编辑以调整参数。


找不到...可能不适用于3.6吗?
foob​​arbecue

1
可以在github.com/geodrinx/rasmover上找到该插件,但没有近期活动。参见osgeo-org.1560.x6.nabble.com/…gis.stackexchange.com/questions/274074/…。也许Rasterbender插件可以代替它。
AndreJ

0

在特殊情况下,栅格已经具有UTM投影,并且您想将其纵向移动到另一个UTM区域,我发现gdal_translate可以做到这一点。例如,输入栅格位于任何UTM区域Z中,并且您要将其移动到UTM区域26(即,大多数纬度为大西洋):

gdal_translate -a_srs '+proj=utm +zone=26 +datum=WGS84' input.tif output.tif

报告的模型空间单位中的原点和角坐标gdalinfo保持不变。但是拐角处的经度/纬度会发生变化,并且栅格确实确实移至了世界的另一部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.