Skip to content

Commit 50a258d

Browse files
committed
[processing] write additional output(s) compatible withg Azimuth and Distance
plugin
1 parent 1507f0d commit 50a258d

File tree

1 file changed

+43
-10
lines changed

1 file changed

+43
-10
lines changed

python/plugins/processing/algs/qgis/PointsToPaths.py

+43-10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
import os
2829
from datetime import datetime
2930
from datetime import timedelta
3031

@@ -40,7 +41,9 @@
4041
from processing.parameters.ParameterString import ParameterString
4142
#from processing.parameters.ParameterNumber import ParameterNumber
4243
from processing.outputs.OutputVector import OutputVector
43-
from processing.tools import dataobjects, vector
44+
from processing.outputs.OutputDirectory import OutputDirectory
45+
from processing.tools import dataobjects, vector, system
46+
4447

4548
class PointsToPaths(GeoAlgorithm):
4649

@@ -49,7 +52,8 @@ class PointsToPaths(GeoAlgorithm):
4952
ORDER_FIELD = 'ORDER_FIELD'
5053
DATE_FORMAT = 'DATE_FORMAT'
5154
#GAP_PERIOD = 'GAP_PERIOD'
52-
OUTPUT = 'OUTPUT'
55+
OUTPUT_LINES = 'OUTPUT_LINES'
56+
OUTPUT_TEXT = 'OUTPUT_TEXT'
5357

5458
def defineCharacteristics(self):
5559
self.name = 'Points to path'
@@ -65,7 +69,8 @@ def defineCharacteristics(self):
6569
#self.addParameter(ParameterNumber(
6670
# self.GAP_PERIOD,
6771
# 'Gap period (if order field is DateTime)', 0, 60, 0))
68-
self.addOutput(OutputVector(self.OUTPUT, 'Paths'))
72+
self.addOutput(OutputVector(self.OUTPUT_LINES, 'Paths'))
73+
self.addOutput(OutputDirectory(self.OUTPUT_TEXT, 'Directory'))
6974

7075
def processAlgorithm(self, progress):
7176
layer = dataobjects.getObjectFromUri(
@@ -74,12 +79,13 @@ def processAlgorithm(self, progress):
7479
orderField = self.getParameterValue(self.ORDER_FIELD)
7580
dateFormat = unicode(self.getParameterValue(self.DATE_FORMAT))
7681
#gap = int(self.getParameterValue(self.GAP_PERIOD))
82+
dirName = self.getOutputValue(self.OUTPUT_TEXT)
7783

7884
fields = QgsFields()
7985
fields.append(QgsField('group', QVariant.String, '', 254, 0))
8086
fields.append(QgsField('begin', QVariant.String, '', 254, 0))
8187
fields.append(QgsField('end', QVariant.String, '', 254, 0))
82-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
88+
writer = self.getOutputFromName(self.OUTPUT_LINES).getVectorWriter(
8389
fields, QGis.WKBLineString, layer.dataProvider().crs())
8490

8591
points = dict()
@@ -100,22 +106,49 @@ def processAlgorithm(self, progress):
100106

101107
progress.setPercentage(0)
102108

109+
da = QgsDistanceArea()
110+
103111
count = 0
104112
total = 100.0 / len(points)
105-
for k, v in points.iteritems():
106-
v.sort()
113+
for group, vertices in points.iteritems():
114+
vertices.sort()
107115
f = QgsFeature()
108116
f.initAttributes(len(fields))
109117
f.setFields(fields)
110-
f['group'] = k
111-
f['begin'] = v[0][0]
112-
f['end'] = v[-1][0]
118+
f['group'] = group
119+
f['begin'] = vertices[0][0]
120+
f['end'] = vertices[-1][0]
121+
122+
if dirName == '':
123+
fileName = system.getTempFilenameInTempFolder('%s.txt' % group)
124+
else:
125+
fileName = os.path.join(dirName, '%s.txt' % group)
126+
127+
fl = open(fileName, 'w')
128+
fl.write('angle=Azimuth\n')
129+
fl.write('heading=Coordinate_System\n')
130+
fl.write('dist_units=Default\n')
131+
113132
line = []
114-
for node in v:
133+
i = 0
134+
for node in vertices:
115135
line.append(node[1])
136+
137+
if i == 0:
138+
fl.write('startAt=%f;%f;90\n' % (node[1].x(), node[1].y()))
139+
fl.write('survey=Polygonal\n')
140+
fl.write('[data]\n')
141+
else:
142+
angle = line[i-1].azimuth(line[i])
143+
distance = da.measureLine(line[i-1], line[i])
144+
fl.write('%f;%f;90\n' % (angle, distance))
145+
146+
i += 1
147+
116148
f.setGeometry(QgsGeometry.fromPolyline(line))
117149
writer.addFeature(f)
118150
count += 1
119151
progress.setPercentage(int(count * total))
120152

121153
del writer
154+
fl.close()

0 commit comments

Comments
 (0)