Guys, FoxtrotGPS now saves its tracks as GPX rather than its own private log format. Thats a good thing, GPX format is well know.
But it makes the convert2gpx script a bit useless. I submit a few logs to OpenStreetMap and quite liked the old convert2gpx, it made the process just a touch quicker. So I wrote a small python script to do the same thing but starting with a gpx log. It also sets a few default settings in the resulting OSM file. Like Markus's original, it depends on gpsbabel but otherwise should work with most standard python installs. Its attached if you are interested. Any license that works for you ... David
#! /usr/bin/python # Simple script to convert GPX logs to OpenSteetMap for easy importation. # Sets some basic defaults to speed up the process a bit. # Author David Bannon but borrows heavily from a perl script by Markus Bauer import sys, os, datetime, subprocess import argparse TagHighway = "\t\t<tag k='highway' v='road' />\n" TagSurface = "\t\t<tag k='surface' v='unpaved' />\n" TagTracktype = "\t\t<tag k='tracktype' v='grade3' />\n" Tag4wd_only = "\t\t<tag k='4wd_only' v='yes' />\n" TagLanes = "\t\t<tag k='lanes' v='1' />\n" TagSource = "\t\t<tag k='source' v='survey' />\n" TagName = "\t\t<tag k='name' v='no name yet' />\n" HDOP = "10" # hdop is a measure of how accurate GPS might be, smaller the better. # Markus used 3.1 but I found that walking tracks with overhead trees # can easily generate tracks in the 6 range. # http://wiki.openstreetmap.org/wiki/Converting_NMEA_to_GPX suggests 10 # If you are really careless you can describe HDOP as a multiplier to the # intrinsic error of the full hardware chain, typically 5 to 8 metres. # So, again, very careless, HDOP of 10 means an uncertainty of 50 to 80 metres. def Header(): return "<?xml version='1.0' encoding='UTF-8'?>\n<osm version='0.5' generator='JOSM'>\n"; def TrackTags(): # Useful for all unsealed roads return TagName + TagHighway + TagTracktype + TagSurface + TagLanes + TagSource def RoadTags(): # default tag set return TagName + TagHighway + TagSource def Footer(): return "\t</way> \n</osm> \n"; def WriteOSM(InFile): Count = 1; OF =open(InFile+'.osm', 'w') OF.write(Header()) IF = open(InFile + '.csv') for Line in IF: Pos = Line.split(', ') Node = "\t<node id='-" + str(Count) + "' visible='true' lat='" + Pos[0] + "' lon='" + Pos[1] + "' />\n" OF.write(Node) Count = Count + 1 OF.write("\t<way id='-" + str(Count) + "' action='modify' visible='true'>\n") for WLine in range(1, Count): Way = "\t\t<nd ref='-" + str(WLine) + "' />\n" OF.write(Way); if args.TRACK: OF.write(TrackTags()) else: OF.write(RoadTags()) IF.close OF.write(Footer()) OF.close os.unlink(InFile + '.csv') return Count def HowManyPoints(FileName): Count = 0 BadCount = 0 IF = open(FileName) for Line in IF: Count = Count + Line.count("<hdop>") # careful, this is case sensitive ! # print "CNT", Count, Line HDOPs = Line.split('<hdop>') for i in HDOPs: try: # print "testing ", i, i[:3] if 10.0 < float(i[:i.find('<')]): BadCount = BadCount+1 except ValueError: continue IF.close return Count, BadCount # -------- ------------------------ # -------- Main Function ---------- # --------------------------------- # use = " %prog [ option ]." parser = argparse.ArgumentParser(description='convert gpx logs to OSM files') parser.add_argument('-v', dest='VERBOSE', action='store_true', help='be verbose') parser.add_argument('-t', dest='TRACK', action='store_true', help='treat it as a track') parser.add_argument('FileList', metavar='gpxfile', nargs='+', help='some gpx file') args = parser.parse_args() for Infile in args.FileList: Base,ext = os.path.splitext(Infile) Points, BadPoints = HowManyPoints(Infile) if BadPoints*2 > Points: print "Warning,", Infile, " has excessive points with poor HDOP" if args.VERBOSE: print Infile, Points, "points logged", BadPoints, "with excessive HDOP", Cmd = 'gpsbabel', '-i', 'gpx', '-f', Infile, '-x', 'simplify,error=0.003k', '-x', 'discard,hdop='+HDOP, '-o', 'csv', '-F', Base+'.csv' try: Pipe = subprocess.Popen(Cmd, stdout=subprocess.PIPE) except OSError: print "Looks like you do not have gpsbabel installed, or maybe not in your path." print "Please make gpsbabel available and try again." sys.exit() Lines = Pipe.communicate()[0] if len(Lines) > 0: print 'Something bad happened, beats me !' print Lines sys.exit() if args.VERBOSE: print WriteOSM(Base), print " nodes saved" else: WriteOSM(Base)
_______________________________________________ This message is sent to you from FOSS-GPS@lists.osgeo.org mailing list. Visit http://lists.osgeo.org/mailman/listinfo/foss-gps to manage your subscription For more information, check http://wiki.osgeo.org/wiki/FOSS-GPS