aheinecke@4875: # -*- coding: utf-8 -*- aheinecke@4875: import os aheinecke@4875: aheinecke@4875: try: aheinecke@4875: from osgeo import ogr aheinecke@4875: except ImportErrror: aheinecke@4875: import ogr ingo@2862: ingo@2862: from importer import Importer aheinecke@4875: import utils ingo@2862: ingo@2862: PATH="Hydrologie/HW-Schutzanlagen" ingo@3654: NAME="HWS" ingo@2862: aheinecke@4875: # Keep in sync with hws_kinds table: aheinecke@4875: HWS_KIND = { aheinecke@4875: "Durchlass" : 1, aheinecke@4875: "Damm" : 2, aheinecke@4875: "Deich" : 2, aheinecke@4875: "Graben" : 3, aheinecke@4875: } ingo@2862: aheinecke@4875: # Keep in sync with fed_states table: aheinecke@4875: FED_STATES = { aheinecke@4875: "Bayern" : 1, aheinecke@4875: "Hessen" : 2, aheinecke@4875: "Niedersachsen" : 3, aheinecke@4875: "Nordrhein-Westfalen" : 4, aheinecke@4875: "Rheinland-Pfalz" : 5, aheinecke@4875: "Saarland" : 6, aheinecke@4875: "Schleswig-Holstein" : 7, aheinecke@4875: "Brandenburg" : 8, aheinecke@4875: "Mecklenburg-Vorpommern" : 9, aheinecke@4875: "Thüringen" : 10, aheinecke@4875: "Baden-Württemberg" : 11, aheinecke@4875: "Sachsen-Anhalt" : 12, aheinecke@4875: "Sachsen" : 13, aheinecke@4875: "Berlin" : 14, aheinecke@4875: "Bremen" : 15, aheinecke@4875: "Hamburg" : 16, aheinecke@4875: } aheinecke@4875: aheinecke@4875: class HWSLines(Importer): ingo@2862: ingo@2862: def getPath(self, base): ingo@2862: return "%s/%s" % (base, PATH) ingo@2862: ingo@2862: def getTablename(self): aheinecke@4875: return "hws_lines" ingo@2862: ingo@3654: def getName(self): aheinecke@4875: return "HWS_LINES" ingo@3654: ingo@2862: def isGeometryValid(self, geomType): ingo@2862: return geomType == 2 ingo@2862: ingo@2862: def isShapeRelevant(self, name, path): ingo@2862: return True ingo@2862: ingo@2862: def createNewFeature(self, featureDef, feat, **args): ingo@2862: newFeat = ogr.Feature(featureDef) ingo@2862: geometry = feat.GetGeometryRef() ingo@2862: geometry.SetCoordinateDimension(2) ingo@2862: ingo@2862: newFeat.SetGeometry(geometry) ingo@2862: ingo@2862: if self.IsFieldSet(feat, "river_id"): ingo@2862: newFeat.SetField("river_id", feat.GetField("river_id")) ingo@2862: else: ingo@2862: newFeat.SetField("river_id", self.river_id) ingo@2862: ingo@2862: if self.IsFieldSet(feat, "TYP"): ingo@2862: newFeat.SetField("type", feat.GetField("TYP")) ingo@2862: ingo@2862: if self.IsFieldSet(feat, "Bauart"): ingo@2862: newFeat.SetField("hws_facility", feat.GetField("Bauart")) ingo@2862: ingo@2862: if self.IsFieldSet(feat, "Name"): ingo@2862: newFeat.SetField("name", feat.GetField("name")) ingo@2862: else: ingo@2862: newFeat.SetField("name", args['name']) ingo@2862: ingo@2862: return newFeat ingo@2862: aheinecke@4875: class HWSPoints(Importer): aheinecke@4875: fieldmap = { aheinecke@4875: "Name" : "name", aheinecke@4875: "Freibord_m" : "freeboard", aheinecke@4875: "Quelle" : "source", aheinecke@4875: "Anmerkung" : "description", aheinecke@4875: "Stand" : "status_date", aheinecke@4875: "Verband" : "agency", aheinecke@4875: "Deich_KM" : "dike_km", aheinecke@4875: "Bereich" : "range", aheinecke@4875: } aheinecke@4875: aheinecke@4875: def getPath(self, base): aheinecke@4875: return "%s/%s" % (base, PATH) aheinecke@4875: aheinecke@4875: def getTablename(self): aheinecke@4875: return "hws_points" aheinecke@4875: aheinecke@4875: def getName(self): aheinecke@4875: return "HWS_POINTS" aheinecke@4875: aheinecke@4875: def isGeometryValid(self, geomType): aheinecke@4875: return geomType == 1 aheinecke@4875: aheinecke@4875: def isShapeRelevant(self, name, path): aheinecke@4875: print "Checking relevancy of %s" % path aheinecke@4875: if "punkte" in os.path.basename(path).lower(): aheinecke@4875: return True aheinecke@4875: else: aheinecke@4875: return False aheinecke@4875: aheinecke@4875: def createNewFeature(self, featureDef, feat, **args): aheinecke@4875: newFeat = ogr.Feature(featureDef) aheinecke@4875: geometry = feat.GetGeometryRef() aheinecke@4875: geometry.SetCoordinateDimension(3) aheinecke@4875: aheinecke@4875: utils.copyFields(feat, newFeat, self.fieldmap) aheinecke@4875: aheinecke@4875: newFeat.SetGeometry(geometry) aheinecke@4875: aheinecke@4875: newFeat.SetFID(feat.GetFID()) aheinecke@4875: aheinecke@4875: newFeat.SetField("ogr_fid", feat.GetFID()) aheinecke@4875: aheinecke@4875: if self.IsFieldSet(feat, "Art"): aheinecke@4875: kind_id = HWS_KIND.get(feat.GetField("Art")) aheinecke@4875: if not kind_id: aheinecke@4875: print ("Unbekannte Art: %s" % \ aheinecke@4875: feat.GetField("Art")) aheinecke@4875: else: aheinecke@4875: newFeat.SetField("kind_id", kind_id) aheinecke@4875: aheinecke@4875: if self.IsFieldSet(feat, "Bundesland"): aheinecke@4875: fed_id = FED_STATES.get(feat.GetField("Bundesland")) aheinecke@4875: aheinecke@4875: if not fed_id: aheinecke@4875: print ("Unbekanntes Bundesland: %s" % \ aheinecke@4875: feat.GetField("Bundesland")) aheinecke@4875: else: aheinecke@4875: newFeat.SetField("fed_state_id", fed_id) aheinecke@4875: aheinecke@4875: if self.IsFieldSet(feat, "river_id"): aheinecke@4875: if feat.GetField("river_id") != self.river_id: aheinecke@4875: print ("River_id mismatch between shapefile and" aheinecke@4875: " importer parameter.") aheinecke@4875: newFeat.SetField("river_id", feat.GetField("river_id")) aheinecke@4875: else: aheinecke@4875: newFeat.SetField("river_id", self.river_id) aheinecke@4875: aheinecke@4875: if self.IsFieldSet(feat, "Ufer"): aheinecke@4875: shoreString = feat.GetField("Ufer") aheinecke@4875: if "links" in shoreString.lower(): aheinecke@4875: newFeat.SetField("shore_side", True) aheinecke@4875: elif "rechts" in shoreString.lower(): aheinecke@4875: newFeat.SetField("shore_side", False) aheinecke@4875: aheinecke@4875: if not self.IsFieldSet(feat, "Name"): aheinecke@4875: newFeat.SetField("name", args['name']) aheinecke@4875: aheinecke@4875: # TODO: aheinecke@4875: # offical aheinecke@4875: aheinecke@4875: return newFeat aheinecke@4875: aheinecke@4875: