Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. import itertools
  2.  
  3. layer = iface.activeLayer()
  4.  
  5. feats = [ feat for feat in layer.getFeatures() ]
  6.  
  7. n = len(feats)
  8.  
  9. for i, j in itertools.combinations(range(n), 2):
  10. distance = feats[i].geometry().distance(feats[j].geometry())
  11. if distance < 50:
  12. print i, j, distance
  13.  
  14. 0 3 0.0
  15. 0 5 6.32561007326e-08
  16. 1 2 0.0
  17. 1 4 2.77618203084e-08
  18. 2 3 0.0
  19. 4 6 3.69805894613e-10
  20. 5 6 5.00951291099e-08
  21.  
  22. 0 3 0.0
  23. 0 7 6.32561007326e-08
  24. 1 2 0.0
  25. 1 6 2.77618203084e-08
  26. 2 3 0.0
  27. 4 5 6.09094222774e-08
  28. 4 8 3.69805894613e-10
  29. 5 6 22.0495367734
  30. 7 9 5.00951291099e-08
  31. 8 9 9.68909528121e-08
  32.  
  33. 0 3 0.0
  34. 0 7 0.0
  35. 1 2 0.0
  36. 1 6 0.0
  37. 2 3 0.0
  38. 4 5 0.0
  39. 4 8 0.0
  40. 5 6 0.0
  41. 7 9 0.0
  42. 8 9 0.0
  43.  
  44. import itertools
  45.  
  46. layer = iface.activeLayer()
  47.  
  48. feats = [ feat for feat in layer.getFeatures() ]
  49.  
  50. n = len(feats)
  51.  
  52. indices = []
  53.  
  54. for i, j in itertools.combinations(range(n), 2):
  55. distance = feats[i].geometry().distance(feats[j].geometry())
  56. if distance < 50:
  57. indices.append([i,j])
  58.  
  59. selected_feats = []
  60.  
  61. selected_feats.append(feats[0])
  62.  
  63. del feats[0]
  64.  
  65. k=0
  66.  
  67. while len(feats) != 0:
  68. for i, feat in enumerate(feats):
  69. d = selected_feats[k].geometry().distance(feat.geometry())
  70. if d == 0:
  71. selected_feats.append(feat)
  72. k += 1
  73. del feats[i]
  74.  
  75. lines = [ feat.geometry().asPolyline() for feat in selected_feats ]
  76.  
  77. epsg = layer.crs().postgisSrid()
  78.  
  79. uri = "LineString?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
  80.  
  81. mem_layer = QgsVectorLayer(uri,
  82. '4testing_feats_ordered',
  83. 'memory')
  84.  
  85. prov = mem_layer.dataProvider()
  86.  
  87. feats = [ QgsFeature() for i in range(len(selected_feats)) ]
  88.  
  89. for i, feat in enumerate(feats):
  90. feat.setAttributes([i])
  91. feat.setGeometry(QgsGeometry.fromPolyline(lines[i]))
  92.  
  93. prov.addFeatures(feats)
  94.  
  95. QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
  96.  
  97. registry = QgsMapLayerRegistry.instance()
  98.  
  99. layer = registry.mapLayersByName("4testing_feats_ordered")
  100.  
  101. lines = [ feat.geometry().asPolyline() for feat in layer[0].getFeatures() ]
  102.  
  103. sum = 0
  104.  
  105. for i in range(len(lines[0])-2):
  106. 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])
  107. sum += det
  108.  
  109. if sum > 0:
  110.  
  111. lines[0].reverse()
  112.  
  113. new_points = []
  114.  
  115. for point in lines[0]:
  116. new_points.append(point)
  117.  
  118. print new_points[-1].wellKnownText()
  119.  
  120. for i in range(1, len(lines), 1):
  121. if lines[i][-1] == new_points[-1]:
  122. lines[i].reverse()
  123.  
  124. for point in lines[i]:
  125. new_points.append(point)
  126.  
  127. epsg = layer[0].crs().postgisSrid()
  128.  
  129. uri = "Point?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
  130.  
  131. mem_layer2 = QgsVectorLayer(uri,
  132. 'points',
  133. 'memory')
  134.  
  135. prov = mem_layer2.dataProvider()
  136.  
  137. feats = [ QgsFeature() for i in range(len(new_points)) ]
  138.  
  139. for i, feat in enumerate(feats):
  140. feat.setAttributes([i])
  141. feat.setGeometry(QgsGeometry.fromPoint(new_points[i]))
  142.  
  143. prov.addFeatures(feats)
  144.  
  145. QgsMapLayerRegistry.instance().addMapLayer(mem_layer2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement