[GRASS-dev] [GRASS GIS] #3235: Vect_cidx_find_all should not allow mixing GV_AREA with other geometries

GRASS GIS trac at osgeo.org
Thu Jan 5 13:22:04 PST 2017

#3235: Vect_cidx_find_all should not allow mixing GV_AREA with other geometries
  Reporter:  marisn       |      Owner:  grass-dev@…
      Type:  defect       |     Status:  new
  Priority:  major        |  Milestone:  7.2.1
 Component:  LibVector    |    Version:  svn-trunk
Resolution:               |   Keywords:
       CPU:  Unspecified  |   Platform:  Unspecified

Comment (by mmetz):

 Replying to [ticket:3235 marisn]:
 > At the moment Vect_cidx_find_all accepts any type mask. This leads to
 unusable results in case if typemask allows both GV_LINES and GV_AREA in
 the output. Reason - Vect_cidx_find_next will return line ID for GV_LINES
 and area ID for GV_AREA. As both ID spaces are separate (thus might
 contain identical ID values), mixing them in a single output structure is
 a road to disaster.

 That really is a disaster. The original implementation of the category
 index did not take into account that area categories are added to the
 category index. Probably because this is duplicate information, an area
 can only have category values if it has a centroid with category values.
 > The fix - Vect_cidx_find_all should fail to accept type mask matching
 GV_LINES and GV_AREA (other combinations?) simultaneously.
 > Other option - change Vect_cidx_find_all to modify two structs - one
 with line IDs and other with area IDs.

 The real fix would be to not add area category values to the category
 index at all and update modules accordingly. This would be a substantial
 change in the vector libraries, but it can be implemented without breaking
 compatibility with G7. That would be a bit of work but I think it is worth
 the effort because it avoids ID collision.

Ticket URL: <https://trac.osgeo.org/grass/ticket/3235#comment:1>
GRASS GIS <https://grass.osgeo.org>

More information about the grass-dev mailing list