Használható valamilyen gdal API segítségével a gdal_translate
meghívására Python-kódból? Nem arra gondolok, hogy egyszerűen a gdal_translate.exe fájlt futtatjuk a fájlrendszerből, hanem valamilyen módon kódban hívom, így nem kell tudnom a gdir_translate végrehajtható fájl pontos könyvtárát?
Megjegyzések
- Igen, a gdal-2.1. Ezt a választ helyesnek kell elfogadni.
Válasz
Mivel a GDAL 2.1 (további információ itt ), a GDAL és az OGR segédprogramok használhatók könyvtárfunkciókként. Például:
from osgeo import gdal ds = gdal.Open("input.tif") ds = gdal.Translate("output.tif", ds, projWin = [-75.3, 5.5, -73.5, 3.7]) ds = None
Megjegyzések
- Az összes lehetőség, amely
gdal.Translate()
take-ok itt találhatók: gdal.org/python/osgeo.gdal-module.html#TranslateOptions - I ' ezt megpróbáltam használni, és ne ' ne kapjon hibát, de a kimeneti fájl nem ' t létrehozta. Van ötlet miért?
- szintén nem kap kimeneti fájlt és hibát. A kimeneti útvonalak és a projWin paraméterek helyesek.
Válasz
Lásd a GDAL API bemutatója .
#Import gdal from osgeo import gdal #Open existing dataset src_ds = gdal.Open( src_filename ) #Open output format driver, see gdal_translate --formats for list format = "GTiff" driver = gdal.GetDriverByName( format ) #Output to new format dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 ) #Properly close the datasets to flush to disk dst_ds = None src_ds = None
Ha több kimeneti vezérlést szeretne, például átméretezést, albeállításokat stb … használjon egy VRT bemenetként, ezt a gdal_translate belsőleg csinálja.
Megjegyzések
- sajnos ez nem tartalmaz ' t az elutasítást, igaz?
- @butcher – nem. Mivel a kérdés nem említette az újravetést. Természetesen a gdal python API segítségével újraprojektálhatja a rasztereket. Ha tudni szeretné, hogyan, tegyen fel egy új kérdést.
- Már itt megtettem: gis.stackexchange.com/questions/103874/… , de Thiust másodpéldányként jelölték meg 🙁
- @butcher – ez a kérdés másolataként volt lezárva. A kérdésed a gdal_translate szóval is foglalkozik . Tudja, hogy a gdal_translate nem újraprojektál? Ha újraprojektálni akar, használja a gdalwarp vagy a gdal python API metódust – gdal.ReprojectImage
Válasz
Igen, a Pythonon belül felhívhatja a GDAL segédprogramokat. A megközelítésben nagyon kisebb különbségek vannak attól függően, hogy a segédprogram egy exe a maga jogán, vagy egy darab python kód is. Bárhogy is használd, bár a alfolyamat modult kell használnod:
import subprocess # constants gdalTranslate = r"C:\Program Files\GDAL\gdal_translate.exe" src = r"C:\somefolder\somefile.tif" dst = r"C:\someotherfolder\myresul.tif" cmd = "-ot float32 -outsize 25 25" # just for example! # see note below def youCanQuoteMe(item): return "\"" + item + "\"" fullCmd = " ".join([gdalTranslate, cmd, youCanQuoteMe(src), youCanQuoteMe(dst)]) subprocess.popen(fullCmd)
Észre fogja venni, hogy szökött idézőjeleket adok az útjaim köré. Ez azért van, mert Windows rendszeren tr utakkal, különösen olyanokkal, amelyeken szóköz van, vagy ahol a “\” karakterek egy másik véletlenül megszökött karaktert eredményeznek. Tehát csak megőrzöm a megfelelő elérési utat az aspec-ben.
Ha az egyik python segédprogramot használja, akkor ugyanezt tegye, kivéve az exe-t az alfolyamat parancssor elején. ” C: \ python32 \ python.exe “(vagy bármelyik verzióval rendelkezik), a második elem pedig a használni kívánt python segédprogram.
Nyilvánvaló, hogy a fájlrendszeren is iterálhat, ahelyett, hogy keményfájlokat használna. kódolt állandók, de ez csak egy példa.
SZERKESZTÉS – QGIS beépülő modulok általánosítása
A QGIS indításkor számos környezeti változót hoz létre / módosít. Tehát ezek segítségével (lásd: Beállítások-> Opciók-> Rendszer) általánosított elérési útváltozókat hozhat létre a GDAL könyvtárakba / segédprogramokba, a fenti példa kemény kódolású útvonalai helyett.
Megjegyzések
- Tehát ' nem tudom ezt megtenni? importálja a gdal_translate fájlt, majd hívja meg a .main ()?
- Nem – ez nem fog eredményt ' t használni. A gdal_translate nem Python csomag, ezért a python nem fog tudni róla ' semmit. Hibaüzenetet kap, amikor azt mondja, hogy " ImportError Nincs modul, amelynek neve gdal_translate ". Használja az alfolyamat modult annak hívására.
- ok a hasonló kérdések a gdal_retile.py használatával. Megpróbáltam a következőket tenni: import gdal_retile gdal_retile.main (" -v -r bilinear -szintek 4 -ps 2048 2048 -co \ " tiled = IGEN \ " -targetDir kábelpiramis – optfile files.txt "), de megkapom a hibát: Felismerhetetlen parancsopció: – Van ötlet miért?
- Offhanden tudok ' nem látja a problémát, azzal a feltétellel, hogy feltételezhetem, hogy nem tetszik neki a ' –optfile ' kapcsoló. Ez utóbbi nincs dokumentálva.
- @MappaGnosis Van-e a gdal_translate alternatívája a Python gdal könyvtárban?
Válasz
Ezt különféle gdal parancsokkal teszem az os.system segítségével, amellyel a mint a parancssorból:
os.system("gdal_translate -of GTiff " + sourcefile + " " + destinationfile)
A 7. előadás itt is leírja: http://www.gis.usu.edu/~chrisg/python/2009/
Megjegyzések
- A GDAL parancsok python függvényekként állnak rendelkezésre a GDAL 2.1-től a RFC 59.1 . A
subprocess.call
is biztonságosabb, mint aos.system
. - Valakinek le kell írnia egy jó példát ezekre a Python-függvényekre; pár órán át birkóztam a
gdal.Warp()
vel, hogy megfelelő módon megkapjam a adatforráscutlineDSName
néven acutlineSQL
hajtásához. (Tudom, igaz? Pár óra valójában valamit ledolgoz ? A borzalom! < / viccelődve >). Végül működött, és jelentősen gyorsabbnak tűnik, mint aos.system()
vagy asubprocess.call()
. ' ~ 2 millió vágást végez, ezért ' nem tudtam, hogy ' s valójában gyorsabban ma este, de ' pontosan működik.
Válasz
Itt van egy gyorskód azok számára, akik sávokat akarnak menteni egy összetett többsávos TIF-ből egyes fájlokba a PyDON GDAL Translate segítségével.
import gdal in_path = "C:/GIS/Sample.tif" #input composite raster out_path = "C:/GIS/Output/" #output directory for individual bands as files #Open existing raster ds src_ds = gdal.Open(in_path) for i in range(1,src_ds.RasterCount +1): #Save bands as individual files out_ds = gdal.Translate(out_path + "band" + str(i) + ".tiff", src_ds, format="GTiff", bandList=[i]) out_ds=None
Ez hasznos lehet a további feldolgozáshoz (pl. a Rasterio használatával, például itt ).