diff options
Diffstat (limited to 'chimere/main/models.py')
-rw-r--r-- | chimere/main/models.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/chimere/main/models.py b/chimere/main/models.py index 3897fe9..5ab45f6 100644 --- a/chimere/main/models.py +++ b/chimere/main/models.py @@ -20,7 +20,12 @@ """ Models description """ +import os, string +import lxml.etree as ElementTree from datetime import datetime, timedelta +from subprocess import Popen, PIPE + +from django.core.files import File from django.utils.translation import ugettext_lazy as _ @@ -317,6 +322,46 @@ class RouteFile(models.Model): def __unicode__(self): return self.name + def process(self): + if self.simplified_file: + return + input_name = settings.MEDIA_ROOT + self.raw_file.name + output_name = settings.MEDIA_ROOT + self.raw_file.name[:-4] + \ + "_simplified" + ".gpx" + cli_args = [settings.GPSBABEL, '-i'] + if self.file_type == 'K': + cli_args.append('kml') + elif self.file_type == 'G': + cli_args.append('gpx') + cli_args += ['-f', input_name, '-x', settings.GPSBABEL_OPTIONS, + '-o', 'gpx', '-F', output_name] + p = Popen(cli_args, stderr=PIPE) + p.wait() + if p.returncode: + print p.stderr.read() + #logger.error(p.stderr.read()) + else: + self.simplified_file = File(open(output_name)) + self.save() + os.remove(output_name) + + @property + def route(self): + if not self.simplified_file: + return + mainNS = string.Template("{http://www.topografix.com/GPX/1/0}$tag") + trkpt = mainNS.substitute(tag="trkpt") + file_name = settings.MEDIA_ROOT + self.simplified_file.name + et = ElementTree.parse(open(file_name)) + pts = [] + for pt in et.findall("//" + trkpt): + pts.append((pt.get("lon"), pt.get("lat"))) + geojson_tpl = u'{"type":"Feature", "geometry":{ "type": "LineString", '\ + '"coordinates":[%s]}}' + wkt_tpl = u'LINESTRING(%s)' + return wkt_tpl % u','.join([u'%s %s' % (pt[0], pt[1]) \ + for pt in pts]) + class Route(models.Model): '''Route on the map ''' @@ -385,6 +430,7 @@ class Route(models.Model): return u'{"type":"Feature", "geometry":%(geometry)s, '\ u'"properties":{"pk": %(id)d, "name": "%(name)s", '\ u'"color":"%(color)s"}}' % attributes + def getTinyUrl(self): parameters = 'current_feature=%d&checked_categories=%s' % (self.id, self.categories[0].id) |