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: