I have this vector layer of lines between 2 nodes. I need to select all second entries that have the same length of the previous one. Can someone help me with this?
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It only takes a minute to sign up.Sign up to join this community
If you only want to select rows (leaving the geometry intact):
From your table I understand that "the row above" means an identical line in the reverse direction. One solution is to create two views on the data each of alternate rows, do a join of name_x2_y2 on name_x1_y1 and select where myLayer_copy_length_km = length_km.
First, if you ordered your table to achieve what I see in your question (it looks like you have ordered on Length), then you must make a version of your table that replicates this. To do this use
MMQGIS->Modify->Sort. Next Create a new field (let's call it 'order') and set its value to rownum. Save your edit. Now highlight your layer and go
Layer->Query. In the expression editor dialog type the following expression:
"order" % 2 > 0. This gives you all the odd rows as a view. Right-click your layer and select Duplicate to make a copy in the layers list. In the copy, change the query statement to
"order" % 2 = 0 to get all the even rows. Now go to your first layer and go Properties->Joins and make a new join of name_x2_y2 on name_x1_y1 (i.e. the 'to' and 'from' nodes for a pair of lines match between the odd rows and the even rows). Open the table and use an expression to select where myLayer_copy_length_km = length_km.
If you want to edit the data to have only one line between any pair of nodes
You could use
Delete duplicate Geometries from the Processing Toolbox to delete the duplicates. Alternatively, as your lines only have 2 nodes, you can simply dissolve everything and then use v.split.vert from GRASS (Processing toolbox) with a max verts per segment set to 2 to break it all apart again. A slightly fancier version would be to dissolve on length_km and then do the split and this will preserve any lines where the length is not the same (though that presumes some difference between the length stated in the attributes and the actual line length for some reason).