aheinecke@5387: # -*- coding: utf-8 -*-
aheinecke@5004: try:
aheinecke@5004:     from osgeo import ogr
aheinecke@5077: except ImportError:
aheinecke@5004:     import ogr
ingo@2853: 
ingo@2853: from importer import Importer
ingo@2853: 
ingo@2853: TABLE_NAME="buildings"
ingo@2853: PATH="Geodaesie/Bauwerke"
ingo@3654: NAME="Buildings"
ingo@2853: 
aheinecke@5387: BUILDING_KINDS= {
aheinecke@5387:         "sonstige" : 0,
aheinecke@5387:         "brücken"  : 1,
aheinecke@5387:         "wehre"    : 2,
aheinecke@5387:         "pegel"    : 3,
aheinecke@5387:         }
ingo@2853: 
ingo@2853: class Building(Importer):
aheinecke@5387:     fieldmap = {
aheinecke@5387:             "^station$"       : "km",
aheinecke@5387:             "^km$"            : "km",
aheinecke@5387:             "^wsv-km$"        : "km",
aheinecke@5387:             "^z$"             : "z",
aheinecke@5387:             "^H[oeö]{0,2}he$" : "z",
aheinecke@5387:             "^m+NHN$"         : "z",
aheinecke@5387:             "^KWNAAM$"        : "description",
aheinecke@5387:             "^Name$"          : "description"
aheinecke@5387:         }
ingo@2853: 
ingo@2853:     def getPath(self, base):
ingo@2853:         return "%s/%s" % (base, PATH)
ingo@2853: 
ingo@2853: 
ingo@2853:     def getTablename(self):
ingo@2853:         return TABLE_NAME
ingo@2853: 
ingo@2853: 
ingo@3654:     def getName(self):
ingo@3654:         return NAME
ingo@3654: 
ingo@3654: 
ingo@2853:     def isGeometryValid(self, geomType):
ingo@2853:         return geomType == 2
ingo@2853: 
ingo@2853: 
ingo@2853:     def isShapeRelevant(self, name, path):
aheinecke@5556:         return "buhnen.shp" not in path.lower()
aheinecke@5387: 
aheinecke@5387:     def getKind(self, feat, path):
aheinecke@5387:         # First try to resolve it with the filename
aheinecke@5387:         for fname in ["brücke.shp", "bruecke.shp",
aheinecke@5387:                      "brücken.shp", "bruecken.shp"]:
aheinecke@5387:             if path.lower().endswith(fname):
aheinecke@5387:                 return BUILDING_KINDS["brücken"]
aheinecke@5387:         for fname in ["wehr.shp", "wehre.shp"]:
aheinecke@5387:             if path.lower().endswith(fname):
aheinecke@5387:                 return BUILDING_KINDS["wehre"]
aheinecke@5387:         for fname in ["pegel.shp"]:
aheinecke@5387:             if path.lower().endswith(fname):
aheinecke@5387:                 return BUILDING_KINDS["pegel"]
aheinecke@5387: 
aheinecke@5387:         # Now it gets ugly when we search all attributes
aheinecke@5401:         ret = self.searchValue(feat, "^br[ueü]{0,2}cke[n]{0,1}$")
aheinecke@5401:         if ret:
aheinecke@5401:             self.handled(ret)
aheinecke@5387:             return BUILDING_KINDS["brücken"]
aheinecke@5401:         ret = self.searchValue(feat, "^wehr[e]{0,1}$")
aheinecke@5401:         if ret:
aheinecke@5401:             self.handled(ret)
aheinecke@5387:             return BUILDING_KINDS["wehre"]
aheinecke@5387: 
aheinecke@5387:         return BUILDING_KINDS["sonstige"]
ingo@2853: 
ingo@2853: 
ingo@2853:     def createNewFeature(self, featureDef, feat, **args):
aheinecke@5387:         newFeat  = ogr.Feature(featureDef)
aheinecke@5387:         geometry = feat.GetGeometryRef()
aheinecke@5387:         geometry.SetCoordinateDimension(2)
aheinecke@5387:         newFeat.SetGeometry(geometry)
ingo@2853: 
aheinecke@5387:         self.copyFields(feat, newFeat, self.fieldmap)
ingo@2853: 
aheinecke@5387:         newFeat.SetField("kind_id", self.getKind(feat, args['path']))
aheinecke@5387:         newFeat.SetField("name", args["name"])
aheinecke@5387: 
aheinecke@5387:         newFeat.SetField("river_id", self.river_id)
ingo@2853: 
ingo@2853:         return newFeat
ingo@2853: