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: