예제 #1
0
파일: testgpx.py 프로젝트: mjb6/track-db
import os
from lib.gpx import Gpx

#gpx = Gpx("ok.gpx")
gpx = Gpx("rr.gpx")
#gpx = Gpx("laufen.gpx")
#gpx = Gpx("test/integration/valid.gpx")
data = gpx.process(force=True)

a = gpx.geo_data

print(data)
예제 #2
0
def add():
    tags = Tag.select(Tag.value).distinct()  #pylint: disable=E1111

    if request.method == "POST":
        # Validate uploaded file
        if 'gpx-file' not in request.files:
            flash("No file uploaded", "error")
            return redirect(request.url)
        gpx_file = request.files['gpx-file']
        if gpx_file.filename == '':
            flash("No file selected", "error")
            return redirect(request.url)
        if not allowed_file(gpx_file.filename):
            flash("Only .gpx files supported!", "error")
            return redirect(request.url)

        # Store gpx file in filesystem
        gpx_filename = secure_filename(gpx_file.filename)
        gpx_filename = "%s_%s.gpx" % (
            gpx_filename[:-4], int(
                datetime.now().timestamp()))  # add timestamp to filename
        gpx_fspath = os.path.join(UPLOAD_BASE_DIR, UPLOAD_DIR, gpx_filename)
        os.makedirs(os.path.dirname(gpx_fspath), exist_ok=True)
        gpx_file.save(gpx_fspath)

        try:
            # Use gpx library to extract meta information from gpx file
            gpx = Gpx(gpx_fspath, True)
            gpx_metadata = gpx.process(
                force=True)  # TODO: improve gpx lib and set force to False

            # Read form values: tags and name
            track_name = request.form.get(
                "name") or "Unnamend activity on %s" % gpx_metadata["date"]
            tags = request.form.getlist('tag-select')
            new_tags = request.form.get("new-tags").replace(" ", "")
            if new_tags != "":
                tags += new_tags.split(",")
            tags.append(gpx_metadata["date"][:4])  # implicit add of the year
            tags = set(tags)  # Remove duplicate tags

            # Create DB ORM objects
            new_track = Track(name=track_name,
                              date=gpx_metadata["date"],
                              path=os.path.join(UPLOAD_DIR, gpx_filename))

            # Read statistics
            new_track_stats = Statistic(
                track=new_track,
                distance_m=gpx_metadata["total_distance"],
                duration_s=gpx_metadata["duration"],
                duration_total_s=gpx_metadata["total_duration"],
                max_speed=gpx_metadata["max_speed"],
                avg_speed=gpx_metadata["avg_speed"],
                elevation_up_m=gpx_metadata["total_ascent"],
                elevation_down_m=gpx_metadata["total_descent"])

        except Exception as e:
            flash("Error during gpx file processing: %s" % e, "error")

            # Clean up
            if 'new_track' in locals():
                new_track.delete_instance()
            if 'new_track_stats' in locals():
                new_track_stats.delete_instance()
            os.remove(
                os.path.join(os.path.dirname(os.path.realpath(__file__)),
                             UPLOAD_BASE_DIR, UPLOAD_DIR, gpx_filename))
            return redirect(request.url)

        # Store objects in DB
        new_track.save()
        new_track_stats.save()

        for tag in tags:
            my_tag = Tag(track=new_track, value=tag)
            my_tag.save()

        flash("Track '%s' added sucessfully." % track_name, "info")
        return redirect(url_for("show"))
    else:
        return render_template("add.html", tags=tags)