diff flys-backend/contrib/shpimporter/uesg.py @ 2853:bd9e76e0b55d

Improved the python shapefile importer. flys-backend/trunk@4313 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 27 Apr 2012 06:39:12 +0000
parents 5a654f2e35bc
children b0132e1b9719
line wrap: on
line diff
--- a/flys-backend/contrib/shpimporter/uesg.py	Thu Apr 26 13:01:02 2012 +0000
+++ b/flys-backend/contrib/shpimporter/uesg.py	Fri Apr 27 06:39:12 2012 +0000
@@ -1,11 +1,20 @@
 import ogr
 
+from importer import Importer
+
+
 TABLE_NAME="floodmaps"
+PATH="Hydrologie/UeSG/Berechnung"
 
-class UESG:
 
-    def __init__(self, dbconn):
-        self.dbconn = dbconn
+class UESG(Importer):
+
+    def getPath(self, base):
+        return "%s/%s" % (base, PATH)
+
+
+    def getTablename(self):
+        return TABLE_NAME
 
 
     def isGeometryValid(self, geomType):
@@ -35,75 +44,16 @@
         return kind
 
 
-    def walkOverShapes(self, shape):
-        (name, path) = shape
-        shp = ogr.Open(shape[1])
-        if shp is None:
-            print "Shapefile '%s' could not be opened!" % path
-            return
-
-        print "Opened shapefile '%s'" % path
-        srcLayer = shp.GetLayerByName(name)
-
-        if srcLayer is None:
-            print "Layer '%s' was not found!" % name
-            return
-
-        return self.shape2Database(srcLayer, name, self.getKind(path))
-
-
-    def shape2Database(self, srcLayer, name, kind):
-        table = ogr.Open(self.dbconn)
-        destLayer = table.GetLayerByName(TABLE_NAME)
-
-        if srcLayer is None:
-            print "Shapefile is None!"
-            return -1
-
-        if destLayer is None:
-            print "No destination layer given!"
-            return -1
+    def createNewFeature(self, featureDef, feat, **args):
+        kind  = self.getKind(args['path'])
 
-        count = srcLayer.GetFeatureCount()
-        print "Try to add %i features to database." % count
-
-        srcLayer.ResetReading()
-
-        geomType = -1
-
-        featureDef = destLayer.GetLayerDefn()
-
-        for feat in srcLayer:
-            geom = feat.GetGeometryRef()
-            geomType = geom.GetGeometryType()
-
-            newFeat = self.createNewFeature(featureDef, feat)
-            newFeat.SetField("kind", kind)
-            newFeat.SetField("name", name)
-
-            if self.isGeometryValid(geomType):
-                res = destLayer.CreateFeature(newFeat)
-                if res is None or res > 0:
-                    print "Error while inserting feature: %r" % res
-            else:
-                print "Geometry type not supported: %i" % geomType
-
-        try:
-            destLayer.CommitTransaction()
-        except e:
-            print "Exception while committing transaction."
-
-        return geomType
-
-
-    def createNewFeature(self, featureDef, feat):
         newFeat = ogr.Feature(featureDef)
         newFeat.SetGeometry(feat.GetGeometryRef())
 
-        if feat.IsFieldSet("river_id"):
-            riverId = feat.GetField("river_id")
+        if self.IsFieldSet(feat, "river_id"):
+            riverId = feat.GetField(feat)
         else:
-            riverId = 1
+            riverId = self.river_id
 
         if feat.IsFieldSet("diff"):
             diff = feat.GetFieldAsDouble("diff")
@@ -132,6 +82,8 @@
         newFeat.SetField("count", count)
         newFeat.SetField("area", area)
         newFeat.SetField("perimeter", perimeter)
+        newFeat.SetField("kind", kind)
+        newFeat.SetField("name", args['name'])
 
         return newFeat
 

http://dive4elements.wald.intevation.org