pretvorba-> raste ..." /> pretvorba-> raste ..." />
Več

Pretvorite vektor (obliko točke) v raster (tif) z uporabo python gdal lib v qgis

Pretvorite vektor (obliko točke) v raster (tif) z uporabo python gdal lib v qgis


Poskušam pretvoriti vektorski sloj (point-shapefile) v nabor podatkov raster (tiff) z uporabo python gdal-library v qgis.

Na grafičnem uporabniškem vmesniku preprosto izberem meni "raster-> pretvorba-> rasteriziraj". Če želim dobiti, kar želim, v pogovornem oknu orodja izpolnim imena datotek in izberem "ločljivost v enotah zemljevida na slikovno piko" vodoravno: 0,033 in navpično: 0,0164. To dobro deluje, toda ko sem poskušal narediti skript, sem se usmeril v dokumentacijo in kodo prilagodil iz vira: http://pcjericks.github.io/py-gdalogr-cookbook/raster_layers.html#convert-an-ogr-file-to -a-raster, kot je ta:

# 1. Določite pixel_size in NoData vrednost novega rastra NoData_value = -9999 x_res = 0.03333378 y_res = 0.01666641 pixel_size = 1 # 2. Imena datotek za vhod in izhod _in = r "C:/Users/… /hoppla.shp" _out = r "C:/Users/… /hoppla.tif" # 3. Odprite datoteko Shapefile source_ds = ogr.Open (_in) source_layer = source_ds.GetLayer () x_min, x_max, y_min, y_max = source_layer.GetExtent () # 4. Ustvari Cilj - TIFF _raster = gdal.GetDriverByName ('GTiff'). Ustvari (_out, x_res, y_res, 1, gdal.GDT_Byte) _raster.SetGeoTransform ((x_min, pixel_size, 0, y_max, 0, -pixel_size _) .GetRasterBand (1) _band.SetNoDataValue (NoData_value) # 5. Rasterize gdal.RasterizeLayer (_raster, [1], source_layer, burn_values ​​= [0])

Posledica tega je sporočilo o napaki:

Sledenje (zadnji klic zadnji): Datoteka "", vrstica 1, v datoteki "C:/Users/… /test.py", vrstica 73, v _raster = gdal.GetDriverByName ('GTiff'). Ustvari (_out, x_res , y_res, 1, gdal.GDT_Byte) Datoteka "C:  PROGRA ~ 1  QGISBR ~ 1  apps  Python27  lib  site-packages  osgeo  gdal.py", vrstica 388, v Ustvari return _gdal.Driver_Create (self , *args, ** kwargs) TypeError: v metodi 'Driver_Create', argument 3 vrste 'int'

Ne sprejema plavajočih vrednosti za x_res in y_res,
kako pa lahko vnesem ustrezno geometrijo za svoj nabor podatkov?

Dodatne informacije:

QGIS 2.6.1 Brighton na Win7 crs: WGS84 - epsg4326 vhodna oblika razdalja vodoravne točke: 0,03333378 enot vhodna oblika navpična razdalja točke: 0,01666641 enot

Pove vam, da ne marajo vaših vrednosti kot int, zaokrožijo na 0 in ne morete imeti rastrskega stolpca 0, 0 stolpcev. To je zato, ker dobavljate velikost celice in ne vrstic in stolpcev. Ko ustvarite nabor podatkov, mora vedeti, koliko vrstic in stolpcev je, nato mu povejte, kako velike so celice v geotransformaciji:

# 1. Določite pixel_size in NoData vrednost novega rastra NoData_value = -9999 x_res = 0.03333378 # ob predpostavki, da gre za velikosti celic y_res = 0.01666641 # spremenite kot ustrezno pixel_size = 1 # 2. Imena datotek za vhodne in izhodne podatke _in = r "C: /Users/… /hoppla.shp "_out = r" C:/Users/… /hoppla.tif " # 3. Odprite datoteko Shapefile source_ds = ogr.Open (_in) source_layer = source_ds.GetLayer () x_min, x_max, y_min, y_max = source_layer.GetExtent () # 4. Ustvari Target - TIFF cols = int ((x_max - x_min) / x_res) vrstice = int ((y_max - y_min) / y_res) _raster = gdal.GetDriverByName ('GTiff'). Ustvari (_out, cols, vrstice, 1, gdal.GDT_Byte) _raster.SetGeoTransform ((x_min, x_res, 0, y_max, 0, -y_res)) _band = _raster.GetRasterBand (1) _band.SetNoDataValue (NoData_value) zakaj je vrednost opekline 0 ... ni to isto kot ozadje? gdal.RasterizeLayer (_raster, [1], source_layer, burn_values ​​= [0])

Ne vem, kakšna je prostorska referenca vašega vnosa, zato ne vem, ali so velikosti vaših celic X in Y ustrezne. Da, lahko imate različne velikosti celic za X in Y. Če bi morala biti velikost vaše celice 1, spremenite vrednosti na 1 ali pa preprostocols = int (x_max - x_min)invrstice = int (y_max - y_min)saj je vse, kar je deljeno z 1, nespremenjeno ..., vendar ustvarjalni raster še vedno potrebuje vrednost int.