Commit 87231b99 authored by Raphael's avatar Raphael
Browse files

WriteToShape added

parent 0440a16a
import xml.dom.minidom
import shapefile
from matplotlib.pyplot import plot, show
from pylab import polyfit, polyval
from tkFileDialog import askopenfilename
......@@ -118,6 +119,26 @@ def dp(points,eps,xs,ys,iu,io):
#-------------------------------------------------------------------------------
def writeToShape(tracks):
w = shapefile.Writer(shapefile.POLYLINE)
w.autoBalance = 1
w.field('ID', 'N', '16')
w.field('Time', 'N', '16')
w.field('Distance', 'N', '16')
w.field('Elevation', 'N', '16')
w.field('Speed', 'N', '16')
w.field('Slope', 'N', '16')
w.field('VerticalSpeed', 'N', '16')
parts = []
for i in xrange(len(tracks)):
track = tracks[i]
for j in xrange(len(track)):
point = track[j]
parts.append([point.latitude, point.longitude])
w.line([parts])
w.record(ID=i,Time=track.time,Distance=track.distance,Elevation=track.elevation,Speed=track.speed,Slope=track.slope,VerticalSpeed=track.vspeed)
w.save('result')
if __name__ == "__main__":
filename = "samples/ol_egestorf.gpx"
dom = xml.dom.minidom.parse(filename)
......@@ -128,3 +149,4 @@ if __name__ == "__main__":
for p in track:
print " %10.6f | %10.6f | %10.2f | %10.2f | %10.2f | %10.2f | %10.2f | %10.2f" % (p.latitude, p.longitude, p.distance, p.segmentlength, p.speed, p.slope, p.vspeed, p.elevation)
  • Du hast zwei ineinander verschachtelte Schleifen. Das macht irgendwie keinen Sinn, da du ja Tupel betrachtest. Außerdem greifst du auf Felder im "track" hinzu, das ist aber nur eine Liste. Ich überarbeite das mal.

  • Ich würde hier sowas machen:

    for (p1, p2) in (tracks[:-1], tracks[1:]):
        # add segment between p1 and p2 to shapefile
        # using the attributes of p2 for the segment
  • Kurz zusammengefasst: Hier scheint es unterschiedliche Interpretationen der Aufgabe zu geben. Ich habe das so verstanden:

    1. GPX einlesen
    2. Mittels DP-Algorithmus Punktmenge reduzieren, z.B. über die Höhe (Point.elevation)
    3. Attribute neu berechnen (Point.recalculate())
    4. Reduzierte Punktmenge im Shapefile speichern.

    Vermutlich habe ich dabei einen Gedankenfehler, weil ich dachte, dass wir viele Linien mit jeweils einem Segment haben wollen. Aber sicher ist gemeint, dass es mehrere Linien gibt, die mehrere Segmente zusammenfasst. Dann hilft mein Ansatz nur teilweise.

Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment