[GRASS-dev] Re: GRASS Python Ctypes: Write Raster produces No null
file error!!
Sudipta Sarkar
sdptsarkar2 at gmail.com
Mon Apr 11 13:09:32 EDT 2011
Folks
On close observation made some changes to the fragment of code below on the suspicion that I was not setting null values correctly or passing pointers right so the modified code is now given below but still I get the same error of: ERROR: No null file for <madresult.0>
Please give me some suggestions as I have a deadline approaching.
Modified code:
MA.resize(bands,rows,cols)
for b in range(bands):
ofn = "madresult." + str(b)
out_fd = Rast_open_new(ofn,DCELL_TYPE)
if out_fd < 0:
grass.fatal(_("Unable to create raster map <%s>") % ofn)
out_rast = Rast_allocate_d_buf()
#out_rast = cast(c_void_p(out_rast), ptype)
for row_n in range(rows):
for col_n in range(cols):
#if math.isnan(MAD[b,row_n,col_n]):
if (Rast_is_d_null_value(pointer(c_double(MAD[b,row_n,col_n])))):
Rast_set_d_null_value(pointer(c_double(out_rast[col_n])),1)
else:
out_rast[col_n] = MA[b,row_n,col_n]
Rast_put_row(out_fd,out_rast,DCELL_TYPE)
G_free(out_rast)
Rast_close(out_fd)
Humble regards
On Apr 11, 2011, at 8:25 AM, Sudipta Sarkar wrote:
Dear List Users,
Please help me solve the following, I am entirely new to the whole Python-GRASS-Ctypes issue so please bear with me.
I am trying to develop an application using Python Ctypes hooks to GRASS C libraries. Have done most of the part but getting stuck in the end where i try to write off my output file as GRASS raster. I am giving the relevant part below along with the error I am getting:
ptype = POINTER(c_float)
MA.resize(bands,rows,cols)
for b in range(bands):
ofn = "madresult." + str(b)
out_fd = Rast_open_new(ofn,FCELL_TYPE)
if out_fd < 0:
G_fatal_error("Unable to create raster map <%s>", ofn)
out_rast = Rast_allocate_buf(FCELL_TYPE)
out_rast = cast(c_void_p(out_rast), ptype)
for row_n in range(rows):
for col_n in range(cols):
if math.isnan(MA[b,row_n,col_n]):
Rast_set_null_value(out_rast[col_n],1,FCELL_TYPE)
else:
out_rast[col_n] = MA[b,row_n,col_n]
Rast_put_row(out_fd,out_rast,FCELL_TYPE)
G_free(out_rast)
Rast_close(out_fd)
where MA is a numpy.ndarray, bands, rows and cols are all integer type variables and are self explanatory i believe.
When it comes to executing the line "Rast_close(out_fd)" I am getting the error: "ERROR: No null file for <madresult.0>"
How do I write the null file? I have some experience in developing GRASS raster modules in C and there I never had to write any null file explicitly so whats going wrong over here? Any help from all you GRASS pioneers will be deeply appreciated.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/grass-dev/attachments/20110411/81bdc51f/attachment.html
More information about the grass-dev
mailing list