Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from qgis.PyQt.QtCore import QVariant
- # variables
- layer_name = "My_layer_name"
- line_field_name = "Line"
- m_threshold = 0.5
- new_name = "new_lines"
- order_variable="Fiducial"
- # find point vector layer
- vl = QgsProject.instance().mapLayersByName(layer_name)[0]
- # create a new line layer
- crs = vl.crs().authid()
- vline = QgsVectorLayer("multilinestring?crs=" + crs, new_name , "memory")
- pr = vline.dataProvider()
- pr.addAttributes([QgsField(line_field_name, QVariant.String)])
- vline.updateFields()
- new_geometry = QgsGeometry()
- idx = vl.fields().indexOf(line_field_name)
- line_values = vl.uniqueValues(idx)
- for line in line_values:
- # init for
- expr = QgsExpression('"' + line_field_name + '"= \'' + line + '\'')
- request = QgsFeatureRequest(expr)
- request.addOrderBy(order_variable)
- wkt = "MultiLineString (("
- previous_linename = None
- previous_geometry = None
- for feat in vl.getFeatures(request):
- if previous_linename is not None:
- segment = feat.geometry().shortestLine(previous_geometry)
- if segment.length() > m_threshold:
- # delete last comma and begin next part
- wkt = wkt[:-1] + "),("
- pt = feat.geometry().asPoint()
- wkt += str(pt.x()) + " " + str(pt.y()) + ","
- previous_linename = line
- previous_geometry = feat.geometry()
- pt = feat.geometry().asPoint()
- wkt += str(pt.x()) + " " + str(pt.y()) + ","
- # delete last comma and close wkt
- wkt = wkt[:-1] + "))"
- new_feat = QgsFeature()
- new_feat.setGeometry(QgsGeometry.fromWkt(wkt))
- new_feat.setAttributes([previous_linename])
- pr.addFeature(new_feat)
- # update extent for the new line layer
- vline.updateExtents()
- # load new line layer to canvas
- QgsProject.instance().addMapLayer(vline)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement