п п╟п╨ я┌п╬п╩я▄п╨п╬ п╢я─п╟п╧п╡п╣я─я▀ п╥п╟я─п╣пЁп╦я│я┌я─п╦я─п╬п╡п╟п╫я▀, п©я─п╦п╩п╬п╤п╣п╫п╦п╣ п╢п╬п╩п╤п╫п╬ п╡я▀п╥п╡п╟я┌я▄ я└я┐п╫п╨я├п╦я▌ GDALOpen() п╢п╩я▐ п╬я┌п╨я─я▀я┌п╦я▐ п╫п╟п╠п╬я─п╟ п╢п╟п╫п╫я▀я┘. п▓ п╨п╟я┤п╣я│я┌п╡п╣ п©п╟я─п╟п╪п╣я┌я─п╬п╡ я└я┐п╫п╨я├п╦я▐ п©я─п╦п╫п╦п╪п╟п╣я┌ п╫п╟п╥п╡п╟п╫п╦п╣ п╫п╟п╠п╬я─п╟ п╢п╟п╫п╫я▀я┘ п╦ я─п╣п╤п╦п╪ п╢п╬я│я┌я┐п©п╟ (GA_ReadOnly п╦п╩п╦ GA_Update).
п²п╟ я▐п╥я▀п╨п╣ C++:
#include "gdal_priv.h" int main() { GDALDataset *poDataset; GDALAllRegister(); poDataset = (GDALDataset *) GDALOpen( pszFilename, GA_ReadOnly ); if( poDataset == NULL ) { ...; }
п²п╟ я▐п╥я▀п╨п╣ C:
#include "gdal.h" int main() { GDALDatasetH hDataset; GDALAllRegister(); hDataset = GDALOpen( pszFilename, GA_ReadOnly ); if( hDataset == NULL ) { ...; }
п²п╟ я▐п╥я▀п╨п╣ Python:
import gdal from gdalconst import * dataset = gdal.Open( filename, GA_ReadOnly ) if dataset is None: ...
п∙я│п╩п╦ GDALOpen() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ NULL, я█я┌п╬ п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╬п©п╣я─п╟я├п╦я▐ п╫п╣ я┐п╢п╟п╩п╟я│я▄ п╦ я┤я┌п╬ я│п╬п╬п╠я┴п╣п╫п╦я▐ п╬п╠ п╬я┬п╦п╠п╨п╣ п╠я▀п╩п╦ п©п╬я│п╩п╟п╫я▀ я│ п©п╬п╪п╬я┴я▄я▌ я└я┐п╫п╨я├п╦п╦ CPLError(). п∙я│п╩п╦ п╡я▀ я┘п╬я┌п╦я┌п╣ я┐п©я─п╟п╡п╩я▐я┌я▄ п©я─п╬я├п╣я│я│п╬п╪ п╡я▀п╢п╟я┤п╦ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▌ я│п╬п╬п╠я┴п╣п╫п╦п╧ п╬п╠ п╬я┬п╦п╠п╨п╟я┘, я┌п╬ п╬п╠я─п╟я┌п╦я┌п╣я│я▄ п╨ п╢п╬п╨я┐п╪п╣п╫я┌п╟я├п╦п╦ п╫п╟ я└я┐п╫п╨я├п╦я▌ CPLError(). п▓п╬п╬п╠я┴п╣ пЁп╬п╡п╬я─я▐, CPLError() п©я─п╦п╪п╣п╫я▐п╣я┌я│я▐ п╡п╬ п╡я│п╣я┘ п╨п╬п╪п©п╬п╫п╣п╫я┌п╟я┘ GDAL п╢п╩я▐ п╡я▀п╢п╟я┤п╦ я│п╬п╬п╠я┴п╣п╫п╦п╧ п╬п╠ п╬я┬п╦п╠п╨п╟я┘. п≈п╟п╪п╣я┌п╦п╪ я┌п╟п╨п╤п╣, я┤я┌п╬ pszFilename п╫п╣ п╢п╬п╩п╤п╫п╟ п╬п╠я▐п╥п╟я┌п╣п╩я▄п╫п╬ п╠я▀я┌я▄ п╦п╪п╣п╫п╣п╪ я└п╟п╧п╩п╟ п╫п╟ я└п╦п╥п╦я┤п╣я│п╨п╬п╪ п╫п╬я│п╦я┌п╣п╩п╣ (я┘п╬я┌я▐ п╬п╠я▀я┤п╫п╬ я█я┌п╬ я┌п╟п╨). п≤п╫я┌п╣я─п©я─п╣я┌п╟я├п╦я▐ я█я┌п╬пЁп╬ п©п╟я─п╟п╪п╣я┌я─п╟ п╥п╟п╡п╦я│п╦я┌ п╬я┌ п╢я─п╟п╧п╡п╣я─п╟, я█я┌п╬ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ URL п╦п╩п╦ п╦п╪я▐ я└п╟п╧п╩п╟ я│ п╢п╬п©п╬п╩п╫п╦я┌п╣п╩я▄п╫я▀п╪п╦ п©п╟я─п╟п╪п╣я┌я─п╟п╪п╦, я┐п©я─п╟п╡п╩я▐я▌я┴п╦п╪п╦ п©я─п╬я├п╣я│я│п╬п╪ я┤я┌п╣п╫п╦я▐, п╩п╦п╠п╬ я┤п╣п╪-я┌п╬ п╦п╫я▀п╪. п÷п╬п╤п╟п╩я┐п╧я│я┌п╟, п╫п╣ п╬пЁя─п╟п╫п╦я┤п╦п╡п╟п╧я┌п╣ п╢п╦п╟п╩п╬пЁп╦ п╡я▀п╠п╬я─п╟ п╫п╟п╠п╬я─п╟ п╢п╟п╫п╫я▀я┘ п╢п╩я▐ п╬я┌п╨я─я▀я┌п╦я▐ я┌п╬п╩я▄п╨п╬ п╩п╦я┬я▄ я└п╟п╧п╩п╟п╪п╦ п╫п╟ я└п╦п╥п╦я┤п╣я│п╨п╦я┘ п╫п╬я│п╦я┌п╣п╩я▐я┘.
adfGeoTransform[0] /* п╨п╬п╬я─п╢п╦п╫п╟я┌п╟ x п╡п╣я─я┘п╫п╣пЁп╬ п╩п╣п╡п╬пЁп╬ я┐пЁп╩п╟ */ adfGeoTransform[1] /* я┬п╦я─п╦п╫п╟ п©п╦п╨я│п╣п╩п╟ */ adfGeoTransform[2] /* п©п╬п╡п╬я─п╬я┌, 0, п╣я│п╩п╦ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╣ п╬я─п╦п╣п╫я┌п╦я─п╬п╡п╟п╫п╬ п╫п╟ я│п╣п╡п╣я─ */ adfGeoTransform[3] /* п╨п╬п╬я─п╢п╦п╫п╟я┌п╟ y п╡п╣я─я┘п╫п╣пЁп╬ п╩п╣п╡п╬пЁп╬ я┐пЁп╩п╟ */ adfGeoTransform[4] /* п©п╬п╡п╬я─п╬я┌, 0, п╣я│п╩п╦ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╣ п╬я─п╦п╣п╫я┌п╦я─п╬п╡п╟п╫п╬ п╫п╟ я│п╣п╡п╣я─ */ adfGeoTransform[5] /* п╡я▀я│п╬я┌п╟ п©п╦п╨я│п╣п╩п╟ */
п∙я│п╩п╦ п╪я▀ я┘п╬я┌п╦п╪ п╡я▀п╡п╣я│я┌п╦ п╫п╣п╨п╬я┌п╬я─я┐я▌ п╬п╠я┴я┐я▌ п╦п╫я└п╬я─п╪п╟я├п╦я▌ п╬ п╫п╟п╠п╬я─п╣ п╢п╟п╫п╫я▀я┘, я┌п╬ п╪п╬п╤п╫п╬ я│п╢п╣п╩п╟я┌я▄ я│п╩п╣п╢я┐я▌я┴п╣п╣:
п²п╟ я▐п╥я▀п╨п╣ C++:
double adfGeoTransform[6]; printf( "п■я─п╟п╧п╡п╣я─: %s/%s\n", poDataset->GetDriver()->GetDescription(), poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) ); printf( "п═п╟п╥п╪п╣я─ %dx%dx%d\n", poDataset->GetRasterXSize(), poDataset->GetRasterYSize(), poDataset->GetRasterCount() ); if( poDataset->GetProjectionRef() != NULL ) printf( "п÷я─п╬п╣п╨я├п╦я▐ \"%s\"\n", poDataset->GetProjectionRef() ); if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) { printf( "п²п╟я┤п╟п╩п╬ п╨п╬п╬я─п╢п╦п╫п╟я┌ (%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3] ); printf( "п═п╟п╥п╪п╣я─ п©п╦п╨я│п╣п╩п╟ (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5] ); }
п²п╟ я▐п╥я▀п╨п╣ C:
GDALDriverH hDriver; double adfGeoTransform[6]; hDriver = GDALGetDatasetDriver( hDataset ); printf( "п■я─п╟п╧п╡п╣я─: %s/%s\n", GDALGetDriverShortName( hDriver ), GDALGetDriverLongName( hDriver ) ); printf( "п═п╟п╥п╪п╣я─ %dx%dx%d\n", GDALGetRasterXSize( hDataset ), GDALGetRasterYSize( hDataset ), GDALGetRasterCount( hDataset ) ); if( GDALGetProjectionRef( hDataset ) != NULL ) printf( "п÷я─п╬п╣п╨я├п╦я▐ \"%s\"\n", GDALGetProjectionRef( hDataset ) ); if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None ) { printf( "п²п╟я┤п╟п╩п╬ п╨п╬п╬я─п╢п╦п╫п╟я┌ (%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3] ); printf( "п═п╟п╥п╪п╣я─ п©п╦п╨я│п╣п╩п╟ (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5] ); }
п²п╟ я▐п╥я▀п╨п╣ Python:
print 'п■я─п╟п╧п╡п╣я─: ', dataset.GetDriver().ShortName,'/', \ dataset.GetDriver().LongName print 'п═п╟п╥п╪п╣я─ ',dataset.RasterXSize,'x',dataset.RasterYSize, \ 'x',dataset.RasterCount print 'п÷я─п╬п╣п╨я├п╦я▐ ',dataset.GetProjection() geotransform = dataset.GetGeoTransform() if not geotransform is None: print 'п²п╟я┤п╟п╩п╬ п╨п╬п╬я─п╢п╦п╫п╟я┌ (',geotransform[0], ',',geotransform[3],')' print 'п═п╟п╥п╪п╣я─ п©п╦п╨я│п╣п╩п╟ = (',geotransform[1], ',',geotransform[5],')'
п²п╟ я▐п╥я▀п╨п╣ C++:
GDALRasterBand *poBand; int nBlockXSize, nBlockYSize; int bGotMin, bGotMax; double adfMinMax[2]; poBand = poDataset->GetRasterBand( 1 ); poBand->GetBlockSize( &nBlockXSize, &nBlockYSize ); printf( "п═п╟п╥п╪п╣я─ п╠п╩п╬п╨п╟ %dx%d, я┌п╦п© п╢п╟п╫п╫я▀я┘ %s, ColorInterp=%s\n", nBlockXSize, nBlockYSize, GDALGetDataTypeName(poBand->GetRasterDataType()), GDALGetColorInterpretationName( poBand->GetColorInterpretation()) ); adfMinMax[0] = poBand->GetMinimum( &bGotMin ); adfMinMax[1] = poBand->GetMaximum( &bGotMax ); if( ! (bGotMin && bGotMax) ) GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax); printf( "Min=%.3fd, Max=%.3f\n", adfMinMax[0], adfMinMax[1] ); if( poBand->GetOverviewCount() > 0 ) printf( "п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ %d п╬п╠п╥п╬я─п╫я▀я┘ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╧.\n", poBand->GetOverviewCount() ); if( poBand->GetColorTable() != NULL ) printf( "п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ я┌п╟п╠п╩п╦я├я┐ я├п╡п╣я┌п╬п╡ я│ %d п╥п╟п©п╦я│я▐п╪п╦.\n", poBand->GetColorTable()->GetColorEntryCount() );
In C:
GDALRasterBandH hBand; int nBlockXSize, nBlockYSize; int bGotMin, bGotMax; double adfMinMax[2]; hBand = GDALGetRasterBand( hDataset, 1 ); GDALGetBlockSize( hBand, &nBlockXSize, &nBlockYSize ); printf( "п═п╟п╥п╪п╣я─ п╠п╩п╬п╨п╟ %dx%d, я┌п╦п© п╢п╟п╫п╫я▀я┘ %s, ColorInterp=%s\n", nBlockXSize, nBlockYSize, GDALGetDataTypeName(GDALGetRasterDataType(hBand)), GDALGetColorInterpretationName( GDALGetRasterColorInterpretation(hBand)) ); adfMinMax[0] = GDALGetRasterMinimum( hBand, &bGotMin ); adfMinMax[1] = GDALGetRasterMaximum( hBand, &bGotMax ); if( ! (bGotMin && bGotMax) ) GDALComputeRasterMinMax( hBand, TRUE, adfMinMax ); printf( "Min=%.3fd, Max=%.3f\n", adfMinMax[0], adfMinMax[1] ); if( GDALGetOverviewCount(hBand) > 0 ) printf( "п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ %d п╬п╠п╥п╬я─п╫я▀я┘ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╧.\n", GDALGetOverviewCount(hBand)); if( GDALGetRasterColorTable( hBand ) != NULL ) printf( "п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ я┌п╟п╠п╩п╦я├я┐ я├п╡п╣я┌п╬п╡ я│ %d п╥п╟п©п╦я│я▐п╪п╦.\n", GDALGetColorEntryCount( GDALGetRasterColorTable( hBand ) ) );
п²п╟ я▐п╥я▀п╨п╣ Python:
band = dataset.GetRasterBand(1) print 'п╒п╦п© п╢п╟п╫п╫я▀я┘',gdal.GetDataTypeName(band.DataType) min = band.GetMinimum() max = band.GetMaximum() if min is not None and max is not None: (min,max) = ComputeRasterMinMax(1) print 'Min=%.3f, Max=%.3f' % (min,max) if band.GetOverviewCount() > 0: print 'п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ ', band.GetOverviewCount(), \ ' п╬п╠п╥п╬я─п╫я▀я┘ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╧.' if not band.GetRasterColorTable() is None: print 'п п╟п╫п╟п╩ я│п╬п╢п╣я─п╤п╦я┌ я┌п╟п╠п╩п╦я├я┐ я├п╡п╣я┌п╬п╡ я│ ', \ band.GetRasterColorTable().GetCount(), ' п╥п╟п©п╦я│я▐п╪п╦.'
п²п╟ я▐п╥я▀п╨п╣ C++:
float *pafScanline; int nXSize = poBand->GetXSize(); pafScanline = (float *) CPLMalloc(sizeof(float)*nXSize); poBand->RasterIO( GF_Read, 0, 0, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0 );
п²п╟ я▐п╥я▀п╨п╣ C:
float *pafScanline; int nXSize = GDALGetRasterBandXSize( hBand ); pafScanline = (float *) CPLMalloc(sizeof(float)*nXSize); GDALRasterIO( hBand, GF_Read, 0, 0, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0 );
п²п╟ я▐п╥я▀п╨п╣ Python:
scanline = band.ReadRaster( 0, 0, band.XSize, 1, \ band.XSize, 1, GDT_Float32 )
п≈п╢п╣я│я▄ п╡п╬п╥п╡я─п╟я┴п╟п╣п╪п╟я▐ я│я┌я─п╬п╨п╟ п╦п╪п╣п╣я┌ я┌п╦п© string, п╦ я│п╬п╢п╣я─п╤п╦я┌ xsize*4 п╠п╟п╧я┌ п╡п╣я┴п╣я│я┌п╡п╣п╫п╫я▀я┘ п╢п╟п╫п╫я▀я┘. п╜я┌п╟ я│я┌я─п╬п╨п╟ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п©я─п╣п╬п╠я─п╟п╥п╬п╡п╟п╫п╟ п╡ п╠п╟п╥п╬п╡я▀п╣ я┌п╦п©я▀ я▐п╥я▀п╨п╟ Python я│ п©п╬п╪п╬я┴я▄я▌ п╪п╬п╢я┐п╩я▐ struct п╦п╥ я│я┌п╟п╫п╢п╟я─я┌п╫п╬п╧ п╠п╦п╠п╩п╦п╬я┌п╣п╨п╦:
import struct tuple_of_floats = struct.unpack('f' * b2.XSize, scanline)
п▓я▀п╥п╬п╡ я└я┐п╫п╨я├п╦п╦ The RasterIO п©я─п╬п╦п╥п╡п╬п╢п╦я┌я│я▐ я│п╬ я│п╩п╣п╢я┐я▌я┴п╦п╪п╦ п╟я─пЁя┐п╪п╣п╫я┌п╟п╪п╦:
CPLErr GDALRasterBand::RasterIO( GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void * pData, int nBufXSize, int nBufYSize, GDALDataType eBufType, int nPixelSpace, int nLineSpace )
п≈п╟п╪п╣я┌п╦п╪, я┤я┌п╬ п╬п╢п╦п╫ п╦ я┌п╬я┌ п╤п╣ п╡я▀п╥п╬п╡ RasterIO() п©я─п╦п╪п╣п╫я▐п╣я┌я│я▐ п╨п╟п╨ п╢п╩я▐ я┤я┌п╣п╫п╦я▐, я┌п╟п╨ п╦ п╢п╩я▐ п╥п╟п©п╦я│п╦, п╡ п╥п╟п╡п╦я│п╦п╪п╬я│я┌п╦ п╬я┌ п╥п╫п╟я┤п╣п╫п╦я▐ я└п╩п╟пЁп╟ eRWFlag (GF_Read п╦п╩п╦ GF_Write). п░я─пЁя┐п╪п╣п╫я┌я▀ nXOff, nYOff, nXSize, nYSize п╬п©п╦я│я▀п╡п╟я▌я┌ п╬п╨п╫п╬ я─п╟я│я┌я─п╟ п╢п╩я▐ я┤я┌п╣п╫п╦я▐ (п╦п╩п╦ п╥п╟п©п╦я│п╦). п╜я┌п╬ п╬п╨п╫п╬ п╫п╣п╬п╠я▐п╥п╟я┌п╣п╩я▄п╫п╬ п╢п╬п╩п╤п╫п╬ я│п╬п╡п©п╟п╢п╟я┌я▄ я│ пЁя─п╟п╫п╦я├п╟п╪п╦ я│п╪п╣п╤п╫я▀я┘ п╠п╩п╬п╨п╬п╡, п╬п╢п╫п╟п╨п╬ я│я┤п╦я┌я▀п╡п╟п╫п╦п╣ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╠п╬п╩п╣п╣ я█я└я└п╣п╨я┌п╦п╡п╫я▀п╪, п╣я│п╩п╦ пЁя─п╟п╫п╦я├я▀ я│п╬п╡п©п╟п╢п╟я▌я┌.
pData --- я█я┌п╬ я┐п╨п╟п╥п╟я┌п╣п╩я▄ п╫п╟ п╠я┐я└п╣я─ п╡ п©п╟п╪я▐я┌п╦, п╨я┐п╢п╟ п╢п╬п╩п╤п╫я▀ п╠я▀я┌я▄ п©я─п╬я┤п╦я┌п╟п╫я▀ (п╦п╩п╦ п╬я┌п╨я┐п╢п╟ п╥п╟п©п╦я│п╟п╫я▀) п╢п╟п╫п╫я▀п╣. п╓п╟п╨я┌п╦я┤п╣я│п╨п╦п╧ я┌п╦п© я█я┌п╬пЁп╬ п╠я┐я└п╣я─п╟ п╢п╬п╩п╤п╣п╫ я│п╬п╡п©п╟п╢п╟я┌я▄ я│ я┌п╦п©п╬п╪, п©п╣я─п╣п╢п╟п╡п╟п╣п╪я▀п╪ п╡ п©п╟я─п╟п╪п╣я┌я─п╣ eBufType, п╫п╟п©я─п╦п╪п╣я─, GDT_Float32 п╦п╩п╦ GDT_Byte. п╓я┐п╫п╨я├п╦я▐ RasterIO() п╡п╬п╥я▄п╪я▒я┌ п╫п╟ я│п╣п╠я▐ п©я─п╣п╬п╠я─п╟п╥п╬п╡п╟п╫п╦п╣ п╪п╣п╤п╢я┐ я┌п╦п©п╬п╪ п╢п╟п╫п╫я▀я┘ п╠я┐я└п╣я─п╟ п╦ я┌п╦п©п╬п╪ п╢п╟п╫п╫я▀я┘ п╨п╟п╫п╟п╩п╟. п·п╠я─п╟я┌п╦я┌п╣ п╡п╫п╦п╪п╟п╫п╦п╣, я┤я┌п╬ п©я─п╦ п©я─п╣п╬п╠я─п╟п╥п╬п╡п╟п╫п╦п╦ п╡п╣я┴п╣я│я┌п╡п╣п╫п╫я▀я┘ п╢п╟п╫п╫я▀я┘ п╡ я├п╣п╩я▀п╣ RasterIO() п╬п╨я─я┐пЁп╩я▐п╣я┌ п╡ п╪п╣п╫я▄я┬я┐я▌ я│я┌п╬я─п╬п╫я┐, п╟ п╣я│п╩п╦ п╥п╫п╟я┤п╣п╫п╦п╣ п╡я▀я┘п╬п╢п╦я┌ п╥п╟ я─п╟п╪п╨п╦ п╢п╬п©я┐я│я┌п╦п╪п╬пЁп╬ п╢п╦п╟п©п╟п╥п╬п╫п╟, п╬п╫п╬ п©я─п╣п╬п╠я─п╟п╥я┐п╣я┌я│я▐ п╡ п╠п╩п╦п╤п╟п╧я┬п╣п╣ п╢п╬п©я┐я│я┌п╦п╪п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣. п╜я┌п╬, п╫п╟п©я─п╦п╪п╣я─, п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п©я─п╦ я┤я┌п╣п╫п╦п╦ 16-п╠п╦я┌п╫я▀я┘ п╢п╟п╫п╫я▀я┘ п╡ п╠я┐я└п╣я─ я┌п╦п©п╟ GDT_Byte п╡я│п╣ п╥п╫п╟я┤п╣п╫п╦я▐, п©я─п╣п╡я▀я┬п╟я▌я┴п╦п╣ 255 п╠я┐п╢я┐я┌ п╬я┌п╬п╠я─п╟п╤п╣п╫я▀ п╡ п╥п╫п╟я┤п╣п╫п╦п╣ 255, п╪п╟я│я┬я┌п╟п╠п╦я─п╬п╡п╟п╫п╦я▐ п╢п╟п╫п╫я▀я┘ п╫п╣ п©я─п╬п╦п╥п╬п╧п╢я▒я┌!
п÷п╟я─п╟п╪п╣я┌я─я▀ nBufXSize п╦ nBufYSize п╥п╟п╢п╟я▌я┌ я─п╟п╥п╪п╣я─ п╠я┐я└п╣я─п╟. п÷я─п╦ п╥п╟пЁя─я┐п╥п╨п╣ п╢п╟п╫п╫я▀я┘ п╡ п©п╬п╩п╫п╬п╪ я─п╟п╥я─п╣я┬п╣п╫п╦п╦ п╬п╫ п╠я┐п╢п╣я┌ я│п╬п╡п©п╟п╢п╟я┌я▄ я│ я─п╟п╥п╪п╣я─п╬п╪ п╬п╨п╫п╟. п·п╢п╫п╟п╨п╬ п╢п╩я▐ п╥п╟пЁя─я┐п╥п╨п╦ я┐п╪п╣п╫я▄я┬п╣п╫п╫п╬пЁп╬ п╬п╠п╥п╬я─п╫п╬пЁп╬ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦я▐ я─п╟п╥п╪п╣я─ п╠я┐я└п╣я─п╟ п╪п╬п╤п╫п╬ я┐я│я┌п╟п╫п╬п╡п╦я┌я▄ п╪п╣п╫я▄я┬п╦п╪, я┤п╣п╪ я─п╟п╥п╪п╣я─ п╬п╨п╫п╟. п▓ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣ RasterIO() п╠я┐п╢п╣я┌ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ п©п╬п╢я┘п╬п╢я▐я┴п╦п╣ п╬п╠п╥п╬я─п╫я▀п╣ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦я▐ (п©п╦я─п╟п╪п╦п╢я┐) п╢п╩я▐ п╠п╬п╩п╣п╣ я█я└я└п╣п╨я┌п╦п╡п╫п╬пЁп╬ п╡п╡п╬п╢п╟/п╡я▀п╡п╬п╢п╟.
п÷п╟я─п╟п╪п╣я┌я─я▀ nPixelSpace п╦ nLineSpace п╬п╠я▀я┤п╫п╬ я─п╟п╡п╫я▀ п╫я┐п╩я▌, я┤я┌п╬ п©я─п╦п╡п╬п╢п╦я┌ п╨ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦я▌ п╥п╫п╟я┤п╣п╫п╦п╧ п©п╬ я┐п╪п╬п╩я┤п╟п╫п╦я▌. п·п╢п╫п╟п╨п╬ п╬п╫п╦ п╪п╬пЁя┐я┌ п╠я▀я┌я▄ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫я▀ п╢п╩я▐ я┐п©я─п╟п╡п╩п╣п╫п╦я▐ п╢п╬я│я┌я┐п©п╬п╪ п╨ п╠я┐я└п╣я─я┐ п╢п╟п╫п╫я▀я┘, п╢п╟п╡п╟я▐ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌я▄ я┤п╦я┌п╟я┌я▄ п╡ п╠я┐я└п╣я─, п╨п╬я┌п╬я─я▀п╧ я┐п╤п╣ я│п╬п╢п╣я─п╤п╦я┌ п╢я─я┐пЁп╦п╣ п╢п╟п╫п╫я▀п╣, я┤п╣я─п╣п╢я┐я▐ п©п╦п╨я│п╣п╩п╦ п╦п╩п╦ я│я┌я─п╬п╨п╦.
п║п©п╬я│п╬п╠ CreateCopy п©я─п╣п╢п©п╬п╩п╟пЁп╟п╣я┌ п╡я▀п╥п╬п╡ я└я┐п╫п╨я├п╦п╦ CreateCopy() я│ я┐п╨п╟п╥п╟п╫п╦п╣п╪ я┌я─п╣п╠я┐п╣п╪п╬пЁп╬ п╢я─п╟п╧п╡п╣я─п╟ п╡я▀я┘п╬п╢п╫п╬пЁп╬ я└п╬я─п╪п╟я┌п╟ п╦ п©п╣я─п╣п╢п╟я┤п╣п╧ п╦я│я┘п╬п╢п╫п╬пЁп╬ п╫п╟п╠п╬я─п╟ п╢п╟п╫п╫я▀я┘, п╨п╬п©п╦я▐ п╨п╬я┌п╬я─п╬пЁп╬ п╢п╬п╩п╤п╫п╟ п╠я▀я┌я▄ я│п╬п╥п╢п╟п╫п╟. п║п©п╬я│п╬п╠ Create п©я─п╣п╢п©п╬п╩п╟пЁп╟п╣я┌ п╡я▀п╥п╬п╡ п╪п╣я┌п╬п╢п╟ Create() я│ я┐п╨п╟п╥п╟п╫п╦п╣п╪ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬пЁп╬ п╢я─п╟п╧п╡п╣я─п╟, п╟ п╥п╟я┌п╣п╪ п╫п╣п©п╬я│я─п╣п╢я│я┌п╡п╣п╫п╫п╬п╧ п╥п╟п©п╦я│я▄я▌ п╡я│п╣я┘ п╪п╣я┌п╟п╢п╟п╫п╫я▀я┘ п╦ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦я▐ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴п╦п╪п╦ п╬я┌п╢п╣п╩я▄п╫я▀п╪п╦ п╡я▀п╥п╬п╡п╟п╪п╦. п▓я│п╣ п╢я─п╟п╧п╡п╣я─я▀, п╨п╬я┌п╬я─я▀п╣ п╪п╬пЁя┐я┌ я│п╬п╥п╢п╟п╡п╟я┌я▄ п╫п╬п╡я▀п╣ я└п╟п╧п╩я▀, п©п╬п╢п╢п╣я─п╤п╦п╡п╟я▌я┌ п╪п╣я┌п╬п╢ CreateCopy(), п╬п╢п╫п╟п╨п╬ п╫п╣ п╡я│п╣ п©п╬п╢п╢п╣я─п╤п╦п╡п╟я▌я┌ п╪п╣я┌п╬п╢ Create().
п■п╩я▐ я┌п╬пЁп╬, я┤я┌п╬п╠я▀ п╬п©я─п╣п╢п╣п╩п╦я┌я▄, п╨п╟п╨п╬п╧ п╪п╣я┌п╬п╢ п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╨п╬п╫п╨я─п╣я┌п╫я▀п╧ п╢я─п╟п╧п╡п╣я─, п╪п╬п╤п╫п╬ п©я─п╬п╡п╣я─п╦я┌я▄ п╪п╣я┌п╟п╢п╟п╫п╫я▀п╣ DCAP_CREATE п╦ DCAP_CREATECOPY я┐ п╬п╠я┼п╣п╨я┌п╟ п╢я─п╟п╧п╡п╣я─п╟. пёп╠п╣п╢п╦я┌п╣я│я▄, я┤я┌п╬ я└я┐п╫п╨я├п╦я▐ GDALAllRegister() п╠я▀п╩п╟ п╡я▀п╥п╡п╟п╫п╟ п©я─п╣п╤п╢п╣, я┤п╣п╪ п╡я▀п╥я▀п╡п╟я┌я▄ я└я┐п╫п╨я├п╦я▌ GetDriverByName(). п▓ я│п╩п╣п╢я┐я▌я┴п╣п╪ п©я─п╦п╪п╣я─п╣ п╪я▀ п╥п╟п©я─п╬я│п╦п╪ п╢я─п╟п╧п╡п╣я─ п╦ п©я─п╬п╡п╣я─п╦п╪, п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╩п╦ п╬п╫ п╪п╣я┌п╬п╢я▀ Create() п╦/п╦п╩п╦ CreateCopy().
п²п╟ я▐п╥я▀п╨п╣ C++:
#include "cpl_string.h" ... const char *pszFormat = "GTiff"; GDALDriver *poDriver; char **papszMetadata; poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); if( poDriver == NULL ) exit( 1 ); papszMetadata = poDriver->GetMetadata(); if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ) ) printf( "п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ Create().\n", pszFormat ); if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATECOPY, FALSE ) ) printf( "п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ CreateCopy().\n", pszFormat );
п²п╟ я▐п╥я▀п╨п╣ C:
#include "cpl_string.h" ... const char *pszFormat = "GTiff"; GDALDriverH hDriver = GDALGetDriverByName( pszFormat ); char **papszMetadata; if( hDriver == NULL ) exit( 1 ); papszMetadata = GDALGetMetadata( hDriver, NULL ); if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ) ) printf( "п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ Create().\n", pszFormat ); if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATECOPY, FALSE ) ) printf( "п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ CreateCopy().\n", pszFormat );
п²п╟ я▐п╥я▀п╨п╣ Python:
format = "GTiff" driver = gdal.GetDriverByName( format ) metadata = driver.GetMetadata() if metadata.has_key(gdal.DCAP_CREATE) \ and metadata[gdal.DCAP_CREATE] == 'YES': print 'п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ Create().' % format if metadata.has_key(gdal.DCAP_CREATECOPY) \ and metadata[gdal.DCAP_CREATECOPY] == 'YES': print 'п■я─п╟п╧п╡п╣я─ %s п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╣я┌п╬п╢ CreateCopy().' % format
п≈п╟п╪п╣я┌п╦п╪, я┤я┌п╬ п╫п╣п╨п╬я┌п╬я─я▀п╣ п╢я─п╟п╧п╡п╣я─я▀ п╪п╬пЁя┐я┌ я┌п╬п╩я▄п╨п╬ я┤п╦я┌п╟я┌я▄ п╢п╟п╫п╫я▀п╣ п╦ п╫п╣ п©п╬п╢п╢п╣я─п╤п╦п╡п╟я▌я┌ п╫п╦ п╪п╣я┌п╬п╢ Create(), п╫п╦ CreateCopy().
п²п╟ я▐п╥я▀п╨п╣ C++:
GDALDataset *poSrcDS = (GDALDataset *) GDALOpen( pszSrcFilename, GA_ReadOnly ); GDALDataset *poDstDS; poDstDS = poDriver->CreateCopy( pszDstFilename, poSrcDS, FALSE, NULL, NULL, NULL ); if( poDstDS != NULL ) delete poDstDS;
п²п╟ я▐п╥я▀п╨п╣ C:
GDALDatasetH hSrcDS = GDALOpen( pszSrcFilename, GA_ReadOnly );
GDALDatasetH hDstDS;
hDstDS = GDALCreateCopy( hDriver, pszDstFilename, hSrcDS, FALSE,
NULL, NULL, NULL );
if( hDstDS != NULL )
GDALClose( hDstDS );
п²п╟ я▐п╥я▀п╨п╣ Python:
src_ds = gdal.Open( src_filename ) dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 )
п≈п╟п╪п╣я┌п╦п╪, я┤я┌п╬ п╪п╣я┌п╬п╢ CreateCopy() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╟п╠п╬я─ п╢п╟п╫п╫я▀я┘, п©я─п╦пЁп╬п╢п╫я▀п╧ п╢п╩я▐ п╥п╟п©п╦я│п╦ п╦ п╬п╫ п╢п╬п╩п╤п╣п╫ п╠я▀я┌я▄ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴п╦п╪ п╬п╠я─п╟п╥п╬п╪ п╥п╟п╨я─я▀я┌ п╢п╩я▐ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п╥п╟п©п╦я│п╦ п╦ я│п╠я─п╬я│п╟ п╢п╟п╫п╫я▀я┘ п╫п╟ п╢п╦я│п╨. п▓ я│п╩я┐я┤п╟п╣ я▐п╥я▀п╨п╟ Python я█я┌п╬ п©я─п╬п╦п╥п╬п╧п╢я▒я┌ п╟п╡я┌п╬п╪п╟я┌п╦я┤п╣я│п╨п╦, п╨п╬пЁп╢п╟ "dst_ds" п╡я▀п╧п╢п╣я┌ п╦п╥ п╬п╠п╩п╟я│я┌п╦ п╡п╦п╢п╦п╪п╬я│я┌п╦. п≈п╫п╟я┤п╣п╫п╦п╣ FALSE (п╦п╩п╦ 0), п╦я│п©п╬п╩я▄п╥я┐п╣п╪п╬п╣ п╢п╩я▐ п©п╟я─п╟п╪п╣я┌я─п╟ bStrict, я│п╩п╣п╢я┐я▌я┴п╣пЁп╬ я│я─п╟п╥я┐ п╥п╟ п╦п╪п╣п╫п╣п╪ п╡я▀я┘п╬п╢п╫п╬пЁп╬ п╫п╟п╠п╬я─п╟ п╢п╟п╫п╫я▀я┘ п╡ п╡я▀п╥п╬п╡п╣ CreateCopy(), п©п╬п╨п╟п╥я▀п╡п╟п╣я┌, я┤я┌п╬ CreateCopy() п╢п╬п╩п╤п╣п╫ п╥п╟п╡п╣я─я┬п╦я┌я▄я│я▐ п╠п╣п╥ я└п╟я┌п╟п╩я▄п╫п╬п╧ п╬я┬п╦п╠п╨п╦ п╢п╟п╤п╣ п╡ я│п╩я┐я┤п╟п╣, п╣я│п╩п╦ я│п╬п╥п╢п╟п╡п╟п╣п╪я▀п╧ п╫п╟п╠п╬я─ п╢п╟п╫п╫я▀я┘ п╫п╣ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╦п╢п╣п╫я┌п╦я┤п╣п╫ п╡я┘п╬п╢п╫п╬п╪я┐ п╫п╟п╠п╬я─я┐. п╒п╟п╨п╬п╣ п╪п╬п╤п╣я┌ п©я─п╬п╦п╥п╬п╧я┌п╦, п╫п╟п©я─п╦п╪п╣я─, п©п╬я│п╨п╬п╩я▄п╨я┐ п╡я▀я┘п╬п╢п╫п╬п╧ я└п╬я─п╪п╟я┌ п╫п╣ п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ я┌п╦п© п╢п╟п╫п╫я▀я┘ п╡я┘п╬п╢п╫п╬пЁп╬ я└п╬я─п╪п╟я┌п╟, п╦п╩п╦ п©п╬я┌п╬п╪я┐, я┤я┌п╬ п╡я▀я┘п╬п╢п╫п╬п╧ я└п╬я─п╪п╟я┌ п╫п╣ п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ пЁп╣п╬пЁя─п╟я└п╦я┤п╣я│п╨я┐я▌ п©я─п╦п╡я▐п╥п╨я┐.
п▒п╬п╩п╣п╣ я│п╩п╬п╤п╫я▀п╧ я│п╩я┐я┤п╟п╧ п╪п╬п╤п╣я┌ п╡п╨п╩я▌я┤п╟я┌я▄ я┐п╨п╟п╥п╟п╫п╦п╣ п©п╟я─п╟п╪п╣я┌я─п╬п╡ п╢п╩я▐ я│п╬п╥п╢п╟п╫п╦я▐ п╡я▀я┘п╬п╢п╫п╬пЁп╬ я└п╟п╧п╩п╟ п╦ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ п╦п╫п╢п╦п╨п╟я┌п╬я─п╟ я┘п╬п╢п╟ я─п╟п╠п╬я┌я▀:
п²п╟ я▐п╥я▀п╨п╣ C++:
#include "cpl_string.h" ... char **papszOptions = NULL; papszOptions = CSLSetNameValue( papszOptions, "TILED", "YES" ); papszOptions = CSLSetNameValue( papszOptions, "COMPRESS", "PACKBITS" ); poDstDS = poDriver->CreateCopy( pszDstFilename, poSrcDS, FALSE, papszOptions, GDALTermProgress, NULL ); if( poDstDS != NULL ) delete poDstDS; CSLDestroy( papszOptions );
п²п╟ я▐п╥я▀п╨п╣ C:
#include "cpl_string.h" ... char **papszOptions = NULL; papszOptions = CSLSetNameValue( papszOptions, "TILED", "YES" ); papszOptions = CSLSetNameValue( papszOptions, "COMPRESS", "PACKBITS" ); hDstDS = GDALCreateCopy( hDriver, pszDstFilename, hSrcDS, FALSE, papszOptions, GDALTermProgres, NULL ); if( hDstDS != NULL ) GDALClose( hDstDS ); CSLDestroy( papszOptions );
п²п╟ я▐п╥я▀п╨п╣ Python:
src_ds = gdal.Open( src_filename ) dst_ds = driver.CreateCopy( dst_filename, src_ds, 0, [ 'TILED=YES', 'COMPRESS=PACKBITS' ] )
п²п╟ я▐п╥я▀п╨п╣ C++:
GDALDataset *poDstDS;
char **papszOptions = NULL;
poDstDS = poDriver->Create( pszDstFilename, 512, 512, 1, GDT_Byte,
papszOptions );
п²п╟ я▐п╥я▀п╨п╣ C:
GDALDatasetH hDstDS;
char **papszOptions = NULL;
hDstDS = GDALCreate( hDriver, pszDstFilename, 512, 512, 1, GDT_Byte,
papszOptions );
п²п╟ я▐п╥я▀п╨п╣ Python:
dst_ds = driver.Create( dst_filename, 512, 512, 1, gdal.GDT_Byte )
п п╟п╨ я┌п╬п╩я▄п╨п╬ п╫п╟п╠п╬я─ п╢п╟п╫п╫я▀я┘ п╠я┐п╢п╣я┌ я┐я│п©п╣я┬п╫п╬ я│п╬п╥п╢п╟п╫, п╡я│п╣ п╫п╣п╬п╠я┘п╬п╢п╦п╪я▀п╣ п╪п╣я┌п╟п╢п╟п╫п╫я▀п╣ п╦ я│п╬п╠я│я┌п╡п╣п╫п╫п╬ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦п╣ п╢п╬п╩п╤п╫я▀ п╠я▀я┌я▄ п╥п╟п©п╦я│п╟п╫я▀ п╡ я└п╟п╧п╩. п п╬п╫п╨я─п╣я┌п╫п╟я▐ я─п╣п╟п╩п╦п╥п╟я├п╦я▐ п╬я┤п╣п╫я▄ я│п╦п╩я▄п╫п╬ п╥п╟п╡п╦я│п╦я┌ п╬я┌ п╥п╟п╢п╟я┤п╦, п╫п╬ п╡ п©я─п╬я│я┌п╣п╧я┬п╣п╪ я│п╩я┐я┤п╟п╣, п╡п╨п╩я▌я┤п╟я▌я┴п╣п╪ п╥п╟п©п╦я│я▄ п©я─п╬п╣п╨я├п╦п╦, пЁп╣п╬пЁя─п╟я└п╦я┤п╣я│п╨п╬п╧ п©я─п╦п╡я▐п╥п╨п╦ п╦ я─п╟я│я┌я─п╬п╡п╬пЁп╬ п╦п╥п╬п╠я─п╟п╤п╣п╫п╦я▐, п╪п╬п╤п╣я┌ п╡я▀пЁп╩я▐п╢п╣я┌я▄ я┌п╟п╨:
п²п╟ я▐п╥я▀п╨п╣ C++:
double adfGeoTransform[6] = { 444720, 30, 0, 3751320, 0, -30 }; OGRSpatialReference oSRS; char *pszSRS_WKT = NULL; GDALRasterBand *poBand; GByte abyRaster[512*512]; poDstDS->SetGeoTransform( adfGeoTransform ); oSRS.SetUTM( 11, TRUE ); oSRS.SetWellKnownGeogCS( "NAD27" ); oSRS.exportToWkt( &pszSRS_WKT ); poDstDS->SetProjection( pszSRS_WKT ); CPLFree( pszSRS_WKT ); poBand = poDstDS->GetRasterBand(1); poBand->RasterIO( GF_Write, 0, 0, 512, 512, abyRaster, 512, 512, GDT_Byte, 0, 0 ); delete poDstDS;
п²п╟ я▐п╥я▀п╨п╣ C:
double adfGeoTransform[6] = { 444720, 30, 0, 3751320, 0, -30 }; OGRSpatialReferenceH hSRS; char *pszSRS_WKT = NULL; GDALRasterBandH hBand; GByte abyRaster[512*512]; GDALSetGeoTransform( hDstDS, adfGeoTransform ); hSRS = OSRNewSpatialReference( NULL ); OSRSetUTM( hSRS, 11, TRUE ); OSRSetWellKnownGeogCS( hSRS, "NAD27" ); OSRExportToWkt( hSRS, &pszSRS_WKT ); OSRDestroySpatialReference( hSRS ); GDALSetProjection( hDstDS, pszSRS_WKT ); CPLFree( pszSRS_WKT ); hBand = GDALGetRasterBand( hDstDS, 1 ); GDALRasterIO( hBand, GF_Write, 0, 0, 512, 512, abyRaster, 512, 512, GDT_Byte, 0, 0 ); GDALClose( hDstDS );
п²п╟ я▐п╥я▀п╨п╣ Python:
import Numeric, osr 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 = Numeric.zeros( (512, 512) ) dst_ds.GetRasterBand(1).WriteArray( raster )
$Id: gdal_tutorial_ru.dox 14542 2008-05-27 18:11:25Z dron $