#26432: Bug: X/Y inverted when using numpy.reshape() on a GDALRaster's GDALBand
----------------------------+---------------------------------------
Reporter: Opa- | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 1.9
Severity: Normal | Keywords: GDALRaster numpy GDALBand
Triage Stage: Unreviewed | Has patch: 1
Easy pickings: 0 | UI/UX: 0
----------------------------+---------------------------------------
When importing GeoTIF data threw `GDALRaster` all the array is inverted
because of a inverted X/Y parameters passed to `numpy.reshape()` function.
I was able to see this bug by importing a GeoTIF via `GDALRaster` then the
generated datas did not make any sense so I decided to export the array to
an image again to see if it was me doing shit or if there was a bug
somewhere. When exporting the GeoTIF again to an image I get something
really strange. You can see attached the original tif and the generated
one that is not correct due to this X/Y mismatch. Here is the code to
reproduce:
{{{
from PIL import Image
from django.contrib.gis.gdal import GDALRaster
import os, numpy
rst = GDALRaster(os.path.join('/tmp', 'cea.tif'))
data = rst.bands[0].data()
rescaled = (255.0 / data.max() * (data - data.min())).astype(numpy.uint8)
im = Image.fromarray(rescaled)
im.save('/tmp/cea_2.tif')
}}}
You can see in the (see
[http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.reshape.html
| Numpy Reshape documentation]) that you should pass a `tuple` with the
`height` and the `width` (in that order). And in the django code, the
`size` tuple is built with `width` first then `height` at line 111:
{{{
size = (self.width - offset[0], self.height - offset[1])
}}}
The bug is located in `django.contrib.gis.gdal.raster.band.py` at line
148:
{{{
data_array, dtype=numpy.dtype(data_array)).reshape(size)
}}}
should be replaced by
{{{
data_array, dtype=numpy.dtype(data_array)).reshape((size[1], size[0]))
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/26432>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/047.71d5cc855f495ce5a0160458f611e4b1%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.