summaryrefslogtreecommitdiff
path: root/chimere/utils.py
diff options
context:
space:
mode:
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
commitce77d57ba181ad9e0b6096be24c106575359d49c (patch)
tree28e88c0ff40615e0bd500d6c7f40ab0b0e0f64c8 /chimere/utils.py
parentbef51caadd69a5d09554b0312640976d150d86bc (diff)
downloadChimè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.py57
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: