Für unsere Norwegenferien wollte ich das Tomtom-OV2 über das GPX-Format in die POI-Datenbank von FoxtrottGPS (Fork von TangoGPS) importieren.

Die Campingplätze habe ich von http://www.norwegen-reise.com ins Tomtom-OV2 Format exportiert.

Anschliessend habe ich dieses via POI-Editor in das GPX Format konvertiert.

Nach dem Kopieren dieser GPX-Datei auf mein Openmoko Freerunner (mit SHR-Unstable) habe ich das Python-Skript von splitbrain.org angepasst:

#!/usr/bin/env python

from xml.etree.ElementTree import parse
import sys, re, hashlib
from sqlite3 import dbapi2 as sqlite
import htmlentitydefs

if len(sys.argv) <3:
  print "usage:"
  print "./pocket2tango gpxfile poidbfile"
  print "  gpxfile: a file in the geocaching.com gpx pocket query file format, containing cache information"
  print "  poidbfile: usually poi.db, or any other wellformed tangogps poi sqlite database file"
  sys.exit(1)

def unicode2html(str):
  """translate any unicode or upper ascii char by its html entity"""
  ret=""
  for char in str:
    if ord(char) > 127:
      try:
        ret=ret+"&"+htmlentitydefs.codepoint2name[ord(char)]+";"
      except:
        ret=ret+'?'
    else:
      ret=ret+char
  return ret

def escapeQuote(str):
  """escapes single quotes by double single quote, sqlite style"""
  return str.replace('\'', '\'\'');

gpx = open(sys.argv[1])
xml = parse(gpx).getroot()

con = sqlite.connect(sys.argv[2])
cur = con.cursor()

for wpt in xml:
  if 1==1:
    data = {} # dictionary holding all relevant data to be written into database
    # transfer lat, lon into dictionary directly
    print wpt
    for item in wpt.items():
      data[item[0]]=item[1]
      print item[0]
    # transfer all text information from the groundspeak tags into dictionary
    for sub in wpt:
      if sub.tag=="name":
        data['gcid']=sub.text
    # build the query
    idmd5 = hashlib.md5(data['lon']+data['lat']).hexdigest()[0:18] #not the format tangogps uses, but what's an idmd5 anyway?
    summary = escapeQuote(data['gcid'])
    query = "insert into poi (idmd5, lon, lat, keywords, visibility, cat, subcat, price_range, extended_open, desc) values ('"+idmd5+"', '"+data['lon']+"', '"+data['lat']+"', '"+data['gcid']+"', 0.0, 0.0, 0
.0, 3.0, 0.0, '"+summary+"')" #tangogps crashes if some of these remain NULL. whatever.
  cur.execute(query)
con.commit()


Mit dem folgenden Befehl hat der Import nach der Korrektur der gpx-Datei (ungültige Unicode-Zeichen entfernt) geklappt:

./pocket2tango.py 1311272501-norwegen-reise-com-camping-converted.gpx ~/.foxtrotgps/poi.db