Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #32 - 20 czerwiec 2018, 18:00, Białystok
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: html -> gpx potrzebuję przenieść dane GPS z pliku html do pliku gpx  (Przeczytany 344 razy)
« : 20:07 25/01/18 »
tzatonski Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 1


Hejka,

Potrzebuję przniesc dane z pliku html do pliku gpx
W pliku html zapisany jest ślad GPS, który chcę wyciągnąć.

Znalazłem do tego w necie program (ponizej) , ale mi nie bangla.

Używam OSX Python Launcher 3.6.3

Czy ktoś umie mi pomóc?


#!/usr/bin/python
# coding=UTF-8

"""
Convert html saved from iSki tracker website to gpx format to import
any application or service such QLandkarteGT, Endomondo, etc.

Need to install the following packages:

$ pip install pytz
$ pip install tzlocal

Usage:

$ iski-convert.py <input-file>

Background:

There is no export function on iSki tracker website, but the html source
contains the date, coordinates, profile in different format. This script
converts it to gpx that is a common GPS data format for software
applications.

The script use the locale timezone and convert the dates to UTC, because
the GPS format defines date in Coordinated Universal Time (UTC) using
ISO 8601 format. The Z at the end of the dates is the zone designator for
the zero UTC offset.
"""

import sys
import re
from datetime import datetime, timedelta, date, time

import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal

import locale

def parsecoordinates(line):
   # new google.maps.LatLng(46.68102, 13.89978)
   coordinates = []
   pattern = re.compile(r"LatLng\((\d+\.\d+),\ (\d+\.\d+)\)")
   for m in re.finditer(pattern, line):   
      pair = (float(m.group(1)), float(m.group(2)))
      coordinates.append(pair)
   return coordinates

def parseprofile(line, basedate):
   # {"x":46211799.99995232,"y":1435.0,"chartDataIndex":0}
   profile = []
   pattern = re.compile(r"\"x\"\Smutny\d+\.\d+)\,\"y\"\Smutny\d+\.\d+)")
   for m in re.finditer(pattern, line):   
      pair = (toisoformat(float(m.group(1)), basedate), float(m.group(2)))
      profile.append(pair)
   return profile

def toisoformat(f, basedate):
   local_tz = get_localzone()
   d = datetime(basedate.year, basedate.month, basedate.day, tzinfo = local_tz)
   d = d + timedelta(milliseconds = f)
   d = d.astimezone(pytz.utc)
   return d.strftime("%Y-%m-%dT%H:%M:%SZ")

def parsebasedate(line):
   d = re.search(r"\d{2}\s\w+\s", line).group(0)
   d = str(d) + " " + str(datetime.now().year)
   loc = locale.getlocale()
   locale.setlocale(locale.LC_TIME, "en_GB.utf8")
   basedate = datetime.strptime(d, "%d %b %Y")
   locale.setlocale(locale.LC_TIME, loc)
   return basedate

if len(sys.argv) != 2:
   print "Usage: iski-convert.py <input-file>"
   exit()

f = open(sys.argv[1], 'r')
state = None
for line in f:
   if state == "DAY":
      basedate = parsebasedate(line)      
      state = None      
   if """<span class="caption">DAY</span>""" in line:
      state = "DAY"
   if line.strip().find("new google.maps.LatLng(") >= 0:
      coordinates = parsecoordinates(line.strip())
   if line.strip().find("data: ") >= 0:
      profile = parseprofile(line.strip(), basedate)

print """<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="byHand" version="1.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
   <trk>
      <trkseg>"""

for coordinate,elevation in zip(coordinates, profile):
   print """
         <trkpt lon="%f" lat="%f">
            <ele>%f</ele>
            <time>%s</time>
         </trkpt>""" % (coordinate[1], coordinate[0], elevation[1], elevation[0])

print """
      </trkseg>
   </trk>
</gpx>"""
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot