Python kullanarak ASCII ızgara dosyasını GeoTIFF dönüştürmek?


11

Bir ASCII ızgara tarama biçimi dosyası var. Örneğin:

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 ...

Python kullanarak nasıl TIFF veya başka bir raster'a dönüştürebilirim?


GIS yazılımı asci'yi geotiff'e dönüştürebilir. Kodlamaya gerek yok. QGIS kullanıyorum. Bedava.
Saul Sheard

Yanıtlar:


13

Sahte kod sürümü:

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.

Size yardımcı olacak bir örnek - buradan :

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)

ve 14.97 ve -34.54 değerleri WGS84 kooridanatlarında sol üst köşe koordinatlarıdır?
Slava


7

Dosyanız bir AAIGrid olduğundan ve GTiff CreateCopy'yi () desteklediğinden, bir oluşturma kopyası yapmak daha kolay olabilir:

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

CreateCopy'yi destekleyen herhangi bir sürücü bunu kullanabilir.


Python kullanmanız gerekmiyorsa, muz balığı kesinlikle doğru.

şaşırtıcı, teşekkürler! Giriş .asc dosyam CRS'siz geliyor. Raster yazmadan önce bu CRS'yi (GCS WGS 84) belirtmenin bir yolu var mı?
RutgerH

SetProjection ve bir dize kullanın. Dizeyi osr'den alabilirsiniz. Cevap düzenlemesine bakın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.