Chcę georeferencję rastra za pomocą python
i GDAL
. Moje obecne podejście polega na dzwonieniu gdal_translate
i gdalwarp
korzystaniu os.system
z brzydkiej listy punktów kontroli naziemnej. Naprawdę chciałbym zrobić to w sposób natywny python
.
To jest obecny proces, którego używam:
import os
os.system('gdal_translate -of GTiff -gcp 1251.92 414.538 -7.9164e+06 5.21094e+06 -gcp 865.827 107.699 -7.91651e+06 5.21104e+06 "inraster.tif" "outraster1.tif"')
os.system('gdalwarp -r bilinear -tps -co COMPRESS=NONE "outraster2.tif" "outraster3.tif"')
Istnieje poprzednie pytanie i odpowiedź z 2012 roku, które stwierdzają, że gdal_translate
można uzyskać do niej dostęp po zaimportowaniu gdal
. Nie jestem pewien, czy jest przestarzały lub czy jest zły, ale kiedy uruchamiam from osgeo import gdal
, nie widzę gdal.gdal_translate
opcji.
Nie wiem, czy istnieje, ale bardzo bym chciała tłumaczyć i wyrzucać rastry w pythoniczny sposób. Na przykład:
# translate
gcp_points = [(1251.92, 414.538), (-7.9164e+06, 5.21094e+06)]
gdal.gdal_translate(in_raster, gcp_points, out_raster1)
# warp
gdal.gdalwarp(out_raster1, out_raster2, 'bilinear', args*)
Czy takie podejście jest możliwe?
Odpowiedzi:
Oto przykład, który robi mniej więcej to, o co prosisz. Główne parametry to
geotransform
tablica, której używa gdal do opisania położenia rastra (pozycja, skala pikseli i pochylenie) orazepsg
kod projekcji. Dzięki temu poniższy kod powinien poprawnie georeferencyjnie raster i określić jego rzut.Nie testowałem zbyt wiele, ale wydawało mi się, że to działa. Musisz upewnić się, że współrzędne, które wprowadzam, są prawidłowe i prawdopodobnie zmienisz rzut oraz skalę / rozmiar piksela. Mam nadzieję, że to pomoże.
źródło