I have a poly line shape which represents cross sections along a river. Thses cross sections are numbered and it appears in the map. The numbering happens from downstream to upstream. In a specific point I have to add anew cross section (see Fig 1). Afterwards I have the problem that the cross sections must be numbered from that point to the upstrem (see Fig 2). I have more than 1000 cross sections. How can I do it automatically.
My suggestion is to (1) sort the attribute table of cross sections according to the distance from the river outlet (end point- downstream). and (2) renumber.
Below is just about (1), and more specifically, about the distance of each cross section from the end point of the river. (See red arrows).
- Your attached picture shows that the river and cross-sections are on the same layer. Please remove the river (sorry...) and move it to a new layer (let's say
- This workflow is for single river. If you have multiple rivers, please repeat the process as per each river (according to
Then, given you have:
- Cross-section layer (line strings), and
river: River layer (line strings) with river id (
Please open the attribute table of
Cross-section layer and start the Field Calculator to create a new Decimal number field with an expression:
distance(end_point(geometry(get_feature('river', 'id', '1'))), intersection(geometry(get_feature('river', 'id', '1')), $geometry))
This may look complicated, but it is just measuring the distance (
dist()) between the river outlet (=
end_point()) and the intersecting point of each cross-section and the river (=
(The above example is for a case
river id = 1. If your
river layer has
uid starting with
0, then it will be
get_feature('river', 'uid', '0') to access the first river).
After getting the distance data, use it to sort the attribute table.
If you are using QGIS 3.0, then
Add autoincremental field will be useful. Or you may want to use
MMQGIS plugin (sort function). Anyway, once you have ordered table, giving a sequential number would be relatively easy.
Above, just a partial answer but hope this helps.