Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#3567 closed defect (fixed)

v.select: doubtful result with the default overlap operator selecting areas with lines

Reported by: mlennert Owned by: grass-dev@…
Priority: normal Milestone: 7.4.1
Component: Vector Version: svn-trunk
Keywords: v.select overlap Cc:
CPU: Unspecified Platform: Unspecified

Description

Trying to select areas with lines, I get a result using the overlap operator that I don't really understand, and which I suspect being a bug.

Using the following command in the attached location, test_vselect mapset:

v.select ain=test_polys bin=test_line atype=area btype=line out=result_overlap op=overlap

I get a result of only three areas selected (see attached map) where, IMHO, all 41 should be.

I'll try to diagnose this further when I have the time...

The attached location includes the results of runs with op=intersects, op=crosses and op=overlaps which provide the results I expect.

Attachments (2)

loc_test_vselect.tgz (50.1 KB ) - added by mlennert 6 years ago.
location with test data in mapset test_vselect
v_select_issue_with_overlap_operator.png (27.2 KB ) - added by mlennert 6 years ago.
image of overlap results

Download all attachments as: .zip

Change History (8)

by mlennert, 6 years ago

Attachment: loc_test_vselect.tgz added

location with test data in mapset test_vselect

by mlennert, 6 years ago

image of overlap results

comment:1 by mmetz, 6 years ago

Resolution: fixed
Status: newclosed

In 72746:

Vlib: fix with_z = 0 for Vect_line_check_intersection2() and Vect_line_intersection2(), fixes #3567

comment:2 by mmetz, 6 years ago

In 72747:

Vlib: fix with_z = 0 for Vect_line_check_intersection2() and Vect_line_intersection2(), fixes #3567 (backport trunk r72746)

in reply to:  description ; comment:3 by mmetz, 6 years ago

Replying to mlennert:

Trying to select areas with lines, I get a result using the overlap operator that I don't really understand, and which I suspect being a bug.

Using the following command in the attached location, test_vselect mapset:

v.select ain=test_polys bin=test_line atype=area btype=line out=result_overlap op=overlap

I get a result of only three areas selected (see attached map) where, IMHO, all 41 should be.

The problem was not the overlap operator of v.select, but instead that the vector test_line is 3D, and one of the underlying library functions did not ignore z as it should have done. This bug has been fixed in trunk and relbr74 with r72746,7.

in reply to:  3 ; comment:4 by mlennert, 6 years ago

Replying to mmetz:

Replying to mlennert:

Trying to select areas with lines, I get a result using the overlap operator that I don't really understand, and which I suspect being a bug.

Using the following command in the attached location, test_vselect mapset:

v.select ain=test_polys bin=test_line atype=area btype=line out=result_overlap op=overlap

I get a result of only three areas selected (see attached map) where, IMHO, all 41 should be.

The problem was not the overlap operator of v.select, but instead that the vector test_line is 3D, and one of the underlying library functions did not ignore z as it should have done. This bug has been fixed in trunk and relbr74 with r72746,7.

Thanks a lot ! Sorry, should have noticed the 3D nature of the vector myself. I guess there must have been a message at import which I didn't see.

This obviously raises the question of whether v.select should always ignore 3D or whether a flag (-3) should allow enabling it so that if one wants to check spatial relation in 3D this is possible.

in reply to:  4 comment:5 by mmetz, 6 years ago

Replying to mlennert:

Replying to mmetz:

Replying to mlennert:

Trying to select areas with lines, I get a result using the overlap operator that I don't really understand, and which I suspect being a bug.

Using the following command in the attached location, test_vselect mapset:

v.select ain=test_polys bin=test_line atype=area btype=line out=result_overlap op=overlap

I get a result of only three areas selected (see attached map) where, IMHO, all 41 should be.

The problem was not the overlap operator of v.select, but instead that the vector test_line is 3D, and one of the underlying library functions did not ignore z as it should have done. This bug has been fixed in trunk and relbr74 with r72746,7.

Thanks a lot ! Sorry, should have noticed the 3D nature of the vector myself. I guess there must have been a message at import which I didn't see.

This obviously raises the question of whether v.select should always ignore 3D or whether a flag (-3) should allow enabling it so that if one wants to check spatial relation in 3D this is possible.

This is not possible because Vect_segment_intersection() does not support 3D coordinates.

Also note that 3D topology does not exist yet in GRASS, e.g. a purely vertical line can cause problems, because it is marked as degenerate at the corresponding nodes.

comment:6 by neteler, 6 years ago

Milestone: 7.4.27.4.1
Note: See TracTickets for help on using tickets.