summaryrefslogtreecommitdiff
path: root/chimere/main/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/main/models.py')
-rw-r--r--chimere/main/models.py46
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)