แปลงไฟล์ตาราง ASCII เป็น GeoTIFF โดยใช้ Python หรือไม่


11

ฉันมีไฟล์รูปแบบแรสเตอร์กริด ASCII ตัวอย่างเช่น:

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

ฉันจะแปลงเป็น TIFF หรือแรสเตอร์อื่นโดยใช้ Python ได้อย่างไร


ซอฟต์แวร์ GIS สามารถแปลง asci เป็น geotiff ไม่จำเป็นต้องมีการเข้ารหัส ฉันใช้ QGIS นั่นฟรี.
Saul Sheard

คำตอบ:


13

รุ่นรหัสเทียม:

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.

ตัวอย่างที่จะช่วยคุณ - จากที่นี่ :

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)

และค่า 14.97 และ -34.54 เป็นพิกัดมุมซ้ายบนในพิกัดของ WGS84
Slava


7

การสร้างสำเนาอาจทำได้ง่ายกว่าเนื่องจากไฟล์ของคุณเป็น AAIGrid และ GTiff รองรับ 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

ไดรเวอร์ใด ๆ ที่รองรับ CreateCopy สามารถใช้สิ่งนี้ได้


หากคุณไม่จำเป็นต้องใช้งูหลาม bananafish นั้นถูกต้องแน่นอน

น่าทึ่งขอบคุณ! ไฟล์อินพุต .asc ของฉันมาโดยไม่มี CRS มีวิธีระบุ CRS นี้ (GCS WGS 84) ก่อนที่จะเขียนแรสเตอร์หรือไม่?
RutgerH

ใช้ SetProject และสตริง คุณสามารถรับสตริงจาก osr ดูคำตอบการแก้ไข
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.