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) | 
