[GRASS-user] Null values in attribute table get converted to 0 (zero) during v.to.rast

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

Cheers,

Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

that would require to change db_select_CatValArray on library level here
https://github.com/OSGeo/grass/blob/master/lib/db/dbmi_client/select.c#L368
and here
https://github.com/OSGeo/grass/blob/master/lib/db/dbmi_client/select.c#L375

I can’t estimate the side effects of any changes, this is a widely used function, thus no easy fix. Please open a ticket.

Markus M

Cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173

if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

Cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

···

On 31/10/2019 22:20, Markus Metz wrote:

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173
if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

I’m not sure I agree with the approach that a polygon with missing attribute should become NULL. In my view, NULL should be used only for pixels not covered at all by any polygon.

Perhaps an additional input parameter “missing_attribute” so the user can choose a value to enter into the raster if the attribute is missing. If no parameter is supplied, and the chosen attribute column has missing values, I’d prefer that the script exit gracefully, with a message that a “missing_attribute” value is required.

Cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

_______________________________________________
grass-user mailing list
[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
[https://lists.osgeo.org/mailman/listinfo/grass-user](https://lists.osgeo.org/mailman/listinfo/grass-user)
-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

Hi Micha

El jue., 31 oct. 2019 a las 22:36, Micha Silver (<tsvibar@gmail.com>) escribió:

On 31/10/2019 22:20, Markus Metz wrote:

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173
if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

I’m not sure I agree with the approach that a polygon with missing attribute should become NULL. In my view, NULL should be used only for pixels not covered at all by any polygon.

but in the resulting raster (in rasters in general), there’s no difference, it’s rather NULL or it has a value… it does not matter if the null comes from areas originally covered by a polygon or not… A different story might be if we go from raster to polygon…

Perhaps an additional input parameter “missing_attribute” so the user can choose a value to enter into the raster if the attribute is missing. If no parameter is supplied, and the chosen attribute column has missing values, I’d prefer that the script exit gracefully, with a message that a “missing_attribute” value is required.

yes, this could be a solution to keep track of where you had polygons, but then you would need to use r.null anyway, no? I try to think of use cases in which one uses a vector attribute to convert to raster, but then still needs to know where the polygons were… because, for example, to query a raster map with another raster map representing zones one would convert the vector of polygons using cat and not an attribute, no?

cheers,

Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

_______________________________________________
grass-user mailing list
[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
[https://lists.osgeo.org/mailman/listinfo/grass-user](https://lists.osgeo.org/mailman/listinfo/grass-user)
-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

On Fri, Nov 1, 2019 at 12:11 AM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Micha

El jue., 31 oct. 2019 a las 22:36, Micha Silver (<tsvibar@gmail.com>) escribió:

On 31/10/2019 22:20, Markus Metz wrote:

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173
if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

I’m not sure I agree with the approach that a polygon with missing attribute should become NULL. In my view, NULL should be used only for pixels not covered at all by any polygon.

but in the resulting raster (in rasters in general), there’s no difference, it’s rather NULL or it has a value… it does not matter if the null comes from areas originally covered by a polygon or not…

I think it depends on the particular use case if it matters where a NULL raster value comes from: a polygon with empty attribute or no polygon at all for that cell.

Perhaps an additional input parameter “missing_attribute” so the user can choose a value to enter into the raster if the attribute is missing. If no parameter is supplied, and the chosen attribute column has missing values, I’d prefer that the script exit gracefully, with a message that a “missing_attribute” value is required.

This can easily be done with existing tools:

  • convert only those polygons with a valid attribute value: v.to.rast where=“attribute is not null”

  • replace missing attribute values with a valid value: v.db.update where=“attribute is null”, then v.to.rast

I’m changing my PR to issue a warning if empty attribute values are found and replaced with zero.

Markus M

yes, this could be a solution to keep track of where you had polygons, but then you would need to use r.null anyway, no? I try to think of use cases in which one uses a vector attribute to convert to raster, but then still needs to know where the polygons were… because, for example, to query a raster map with another raster map representing zones one would convert the vector of polygons using cat and not an attribute, no?

cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

···

On 01/11/2019 9:38, Markus Metz wrote:

On Fri, Nov 1, 2019 at 12:11 AM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Micha

El jue., 31 oct. 2019 a las 22:36, Micha Silver (<tsvibar@gmail.com>) escribió:

On 31/10/2019 22:20, Markus Metz wrote:

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173
if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

I’m not sure I agree with the approach that a polygon with missing attribute should become NULL. In my view, NULL should be used only for pixels not covered at all by any polygon.

but in the resulting raster (in rasters in general), there’s no difference, it’s rather NULL or it has a value… it does not matter if the null comes from areas originally covered by a polygon or not…

I think it depends on the particular use case if it matters where a NULL raster value comes from: a polygon with empty attribute or no polygon at all for that cell.

Perhaps an additional input parameter “missing_attribute” so the user can choose a value to enter into the raster if the attribute is missing. If no parameter is supplied, and the chosen attribute column has missing values, I’d prefer that the script exit gracefully, with a message that a “missing_attribute” value is required.

This can easily be done with existing tools:

  • convert only those polygons with a valid attribute value: v.to.rast where=“attribute is not null”

  • replace missing attribute values with a valid value: v.db.update where=“attribute is null”, then v.to.rast

I’m changing my PR to issue a warning if empty attribute values are found and replaced with zero.

IMHO, that’s probably the best way to deal with this.

Markus M

yes, this could be a solution to keep track of where you had polygons, but then you would need to use r.null anyway, no? I try to think of use cases in which one uses a vector attribute to convert to raster, but then still needs to know where the polygons were… because, for example, to query a raster map with another raster map representing zones one would convert the vector of polygons using cat and not an attribute, no?

cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

I was traveling so could not respond. So sorry to chime in a bit late. For me it was a bit counter intuitive that polygons with null attributes became zero in the finished raster. What if I had attributes with zero value in it?

I liked the idea of issuing a warning and using the where parameter.

Anyway, thanks for the help and fix

Cheers
Daniel

On Fri, Nov 1, 2019 at 12:33 PM Micha Silver <tsvibar@gmail.com> wrote:

On 01/11/2019 9:38, Markus Metz wrote:

On Fri, Nov 1, 2019 at 12:11 AM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Micha

El jue., 31 oct. 2019 a las 22:36, Micha Silver (<tsvibar@gmail.com>) escribió:

On 31/10/2019 22:20, Markus Metz wrote:

On Tue, Oct 29, 2019 at 7:40 PM Veronica Andreo <veroandreo@gmail.com> wrote:

Hi Daniel,

I agree that if there’s a NULL in the column, there should be NULL in the resulting raster. I suggest to open a ticket here: https://trac.osgeo.org/grass/

easy solution: v.to.rast where=“<attribute_column> is not null”

or the new PR #173
https://github.com/OSGeo/grass/pull/173
if an attribute value is null, the corresponding vector features will not be rasterized

Markus M

I’m not sure I agree with the approach that a polygon with missing attribute should become NULL. In my view, NULL should be used only for pixels not covered at all by any polygon.

but in the resulting raster (in rasters in general), there’s no difference, it’s rather NULL or it has a value… it does not matter if the null comes from areas originally covered by a polygon or not…

I think it depends on the particular use case if it matters where a NULL raster value comes from: a polygon with empty attribute or no polygon at all for that cell.

Perhaps an additional input parameter “missing_attribute” so the user can choose a value to enter into the raster if the attribute is missing. If no parameter is supplied, and the chosen attribute column has missing values, I’d prefer that the script exit gracefully, with a message that a “missing_attribute” value is required.

This can easily be done with existing tools:

  • convert only those polygons with a valid attribute value: v.to.rast where=“attribute is not null”

  • replace missing attribute values with a valid value: v.db.update where=“attribute is null”, then v.to.rast

I’m changing my PR to issue a warning if empty attribute values are found and replaced with zero.

IMHO, that’s probably the best way to deal with this.

Markus M

yes, this could be a solution to keep track of where you had polygons, but then you would need to use r.null anyway, no? I try to think of use cases in which one uses a vector attribute to convert to raster, but then still needs to know where the polygons were… because, for example, to query a raster map with another raster map representing zones one would convert the vector of polygons using cat and not an attribute, no?

cheers,
Vero

El jue., 24 oct. 2019 a las 14:40, Daniel Victoria (<daniel.victoria@gmail.com>) escribió:

Hi list,

I have a vector polygon map that I’m converting to raster. The attribute column that I process has some empty rows (no data / null). When I run v.to.rast, these empty rows become 0 (zero) on my resulting raster map.

Shouldn’t v.to.rast respect the empty attribute table and create null values for those polygons?

For now I’ll use r.null to fix this problem. But what if 0 is a valid value?

Cheers
Daniel

PS - Running Grass 7.6.1 on Ubuntu


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user


Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user