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

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 a os.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ás cutlineDSName néven a cutlineSQL 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 a os.system() vagy a subprocess.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 ).

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük