aheinecke@5004: try: aheinecke@5004: from osgeo import ogr aheinecke@5077: except ImportError: aheinecke@5004: import ogr ingo@2861: ingo@2861: from importer import Importer aheinecke@5182: import utils ingo@2861: ingo@2861: TABLE_NAME="hydr_boundaries" ingo@2861: TABLE_NAME_POLY="hydr_boundaries_poly" aheinecke@4952: PATH="Hydrologie/Hydr.Grenzen" ingo@3654: NAME="Hydr. Boundaries" ingo@2861: ingo@2861: ingo@2861: class HydrBoundary(Importer): ingo@2861: ingo@2861: def getPath(self, base): ingo@2861: return "%s/%s" % (base, PATH) ingo@2861: ingo@2861: def getTablename(self): ingo@2861: return TABLE_NAME ingo@2861: ingo@3654: def getName(self): ingo@3654: return NAME ingo@3654: ingo@2861: def isGeometryValid(self, geomType): aheinecke@5182: return geomType in [ogr.wkbLineString, aheinecke@5182: ogr.wkbLineString25D, aheinecke@5182: ogr.wkbMultiLineString25D, aheinecke@5182: ogr.wkbMultiLineString] ingo@2861: ingo@2861: def isShapeRelevant(self, name, path): aheinecke@4952: shp = ogr.Open(path) aheinecke@4952: if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \ aheinecke@5511: self.getKind(path) > 0 and not "talaue" in path.lower(): aheinecke@4952: return True aheinecke@4952: else: aheinecke@4952: return False ingo@2861: ingo@2861: def getKind(self, path): aheinecke@4952: if "linien/bfg" in path.lower(): ingo@2861: return 1 aheinecke@4952: elif "linien/land" in path.lower(): aheinecke@4952: return 2 aheinecke@4952: elif "/sonstige/" in path.lower(): aheinecke@4952: return 3 ingo@2861: else: aheinecke@4952: return 0 ingo@2861: aheinecke@4952: def createNewFeature(self, featureDef, feat, **args): aheinecke@4952: kind = self.getKind(args['path']) aheinecke@4952: aheinecke@4952: newFeat = ogr.Feature(featureDef) aheinecke@4952: geometry = feat.GetGeometryRef() aheinecke@5182: geometry.SetCoordinateDimension(3) aheinecke@4952: aheinecke@4952: newFeat.SetGeometry(geometry) aheinecke@4952: newFeat.SetField("name", args['name']) aheinecke@4952: newFeat.SetField("kind", kind) aheinecke@4952: if self.IsFieldSet(feat, "SECTIE"): aheinecke@4952: newFeat.SetField("sectie", feat.GetField("SECTIE")) aheinecke@4952: tom@5750: if self.IsFieldSet(feat, "STROVOER"): tom@5750: newFeat.SetField("sobek", feat.GetField("STROVOER")) aheinecke@4952: aheinecke@4952: if self.IsFieldSet(feat, "river_id"): aheinecke@4952: newFeat.SetField("river_id", feat.GetField("river_id")) aheinecke@4952: else: aheinecke@4952: newFeat.SetField("river_id", self.river_id) aheinecke@4952: aheinecke@5182: return utils.convertToMultiLine(newFeat) aheinecke@4952: aheinecke@4952: class HydrBoundaryPoly(HydrBoundary): aheinecke@4952: aheinecke@4952: def getTablename(self): aheinecke@4952: return TABLE_NAME_POLY aheinecke@4952: aheinecke@4952: def getName(self): aheinecke@4952: return "%s (Polygons)" % NAME aheinecke@4952: aheinecke@4952: def isGeometryValid(self, geomType): aheinecke@4952: return geomType == ogr.wkbPolygon or geomType == ogr.wkbMultiPolygon aheinecke@4952: aheinecke@4952: def isShapeRelevant(self, name, path): aheinecke@4952: shp = ogr.Open(path) aheinecke@4952: if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \ aheinecke@4952: self.getKind(path) > 0: aheinecke@4952: return True aheinecke@4952: else: aheinecke@4952: return False ingo@2861: ingo@2861: def createNewFeature(self, featureDef, feat, **args): ingo@2861: kind = self.getKind(args['path']) ingo@2861: ingo@2861: newFeat = ogr.Feature(featureDef) ingo@2861: geometry = feat.GetGeometryRef() ingo@2861: geometry.SetCoordinateDimension(2) ingo@2861: ingo@2861: newFeat.SetGeometry(geometry) ingo@2861: newFeat.SetField("name", args['name']) ingo@2861: newFeat.SetField("kind", kind) ingo@2861: aheinecke@4952: if self.IsFieldSet(feat, "SECTIE"): aheinecke@4952: newFeat.SetField("sectie", feat.GetField("SECTIE")) ingo@2861: tom@5851: if self.IsFieldSet(feat, "STROVOER"): tom@5851: newFeat.SetField("sobek", feat.GetField("STROVOER")) ingo@2861: ingo@2861: if self.IsFieldSet(feat, "river_id"): ingo@2861: newFeat.SetField("river_id", feat.GetField("river_id")) ingo@2861: else: ingo@2861: newFeat.SetField("river_id", self.river_id) ingo@2861: tom@5302: return utils.convertToMultiPolygon(newFeat) ingo@2861: