Tạo một hình ảnh đa phương từ đầu


10

Tôi muốn tạo một hình ảnh đa sắc từ cero để làm một số thử nghiệm về nó. Một cái gì đó thực sự đơn giản như 5 dải hoàn toàn đồng nhất với tiếng ồn muối và hạt tiêu trên chúng hoặc một hình vuông có giá trị khác nhau ở trung tâm. Rõ ràng đây sẽ chỉ là một chồng ma trận, một mảng đa chiều, khá dễ dàng để tạo ra. Tôi muốn đạt được điều này bằng cách sử dụng python và gdal nhưng gdal đang khá kín đáo, tôi không hiểu gì về nó cả. Tôi lý tưởng muốn tạo một tệp địa lý. Bất cứ ai có thể giúp tôi về điều này? một số gợi ý hoặc một số hướng dẫn gdal rất nhẹ nhàng? Cảm ơn tất cả.

Câu trả lời:


15

Bạn muốn phương thức gdal.band.WriteArray. Có một ví dụ trong hướng dẫn API GDAL (được sao chép bên dưới):

format = "GTiff"
driver = gdal.GetDriverByName( format )
dst_ds = driver.Create( dst_filename, 512, 512, 1, gdal.GDT_Byte )
dst_ds.SetGeoTransform( [ 444720, 30, 0, 3751320, 0, -30 ] )

srs = osr.SpatialReference()
srs.SetUTM( 11, 1 )
srs.SetWellKnownGeogCS( 'NAD27' )
dst_ds.SetProjection( srs.ExportToWkt() )

raster = numpy.zeros( (512, 512), dtype=numpy.uint8 )    
dst_ds.GetRasterBand(1).WriteArray( raster )

# Once we're done, close properly the dataset
dst_ds = None

Để tạo dữ liệu ngẫu nhiên, hãy xem mô-đun numpy.random .

Đây là một ví dụ hoạt động đầy đủ hơn:

from osgeo import gdal, osr
import numpy

dst_filename = '/tmp/test.tif'
#output to special GDAL "in memory" (/vsimem) path just for testing
#dst_filename = '/vsimem/test.tif'

#Raster size
nrows=1024
ncols=512
nbands=7

#min & max random values of the output raster
zmin=0
zmax=12345

## See http://gdal.org/python/osgeo.gdal_array-module.html#codes
## for mapping between gdal and numpy data types
gdal_datatype = gdal.GDT_UInt16
np_datatype = numpy.uint16

driver = gdal.GetDriverByName( "GTiff" )
dst_ds = driver.Create( dst_filename, ncols, nrows, nbands, gdal_datatype )

## These are only required if you wish to georeference (http://en.wikipedia.org/wiki/Georeference)
## your output geotiff, you need to know what values to input, don't just use the ones below
#Coordinates of the upper left corner of the image
#in same units as spatial reference
#xmin=147.2  
#ymax=-34.54

#Cellsize in same units as spatial reference
#cellsize=0.01

#dst_ds.SetGeoTransform( [ xmin, cellsize, 0, ymax, 0, -cellsize ] )
#srs = osr.SpatialReference()
#srs.SetWellKnownGeogCS("WGS84")
#dst_ds.SetProjection( srs.ExportToWkt() )

raster = numpy.random.randint(zmin,zmax, (nbands, nrows, ncols)).astype(np_datatype )  
for band in range(nbands):
    dst_ds.GetRasterBand(band+1).WriteArray( raster[band, :, :] )

# Once we're done, close properly the dataset
dst_ds = None

Cảm ơn rất nhiều, nơi có thể đọc những gì những điều này làm? SetUTM (ok tôi biết điều đó làm gì) SetWellKnown GeogCS, se chiếu, đặt biến đổi địa lý, v.v ... nhưng trông giống hệt những gì tôi cần. Cảm ơn rất nhiều!
JEquihua

Để biết thêm thông tin về các phần hội nghị địa lý của mã, hãy xem Hướng dẫn dự đoán - gdal.org/ogr/osr_tutorial.html
user2856

2

Tôi biết đó không phải là những gì bạn yêu cầu, nhưng nếu tất cả những gì bạn muốn là dữ liệu mẫu đa bán cầu hoặc siêu âm - dữ liệu thử nghiệm này cho dự án Opticks có thể hoạt động. Thay phiên, bạn có thể nhận dữ liệu LandSAT trực tiếp từ Earth Explorer .

Trang web này có mã ví dụ để chuyển đổi một mảng numpy 2D thành một GeoTIFF một băng tần và một GeoTIFF đa băng tần thành một mảng numpy 3D.

BIÊN TẬP:

Nghiên cứu sâu hơn tìm thấy một trang mã ví dụ với 'ví dụ bị thiếu', mảng numpy 3D -> GeoTIFF đa băng tần.


Không, tôi thực sự cần phải làm cho hình ảnh của riêng tôi. Trang này rất thú vị, cảm ơn bạn, điều tôi thực sự cần là một ví dụ còn thiếu, làm thế nào để lưu một mảng 3d gọn gàng như một GeoTIFF đa băng tần. Nhưng cảm ơn rất nhiều!
JEquihua

Đã chỉnh sửa với nhiều thông tin hơn
MappingTomorrow 11/07 '
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.