Mercurial > dive4elements > river
diff flys-backend/contrib/shpimporter/boundaries.py @ 5379:61bf64b102bc mapgenfix
Merge with default branch
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 22 Mar 2013 11:25:54 +0100 |
parents | 71a24278322c |
children | 4e166c514940 |
line wrap: on
line diff
--- a/flys-backend/contrib/shpimporter/boundaries.py Wed Mar 06 14:14:15 2013 +0100 +++ b/flys-backend/contrib/shpimporter/boundaries.py Fri Mar 22 11:25:54 2013 +0100 @@ -1,10 +1,14 @@ -import ogr +try: + from osgeo import ogr +except ImportError: + import ogr from importer import Importer +import utils TABLE_NAME="hydr_boundaries" TABLE_NAME_POLY="hydr_boundaries_poly" -PATH="Hydrologie/Hydr.Grenzen/Linien" +PATH="Hydrologie/Hydr.Grenzen" NAME="Hydr. Boundaries" @@ -13,29 +17,77 @@ def getPath(self, base): return "%s/%s" % (base, PATH) - def getTablename(self): return TABLE_NAME - def getName(self): return NAME - def isGeometryValid(self, geomType): - return geomType == 2 - + return geomType in [ogr.wkbLineString, + ogr.wkbLineString25D, + ogr.wkbMultiLineString25D, + ogr.wkbMultiLineString] def isShapeRelevant(self, name, path): - return True - + shp = ogr.Open(path) + if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \ + self.getKind(path) > 0: + return True + else: + return False def getKind(self, path): - if path.find("BfG") > 0: + if "linien/bfg" in path.lower(): return 1 + elif "linien/land" in path.lower(): + return 2 + elif "/sonstige/" in path.lower(): + return 3 else: - return 2 + return 0 + def createNewFeature(self, featureDef, feat, **args): + kind = self.getKind(args['path']) + + newFeat = ogr.Feature(featureDef) + geometry = feat.GetGeometryRef() + geometry.SetCoordinateDimension(3) + + newFeat.SetGeometry(geometry) + newFeat.SetField("name", args['name']) + newFeat.SetField("kind", kind) + if self.IsFieldSet(feat, "SECTIE"): + newFeat.SetField("sectie", feat.GetField("SECTIE")) + + if self.IsFieldSet(feat, "SOBEK"): + newFeat.SetField("sobek", feat.GetField("SOBEK")) + + if self.IsFieldSet(feat, "river_id"): + newFeat.SetField("river_id", feat.GetField("river_id")) + else: + newFeat.SetField("river_id", self.river_id) + + return utils.convertToMultiLine(newFeat) + +class HydrBoundaryPoly(HydrBoundary): + + def getTablename(self): + return TABLE_NAME_POLY + + def getName(self): + return "%s (Polygons)" % NAME + + def isGeometryValid(self, geomType): + return geomType == ogr.wkbPolygon or geomType == ogr.wkbMultiPolygon + + def isShapeRelevant(self, name, path): + shp = ogr.Open(path) + if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \ + self.getKind(path) > 0: + return True + else: + return False def createNewFeature(self, featureDef, feat, **args): kind = self.getKind(args['path']) @@ -48,44 +100,17 @@ newFeat.SetField("name", args['name']) newFeat.SetField("kind", kind) - if self.IsFieldSet(feat, "river_id"): - newFeat.SetField("river_id", feat.GetField("river_id")) - else: - newFeat.SetField("river_id", self.river_id) - - return newFeat - - - -class HydrBoundaryPoly(HydrBoundary): - - def getTablename(self): - return TABLE_NAME_POLY - + if self.IsFieldSet(feat, "SECTIE"): + newFeat.SetField("sectie", feat.GetField("SECTIE")) - def getName(self): - return "%s (Polygons)" % NAME - - - def isGeometryValid(self, geomType): - return geomType == 3 or geomType == 6 - + if self.IsFieldSet(feat, "SOBEK"): + newFeat.SetField("sobek", feat.GetField("SOBEK")) - def createNewFeature(self, featureDef, feat, **args): - kind = self.getKind(args['path']) - - newFeat = ogr.Feature(featureDef) - geometry = feat.GetGeometryRef() - geometry.SetCoordinateDimension(2) - - newFeat.SetGeometry(geometry) - newFeat.SetField("name", args['name']) - newFeat.SetField("kind", kind) if self.IsFieldSet(feat, "river_id"): newFeat.SetField("river_id", feat.GetField("river_id")) else: newFeat.SetField("river_id", self.river_id) - return newFeat + return utils.convertToMultiPolygon(newFeat)