Skip to content

Instantly share code, notes, and snippets.

@chomy
Created March 24, 2017 16:04
Show Gist options
  • Save chomy/7ef54e1acd510d71163995dfc3d51762 to your computer and use it in GitHub Desktop.
Save chomy/7ef54e1acd510d71163995dfc3d51762 to your computer and use it in GitHub Desktop.
calculate distance from GPX file
#!/usr/bin/python
from osgeo import ogr
from osgeo import osr
import xml.sax
import xml.sax.handler
import sys
class Handler(xml.sax.handler.ContentHandler):
def __init__(self):
self.result = []
def startElement(self, name, attrs):
self.last_element = name
if(name=='trkpt'):
self.pos = attrs
def characters(self, content):
if(self.last_element == 'ele'):
self.ele = content
elif(self.last_element == 'time'):
self.time = content
def endElement(self, name):
if(name=='trkpt'):
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(float(self.pos['lon']), float(self.pos['lat']))
self.result.append({'time':self.time,'pos': point})
elif(name=='gpx'):
self.result = tuple(self.result)
def read_data(filename=sys.stdin):
handler = Handler()
parser = xml.sax.make_parser()
parser.setContentHandler(handler)
parser.parse(filename)
return handler.result
def main(args):
if(len(args) > 1):
data = read_data(args[1])
else:
data = read_data(sys.stdin)
source = osr.SpatialReference()
source.ImportFromEPSG(4326)
target = osr.SpatialReference()
target.ImportFromEPSG(6677)
line = ogr.Geometry(ogr.wkbLineString)
ct = osr.CreateCoordinateTransformation(source,target)
for i in data:
p = i['pos']
p.Transform(ct)
line.AddPoint(p.GetX(), p.GetY())
print line.Length()
if(__name__=='__main__'):
main(sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment