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?


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)

dan nilai 14,97 dan -34,54 adalah koordinat sudut kiri atas di WGS84 cooridanates?
Slava


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.


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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.