[gdal-dev] Re: Creating a blank raster from scratch

Dane Springmeyer blake at hailmail.net
Tue Feb 3 17:19:46 EST 2009


Jorge,

I think I was the original poster of the trac snippet, which worked  
for me on mac os.

Great job researching, and yes, please update the snippet as needed.

Thanks!

Dane


On Feb 3, 2009, at 3:53 AM, Jorge wrote:

> And finally, hello
>
> Sorry for being annoying. I've found this ticket closed 2 years ago http://trac.osgeo.org/gdal/ticket/1166 
> .
>
> I'll apply the patch, but I think that this should be added with the  
> FAQ. Saves time :-)
>
> Best regards
> Jorge
>
> Jorge escribió:
>>
>> Hello again,
>>
>> I' ve found the problem, I think. Is the version of numpy used by
>> gdalnumeric. The code from FAQ works with numpy version 1.0.1, but  
>> fails
>> with numpy version 1.2.1. The fail is because the narray attribute
>> "typecode()" doesn't exist. From the numpy book, available at
>> http://numpy.scipy.org/numpybook.pdf, you can get (page 55):
>>
>> "If you are converting code from Numeric, then you
>> will need to make the following (search and replace)
>> conversions: .typecode() --> .dtype.char;
>> .iscontiguous() --> .flags.contiguous;
>> .byteswapped() --> .byteswap(); .toscalar()
>> --> .item(); and .itemsize() --> .itemsize. The
>> numpy.oldnumeric.alter code1 module can automate this for you."
>>
>> Ok. I've opened gdalnumeric.py, and the last change was from  
>> 2006/03/21.
>> The older version from numpy available at sourceforge download's  
>> page is
>> from 2007-11-08. Then, gdal is using a really old version of numpy.
>> Maybe I can use the numpy 1.0.1 from my mac, but I think that it  
>> would
>> be easier to replace the snippet's code lines that uses numpy from  
>> the
>> correct ones. What's the best way to do this
>>
>>         # Create blank raster with fully opaque alpha band
>>         zeros = numpy.zeros( (tiff_height, tiff_width), numpy.uint8 )
>>         dst_ds.GetRasterBand(1).WriteArray( zeros )
>>         dst_ds.GetRasterBand(2).WriteArray( zeros )
>>         dst_ds.GetRasterBand(3).WriteArray( zeros )
>>         opaque = numpy.zeros((tiff_height,tiff_width),  
>> numpy.uint8 )*255
>>         dst_ds.GetRasterBand(4).WriteArray( opaque )
>>
>> by using gdal? Because, if I'm right, this snippet from the FAQ is
>> deprecated.
>>
>> Regards
>> Jorge
>>
>> Jorge escribió:
>>
>>> Hello everybody
>>>
>>> I'm creating a blank raster from scratch, to rasterize it later. Ok,
>>> I've read the FAQ:
>>>
>>> http://trac.osgeo.org/gdal/wiki/FAQRaster#HowcanIcreateablankrasterbasedonavectorfilesextentsforusewithgdal_rasterize
>>>
>>> I've executed this code with no problems in a Mac, with Leopard.  
>>> I've
>>> used the frameworks at http://www.kyngchaos.com/ 
>>> software:frameworks. The
>>> version of GDAL is 1.6.0, and the numpy version is 1.0.1 Now, I  
>>> try to
>>> execute the code in another machine, a PC with Suse Linux  
>>> Enterpise 11.0
>>> for 64bits processors. I've installed gdal and numpy from  
>>> repositories.
>>> The version of GDAL is 1.6.0, and numpy version is 1.2.1  So, the  
>>> gdal
>>> versions are the same. But if I open, for example, the file ogr.py  
>>> in
>>> both systems, are different files. Maybe the Framework I'm using  
>>> is a
>>> port of GDAL 1.6.0 to Mac with any changes?
>>>
>>> And another issue: the code fails in the PC with Suse. The first  
>>> error is:
>>>
>>> src_lyr = src_ds.GetLayerByIndex( index = 0 )
>>> AttributeError: DataSource instance has no attribute  
>>> 'GetLayerByIndex'
>>>
>>> I could solve the problem by changing the call to "GetLayerByIndex(
>>> index = 0 )" for "GetLayer( 0 )". Why is this happening, if the  
>>> version
>>> of GDAL is 1.6.0 on both systems? Again, I think that maybe the
>>> Framework I'm using is a port of GDAL 1.6.0 to Mac with any changes.
>>>
>>> Then, made this change, I get another error, that I couldn't solve  
>>> yet
>>> (create_raster.py is the name of my file):
>>>
>>>  File "./create_raster.py", line 112, in ?
>>>     dst_ds.GetRasterBand(1).WriteArray( zeros )
>>>   File "/usr/lib64/python2.4/site-packages/gdal.py", line 876, in  
>>> WriteArray
>>>     return gdalnumeric.BandWriteArray( self, array, xoff, yoff )
>>>   File "/usr/lib64/python2.4/site-packages/gdalnumeric.py", line  
>>> 193, in
>>> BandWriteArray
>>>     datatype = NumericTypeCodeToGDALTypeCode( array.typecode() )
>>> AttributeError: 'numpy.ndarray' object has no attribute 'typecode'
>>>
>>> So, basically, the method "BandWriteArray" of gdalnumeric.py is
>>> expecting an object array, with a method named "typecode()", but the
>>> array created with numpy.zeros, don't have this attribute. Am I  
>>> right?
>>> Then, the fact is that in version 1.0.1 of numpy, the array  
>>> created with
>>> numpy.zeros has a method named "typecode()", but in version 1.2.1,  
>>> this
>>> attribute doesn't exist. Do I have to "downgrade" the numpy  
>>> version from
>>> 1.2.1 to 1.0.1 to make the code works in suse? Is there another
>>> solution? Sorry for this kind of questions, but I'm very newbie  
>>> with Python
>>>
>>> Thanks in advance!
>>>
>>> Regards
>>> Jorge
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
> -- 
> "Afirmo con total convicción que la religión cristiana organizada  
> como Iglesia ha sido y es aún la principal enemiga del progreso  
> moral en el mundo"
>
> "La religión se basa, pienso, principal y primariamente en el miedo.  
> El miedo es el padre de la crueldad, y por tanto no es sorprendente  
> que crueldad y religión han ido tomadas de la mano. La ciencia puede  
> ayudarnos a superar este cobarde temor en que ha vivido la humanidad  
> por tantas generaciones."
>
> (Bertrand Russell)
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20090203/fb23ab77/attachment.html


More information about the gdal-dev mailing list