Viac

Konvertujte vektor (tvar bodu) na raster (tif) pomocou python gdal lib v qgis

Konvertujte vektor (tvar bodu) na raster (tif) pomocou python gdal lib v qgis


Pokúšam sa previesť vektorovú vrstvu (súbor tvarov bodov) na množinu rastrových údajov (tiff) pomocou knižnice python gdal-library v qgis.

Na grafickom používateľskom rozhraní si jednoducho vyberiem menu „raster-> konverzia-> rasterizácia“. Aby som dostal to, čo chcem, vyplním názvy súborov v dialógovom okne nástroja a zvolím horizontálne rozlíšenie: „rozlíšenie v mapových jednotkách na pixel“: 0,033 a vertikálne: 0,0164. To funguje dobre, ale keď sa pokúšam skriptovať, orientoval som sa na dokumentáciu a upravil kód zo zdroja: http://pcjericks.github.io/py-gdalogr-cookbook/raster_layers.html#convert-an-ogr-file-to -a-raster takto:

# 1. Definujte veľkosť pixelu a NoData nového rastra NoData_value = -9999 x_res = 0,03333378 y_res = 0,01666641 pixel_size = 1 # 2. Názvy súborov pre vstup a výstup _in = r "C:/Users/… /hoppla.shp" _out = r "C:/Users/... /hoppla.tif" # 3. Otvorte súbor Shapefile source_ds = ogr.Open (_in) source_layer = source_ds.GetLayer () x_min, x_max, y_min, y_max = source_layer.GetExtent () # 4. Vytvoriť Cieľ - TIFF _raster = gdal.GetDriverByName ('GTiff'). Create (_out, x_res, y_res, 1, gdal.GDT_Byte) _raster.SetGeoTransform ((x_min, pixel_size, 0, y_max, 0, -pixel_size)) _band = _ra .GetRasterBand (1) _band.SetNoDataValue (NoData_value) # 5. Rastrujte gdal.RasterizeLayer (_raster, [1], source_layer, burn_values ​​= [0])

Výsledkom je chybové hlásenie:

Traceback (posledný hovor posledný): Súbor "", riadok 1, v súbore "C:/Users/… /test.py", riadok 73, v _raster = gdal.GetDriverByName ('GTiff'). Vytvoriť (_out, x_res , y_res, 1, gdal.GDT_Byte) Súbor "C:  PROGRA ~ 1  QGISBR ~ 1  apps  Python27  lib  site-packages  osgeo  gdal.py", riadok 388, v časti Vytvoriť návrat _gdal.Driver_Create (vlastný , *args, ** kwargs) TypeError: v metóde 'Driver_Create', argument 3 typu „int“

Neprijíma počiatočné hodnoty pre x_res a y_res,
ale ako môžem zadať správnu geometriu pre svoj súbor údajov?

Dodatočné informácie:

QGIS 2.6.1 Brighton na Win7 crs: WGS84 - epsg4326 vstupný tvar vzdialenosť horizontálneho bodu: 0,03333378 jednotiek vstupný tvar vzdialenosť vertikálneho bodu: 0,01666641 jednotiek

Hovorí vám to, že sa vám nepáčia vaše hodnoty ako int, zaokrúhľujú sa na 0 a nemôžete mať raster 0 riadkov, 0 stĺpcov. Dôvodom je, že zadávate veľkosť bunky, nie riadky a stĺpce. Keď vytvoríte množinu údajov, ktorá potrebuje vedieť, koľko to je riadkov a stĺpcov, potom jej poviete, aké veľké sú bunky v geotransformácii:

# 1. Definujte veľkosť pixelu a NoData nového rastra NoData_value = -9999 x_res = 0,03333378 # za predpokladu, že sa jedná o tieto veľkosti buniek y_res = 0,01666641 # zmena podľa veľkosti pixelov_size = 1 # 2. Názvy súborov pre vstup a výstup _in = r "C: /Users/… /hoppla.shp "_out = r" C:/Users/… /hoppla.tif " # 3. Otvorte súbor Shapefile source_ds = ogr.Open (_in) source_layer = source_ds.GetLayer () x_min, x_max, y_min, y_max = source_layer.GetExtent () # 4. Create Target - TIFF cols = int ((x_max - x_min) / x_res) rows = int ((y_max - y_min) / y_res) _raster = gdal.GetDriverByName ('GTiff'). Create (_out, stĺpce, riadky, 1, gdal.GDT_Byte) _raster.SetGeoTransform ((x_min, x_res, 0, y_max, 0, -y_res)) _band = _raster.GetRasterBand (1) _band.SetNoDataValue (NoData_value) # 5. Rastrovať prečo je hodnota napaľovania 0 ... nie je to to isté ako pozadie? gdal.RasterizeLayer (_raster, [1], source_layer, burn_values ​​= [0])

Neviem, aký je priestorový odkaz na váš vstup, takže neviem, či sú vaše veľkosti buniek X a Y vhodné. Áno, pre X a Y môžete mať rôzne veľkosti buniek. Ak by mala byť veľkosť bunky 1, zmeňte hodnoty na 1 alebo jednoducho vytvortecols = int (x_max - x_min)ariadky = int (y_max - y_min)pretože čokoľvek delené 1 je nezmenené ... ale rastrový rast stále potrebuje vnútornú hodnotu.