Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import itertools
- layer = iface.activeLayer()
- feats = [ feat for feat in layer.getFeatures() ]
- n = len(feats)
- for i, j in itertools.combinations(range(n), 2):
- distance = feats[i].geometry().distance(feats[j].geometry())
- if distance < 50:
- print i, j, distance
- 0 3 0.0
- 0 5 6.32561007326e-08
- 1 2 0.0
- 1 4 2.77618203084e-08
- 2 3 0.0
- 4 6 3.69805894613e-10
- 5 6 5.00951291099e-08
- 0 3 0.0
- 0 7 6.32561007326e-08
- 1 2 0.0
- 1 6 2.77618203084e-08
- 2 3 0.0
- 4 5 6.09094222774e-08
- 4 8 3.69805894613e-10
- 5 6 22.0495367734
- 7 9 5.00951291099e-08
- 8 9 9.68909528121e-08
- 0 3 0.0
- 0 7 0.0
- 1 2 0.0
- 1 6 0.0
- 2 3 0.0
- 4 5 0.0
- 4 8 0.0
- 5 6 0.0
- 7 9 0.0
- 8 9 0.0
- import itertools
- layer = iface.activeLayer()
- feats = [ feat for feat in layer.getFeatures() ]
- n = len(feats)
- indices = []
- for i, j in itertools.combinations(range(n), 2):
- distance = feats[i].geometry().distance(feats[j].geometry())
- if distance < 50:
- indices.append([i,j])
- selected_feats = []
- selected_feats.append(feats[0])
- del feats[0]
- k=0
- while len(feats) != 0:
- for i, feat in enumerate(feats):
- d = selected_feats[k].geometry().distance(feat.geometry())
- if d == 0:
- selected_feats.append(feat)
- k += 1
- del feats[i]
- lines = [ feat.geometry().asPolyline() for feat in selected_feats ]
- epsg = layer.crs().postgisSrid()
- uri = "LineString?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
- mem_layer = QgsVectorLayer(uri,
- '4testing_feats_ordered',
- 'memory')
- prov = mem_layer.dataProvider()
- feats = [ QgsFeature() for i in range(len(selected_feats)) ]
- for i, feat in enumerate(feats):
- feat.setAttributes([i])
- feat.setGeometry(QgsGeometry.fromPolyline(lines[i]))
- prov.addFeatures(feats)
- QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
- registry = QgsMapLayerRegistry.instance()
- layer = registry.mapLayersByName("4testing_feats_ordered")
- lines = [ feat.geometry().asPolyline() for feat in layer[0].getFeatures() ]
- sum = 0
- for i in range(len(lines[0])-2):
- det = (lines[0][i+1][0] - lines[0][i][0])*(lines[0][i+2][1] - lines[0][i][1])-(lines[0][i+1][1] - lines[0][i][1])*(lines[0][i+2][0] - lines[0][i][0])
- sum += det
- if sum > 0:
- lines[0].reverse()
- new_points = []
- for point in lines[0]:
- new_points.append(point)
- print new_points[-1].wellKnownText()
- for i in range(1, len(lines), 1):
- if lines[i][-1] == new_points[-1]:
- lines[i].reverse()
- for point in lines[i]:
- new_points.append(point)
- epsg = layer[0].crs().postgisSrid()
- uri = "Point?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
- mem_layer2 = QgsVectorLayer(uri,
- 'points',
- 'memory')
- prov = mem_layer2.dataProvider()
- feats = [ QgsFeature() for i in range(len(new_points)) ]
- for i, feat in enumerate(feats):
- feat.setAttributes([i])
- feat.setGeometry(QgsGeometry.fromPoint(new_points[i]))
- prov.addFeatures(feats)
- QgsMapLayerRegistry.instance().addMapLayer(mem_layer2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement