In [80]:
import osgeo.gdal
import osgeo.osr
try:
from PIL import Image
except ImportError:
import Image
In [2]:
drivers = {osgeo.gdal.GetDriver(i).ShortName:osgeo.gdal.GetDriver(i) for i in range(osgeo.gdal.GetDriverCount())}
In [3]:
memdriver = drivers['MEM']
tiffdriver = drivers['GTiff']
In [20]:
src_ds = memdriver.Create("", 1000, 1000, 1, eType=osgeo.gdal.GDT_Int32)
src_ds.RasterCount
geotransform = (255580.19380886,
4.7338744607343,
0.0,
6247234.441056012,
0.0,
-4.7338744607343)
src_ds.SetGeoTransform(geotransform)
src_srs = osgeo.osr.SpatialReference()
epsg = 22234
src_srs.ImportFromEPSG(epsg)
src_ds.SetProjection(src_srs.ExportToWkt())
Out[20]:
In [20]:
In [21]:
band = src_ds.GetRasterBand(1)
m = band.XSize
n = band.YSize
# fill with indices
arr = np.arange(n*m).reshape(m,n)
band.WriteArray(arr)
arr
plt.imshow(arr, vmin=arr.min(), vmax=arr.max())
Out[21]:
In [61]:
srs = 900913
width=2573
height=1706
grayscale_src = (src_ds.RasterCount == 1)
# Prepare output gdal datasource -----------------------------------
%timeit area_ds = tiffdriver.Create('/vsimem/output.tiff', width, height, 1, eType = osgeo.gdal.GDT_Int32)
if area_ds is None:
raise Exception('uh oh.')
merc = osgeo.osr.SpatialReference()
merc.ImportFromEPSG(epsg)
area_ds.SetProjection(merc.ExportToWkt())
gtx = [x, w/width, 0, y, 0, h/height]
gtk = list(geotransform)
gtx[0] += 3
gtx[1] += 0.1
gtx[3] += 0.3
gtx[5] -= 0.21
area_ds.SetGeoTransform(gtx)
band = area_ds.GetRasterBand(1)
band.SetNoDataValue(-9999)
band.WriteArray(np.zeros((band.YSize, band.XSize))-9999)
# Adjust resampling method -----------------------------------------
resample = osgeo.gdal.GRA_NearestNeighbour
# Create rendered area ---------------------------------------------
%timeit osgeo.gdal.ReprojectImage(src_ds, area_ds, src_ds.GetProjection(), area_ds.GetProjection(), resample, 1000000, 0.1 )
area = area_ds.GetRasterBand(1).ReadAsArray()
area = np.ma.masked_equal(area, -9999)
tiffdriver.Delete('/vsimem/output.tiff')
Out[61]:
In [62]:
%%timeit
B = np.ma.take(arr, area)
In [79]:
?np.take
In [ ]: