diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-04 19:25:01 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-04 19:25:01 +0200 | 
| commit | ce77d57ba181ad9e0b6096be24c106575359d49c (patch) | |
| tree | 28e88c0ff40615e0bd500d6c7f40ab0b0e0f64c8 /chimere/utils.py | |
| parent | bef51caadd69a5d09554b0312640976d150d86bc (diff) | |
| download | Chimère-ce77d57ba181ad9e0b6096be24c106575359d49c.tar.bz2 Chimère-ce77d57ba181ad9e0b6096be24c106575359d49c.zip | |
Import: split polyline into lines to import routes
Diffstat (limited to 'chimere/utils.py')
| -rw-r--r-- | chimere/utils.py | 57 | 
1 files changed, 21 insertions, 36 deletions
| diff --git a/chimere/utils.py b/chimere/utils.py index 38f060e..d61ad19 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -35,6 +35,7 @@ from lxml import etree  from django.conf import settings  from django.contrib.gis.gdal import DataSource, OGRGeomType, check_err +from django.contrib.gis.geos import GEOSGeometry  from django.core.exceptions import ObjectDoesNotExist  from django.shortcuts import render_to_response  from django.utils.translation import ugettext_lazy as _ @@ -78,7 +79,11 @@ class ImportManager:                      return item, None, None                  for k in values:                      setattr(item, k, values[k]) -                item.save() +                try: +                    item.save() +                except TypeError: +                    # error on data source +                    return None, False, False                  updated = True              except ObjectDoesNotExist:                  pass @@ -86,7 +91,11 @@ class ImportManager:              values.update({                  'import_source':self.importer_instance.source})              values['status'] = 'I' -            item = cls.objects.create(**values) +            try: +                item = cls.objects.create(**values) +            except TypeError: +                # error on data source +                return None, False, False              created = True          if import_key:              item.set_key(self.importer_instance.importer_type, @@ -333,44 +342,20 @@ class ShapefileManager(ImportManager):                                 name.decode(settings.CHIMERE_SHAPEFILE_ENCODING))                      except:                          continue -            geom = feat.geom.wkt -            dct = {geom_key:'SRID=%s;%s' % (srid, feat.geom.wkt), +            geoms = [feat.geom.wkt] +            if feat.geom.geom_type == 'MultiLineString': +                geoms = [geom.wkt for geom in feat.geom] +            import_key = feat.get(id_name) if id_name and len(geoms) == 1 else '' +            for geom in geoms: +                dct = {geom_key:'SRID=%s;%s' % (srid, geom),                     'name':name                    } -            import_key = feat.get(id_name) if id_name else '' -            item, updated, created = self.create_or_update_item( +                item, updated, created = self.create_or_update_item(                                      geom_cls, dct, import_key) -            if updated: -                updated_item += 1 -            if created: -                new_item += 1 - -            """ -            m = None -            if id_name: -                c_id = feat.get(id_name) -                dct_import = { -                    'import_key__icontains':'%s:%s;' % (id_name, c_id), -                    'import_source':self.importer_instance.source} -                try: -                    m = Marker.objects.get(**dct_import) -                    for k in dct: -                        setattr(m, k, dct[k]) -                    m.save() +                if updated:                      updated_item += 1 -                except ObjectDoesNotExist: -                    m = None -                    dct.update({ -                        'import_source':self.importer_instance.source}) -            if not m: -                dct['status'] = 'I' -                m = Marker.objects.create(**dct) -                new_item += 1 -            if id_name: -                m.set_key(id_name, c_id) -            m.categories.clear() -            for cat in self.importer_instance.categories.all(): -                m.categories.add(cat)""" +                if created: +                    new_item += 1          # clean up          tmpdirs = set()          for src in sources: | 
