Konversi file grid ASCII ke GeoTIFF menggunakan Python?

11

Saya memiliki file format raster grid ASCII. Sebagai contoh:

ncols 480
nrows 450
xllcorner 378923
yllcorner 4072345
cellsize 30
nodata_value -32768
43 2 45 7 3 56 2 5 23 65 34 6 32 54 57 34 2 2 54 6 
35 45 65 34 2 6 78 4 2 6 89 3 2 7 45 23 5 8 4 1 62 ...

Bagaimana saya bisa mengubahnya menjadi TIFF atau raster lain menggunakan Python?

voimak
sumber
Perangkat lunak SIG dapat mengonversi asci ke geotiff. Tidak perlu coding. Saya menggunakan QGIS. Gratis.
Saul Sheard

Jawaban:

13

Versi kode semu:

import gdal
import numpy

create the gdal output file as geotiff
set the no data value
set the geotransform 

numpy.genfromtxt('your file', numpy.int8) #looks like int from you example
reshape your array to the shape you need

write out the array.

Sampel yang akan membantu Anda - dari sini :

if __name__ == '__main__':
    # Import libs
    import numpy, os
    from osgeo import osr, gdal

    # Set file vars
    output_file = "out.tif"

    # Create gtif
    driver = gdal.GetDriverByName("GTiff")
    dst_ds = driver.Create(output_file, 174, 115, 1, gdal.GDT_Byte )
    raster = numpy.zeros( (174, 115) )

    # top left x, w-e pixel resolution, rotation, top left y, rotation, n-s pixel resolution
    dst_ds.SetGeoTransform( [ 14.97, 0.11, 0, -34.54, 0, 0.11 ] )

    # set the reference info 
    srs = osr.SpatialReference()
    srs.SetWellKnownGeogCS("WGS84")
    dst_ds.SetProjection( srs.ExportToWkt() )

    # write the band
    dst_ds.GetRasterBand(1).WriteArray(raster)
Jay Laura
sumber
dan nilai 14,97 dan -34,54 adalah koordinat sudut kiri atas di WGS84 cooridanates?
Slava
9

Alternatif menggunakan gdal_translate :

gdal_translate -of "GTiff" fname.asc outname.tif
pisang
sumber
7

Mungkin lebih mudah untuk membuat salinan, karena file Anda adalah AAIGrid dan GTiff mendukung CreateCopy ():

from osgeo import gdal, osr
drv = gdal.GetDriverByName('GTiff')
ds_in = gdal.Open('in.asc')
ds_out = drv.CreateCopy('out.tif', ds_in)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
ds_out.SetProjection(srs.ExportToWkt())
ds_in = None
ds_out = None

Setiap driver yang mendukung CreateCopy dapat menggunakan ini.


sumber
Jika Anda tidak perlu menggunakan python, bananafish pasti benar.
luar biasa, terima kasih! File input .asc saya memang datang tanpa CRS. Apakah ada cara untuk menentukan CRS ini (GCS WGS 84) sebelum menulis raster?
RutgerH
gunakan SetProjection dan string. Anda bisa mendapatkan string dari osr. Lihat jawaban edit.