Mercurial > dive4elements > river
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