1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
from qgis.core import *
|
8
|
from PyQt4.QtCore import *
|
9
|
from math import degrees
|
10
|
|
11
|
|
12
|
EDGEID = 'edgeid'
|
13
|
FROM = 'from'
|
14
|
TO = 'to'
|
15
|
PRIORITY = 'priority'
|
16
|
LENGTH = 'length'
|
17
|
TIME = 'time'
|
18
|
|
19
|
NODEID = 'nodeID'
|
20
|
COORD_X = 'x'
|
21
|
COORD_Y = 'y'
|
22
|
|
23
|
ID = 'id'
|
24
|
VTO = 'vto'
|
25
|
VFROM = 'vfrom'
|
26
|
NODE1 = 'node1'
|
27
|
NODE2 = 'node2'
|
28
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
inLayerEdges = processing.getObject(Edges)
|
35
|
inNodes = processing.getObject(Nodes)
|
36
|
|
37
|
crs = inLayerEdges.crs().toWkt()
|
38
|
|
39
|
|
40
|
idxEdgeId = inLayerEdges.fieldNameIndex(ID)
|
41
|
idxPriority = inLayerEdges.fieldNameIndex(PRIORITY)
|
42
|
idxLength = inLayerEdges.fieldNameIndex(LENGTH)
|
43
|
idxTime = inLayerEdges.fieldNameIndex(TIME)
|
44
|
idxFrom = inLayerEdges.fieldNameIndex(FROM)
|
45
|
idxTo = inLayerEdges.fieldNameIndex(TO)
|
46
|
|
47
|
idx_id = inNodes.fieldNameIndex(NODEID)
|
48
|
idx_x = inNodes.fieldNameIndex(COORD_X)
|
49
|
idx_y = inNodes.fieldNameIndex(COORD_Y)
|
50
|
|
51
|
|
52
|
outLayer = QgsVectorLayer('Linestring?crs=' + crs, 'merged_edges', 'memory')
|
53
|
|
54
|
outdp = outLayer.dataProvider()
|
55
|
|
56
|
|
57
|
outdp.addAttributes([QgsField(EDGEID, QVariant.String),
|
58
|
QgsField(NODE1, QVariant.String),
|
59
|
QgsField(NODE2, QVariant.String),
|
60
|
QgsField(PRIORITY, QVariant.Int),
|
61
|
QgsField(VTO, QVariant.Double),
|
62
|
QgsField(VFROM, QVariant.Double)])
|
63
|
outLayer.updateFields()
|
64
|
|
65
|
|
66
|
outEdgeId = outdp.fieldNameIndex(EDGEID)
|
67
|
outNode1 = outdp.fieldNameIndex(NODE1)
|
68
|
outNode2 = outdp.fieldNameIndex(NODE2)
|
69
|
outPriority = outdp.fieldNameIndex(PRIORITY)
|
70
|
outVTo = outdp.fieldNameIndex(VTO)
|
71
|
outVFrom = outdp.fieldNameIndex(VFROM)
|
72
|
|
73
|
listOfEdgeIds = []
|
74
|
count = 0
|
75
|
flag = 0
|
76
|
|
77
|
|
78
|
for feat in inLayerEdges.getFeatures():
|
79
|
|
80
|
|
81
|
newEdge = QgsFeature(outLayer.pendingFields())
|
82
|
|
83
|
currentPriority = feat.attributes()[idxPriority]
|
84
|
currentEdgeId = feat.attributes()[idxEdgeId]
|
85
|
|
86
|
if currentEdgeId.find('From') == -1:
|
87
|
edgeIdTrimmed = currentEdgeId.replace('To', '')
|
88
|
else:
|
89
|
edgeIdTrimmed = currentEdgeId.replace('From', '')
|
90
|
|
91
|
if edgeIdTrimmed in listOfEdgeIds:
|
92
|
|
93
|
|
94
|
continue
|
95
|
|
96
|
else:
|
97
|
|
98
|
|
99
|
listOfEdgeIds.append(edgeIdTrimmed)
|
100
|
|
101
|
newEdge.setAttribute(EDGEID, edgeIdTrimmed)
|
102
|
newEdge.setAttribute(PRIORITY, currentPriority)
|
103
|
|
104
|
node1 = feat.attributes()[idxFrom]
|
105
|
node2 = feat.attributes()[idxTo]
|
106
|
newEdge.setAttribute(NODE1, node1)
|
107
|
newEdge.setAttribute(NODE2, node2)
|
108
|
|
109
|
|
110
|
exp = QgsExpression('nodeID ILIKE \'' + node1 +'\' ')
|
111
|
request = QgsFeatureRequest(exp)
|
112
|
request.setLimit(1)
|
113
|
|
114
|
for feat2 in inNodes.getFeatures(request):
|
115
|
geomFrom = feat2.geometry()
|
116
|
print geomFrom
|
117
|
|
118
|
|
119
|
exp = QgsExpression('nodeID ILIKE \'' + node2 +'\' ')
|
120
|
request = QgsFeatureRequest(exp)
|
121
|
request.setLimit(1)
|
122
|
|
123
|
for feat2 in inNodes.getFeatures(request):
|
124
|
geomTo = feat2.geometry()
|
125
|
print geomTo
|
126
|
|
127
|
|
128
|
exp = QgsExpression('id ILIKE \'' + edgeIdTrimmed + '%\' ')
|
129
|
request = QgsFeatureRequest(exp)
|
130
|
|
131
|
|
132
|
for feat1 in inLayerEdges.getFeatures(request):
|
133
|
|
134
|
tempEdgeId = feat1.attributes()[idxEdgeId]
|
135
|
|
136
|
length = feat1.attributes()[idxLength]
|
137
|
time = feat1.attributes()[idxTime]
|
138
|
velocity = (length / time) * 3.6
|
139
|
|
140
|
if tempEdgeId.find("From") is not -1:
|
141
|
|
142
|
newEdge.setAttribute(VFROM, velocity)
|
143
|
elif tempEdgeId.find("To") is not -1:
|
144
|
|
145
|
newEdge.setAttribute(VTO, velocity)
|
146
|
else:
|
147
|
print("Python did NOT find the substring!")
|
148
|
|
149
|
|
150
|
print "heyho"
|
151
|
newEdge.setGeometry(QgsGeometry.fromPolyline([geomFrom.asPoint(),geomTo.asPoint()]))
|
152
|
|
153
|
(res, outFeats) = outdp.addFeatures([newEdge])
|
154
|
|
155
|
|
156
|
|
157
|
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
|
158
|
print "Done ... "
|
159
|
|
160
|
|
161
|
|
162
|
|
163
|
|