forked from PhDGeomatic/OSM_SAA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConverter.py
96 lines (89 loc) · 3.68 KB
/
Converter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from qgis.core import QgsVectorLayer, QgsFeature, QgsGeometry, QgsField
from PyQt5.QtCore import QVariant
def getSingleLines(layer):
lines = []
features = layer.getFeatures()
for feature in features:
geom = feature.geometry()
if geom.isMultipart():
multiLines = geom.asMultiPolyline()
for line in multiLines:
lines.append(line)
else:
line = geom.asPolyline()
lines.append(line)
return lines
def createPointLayer(points, name):
pointLayer = QgsVectorLayer("Point?crs=epsg:3857", name, "memory")
provider = pointLayer.dataProvider()
provider.addAttributes([QgsField('type', QVariant.String)])
pointLayer.updateFields()
for point in points:
feature = QgsFeature(pointLayer.fields())
feature.setGeometry(QgsGeometry.fromPointXY(point[0]))
feature.setAttribute('type', point[1])
provider.addFeatures([feature])
return pointLayer
def convertToMemoryLayer(layer, type, outputName):
features = [feature for feature in layer.getFeatures()]
memoryLayer = QgsVectorLayer(type, outputName, "memory")
memoryLayer_data = memoryLayer.dataProvider()
attributes = layer.dataProvider().fields().toList()
memoryLayer_data.addAttributes(attributes)
memoryLayer.updateFields()
memoryLayer_data.addFeatures(features)
return memoryLayer
def polygonToPoints(feature):
points = []
geometry = feature.geometry();
if geometry:
if geometry.isMultipart():
for singleGeometry in geometry.asMultiPolygon():
verticesOuterRing = singleGeometry[0];
for vertex in verticesOuterRing:
points.append(vertex)
else:
if (geometry.asPolygon()):
verticesOuterRing = geometry.asPolygon()[0];
for vertex in verticesOuterRing:
points.append(vertex)
return points
def exportPolygons(layer, fileName, attributeIndex, numDecimalDigits):
format = "%." + str(numDecimalDigits) + "f";
iter = layer.getFeatures();
f = open( fileName, 'wt');
line = "";
bbox = layer.extent();
line = str(format % bbox.xMinimum()) + " " + str(format % bbox.yMinimum()) + " " + str(format % bbox.xMaximum()) + " " + str(format % bbox.yMaximum()) + "\n";
f.write(line);
line = "";
for feature in iter:
geometry = feature.geometry();
if geometry:
if geometry.isMultipart():
for singleGeometry in geometry.asMultiPolygon():
verticesOuterRing= singleGeometry[0];
if (attributeIndex== -1):
attribute = "NONE";
else:
attribute = feature[attributeIndex];
line = "A " + str(attribute) + "\n";
for vertex in verticesOuterRing:
x = str(format % vertex.x());
y = str(format % vertex.y());
line = line + x + " " + y + "\n";
f.write(line);
else:
if (geometry.asPolygon()):
verticesOuterRing= geometry.asPolygon()[0];
if (attributeIndex== -1):
attribute = "NONE";
else:
attribute = feature[attributeIndex];
line = "A " + str(attribute) + "\n";
for vertex in verticesOuterRing:
x = str(format % vertex.x());
y = str(format % vertex.y());
line = line + x + " " + y + "\n";
f.write(line);
f.close();