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