Chuyển đổi tệp lưới ASCII sang GeoTIFF bằng Python?


11

Tôi có một tệp định dạng raster lưới ASCII. Ví dụ:

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

Làm cách nào tôi có thể chuyển đổi nó thành TIFF hoặc bất kỳ raster nào khác bằng Python?


Phần mềm GIS có thể chuyển đổi asci sang geotiff. Không cần mã hóa. Tôi sử dụng QGIS. Nó miễn phí.
Saul Sheard

Câu trả lời:


13

Phiên bản mã giả:

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.

Một mẫu sẽ giúp bạn thực hiện - từ đây :

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)

và các giá trị 14,97 và -34,54 là tọa độ góc trên cùng bên trái trong WGS84 cooridanates?
Slava


7

Có thể dễ dàng hơn để tạo một bản sao tạo, vì tệp của bạn là một AAIGrid và GTiff hỗ trợ CreatCopy ():

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

Bất kỳ trình điều khiển nào hỗ trợ CreatCopy đều có thể sử dụng điều này.


Nếu bạn không cần sử dụng python, bananafish hoàn toàn đúng.

tuyệt vời, cảm ơn! Tệp .asc đầu vào của tôi không có CRS. Có cách nào để xác định CRS này (GCS WGS 84) trước khi viết raster không?
RutgerH

sử dụng SetProjection và một chuỗi. Bạn có thể lấy chuỗi từ osr. Xem câu trả lời chỉnh sửa.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.