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@4932: "Hochufer" : 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@4933: "Nordrhein Westfalen" : 4, aheinecke@4875: "Rheinland-Pfalz" : 5, aheinecke@4933: "Rheinland Pfalz" : 5, aheinecke@4875: "Saarland" : 6, aheinecke@4875: "Schleswig-Holstein" : 7, aheinecke@4933: "Schleswig Holstein" : 7, aheinecke@4875: "Brandenburg" : 8, aheinecke@4875: "Mecklenburg-Vorpommern" : 9, aheinecke@4933: "Mecklenburg Vorpommern" : 9, aheinecke@4875: "Thüringen" : 10, aheinecke@4875: "Baden-Württemberg" : 11, aheinecke@4933: "Baden Württemberg" : 11, aheinecke@4875: "Sachsen-Anhalt" : 12, aheinecke@4933: "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@4935: "name$" : "name", aheinecke@4935: "quelle$" : "source", aheinecke@4935: "anmerkung$" : "description", aheinecke@4935: "stand$" : "status_date", aheinecke@4935: "verband$" : "agency", aheinecke@4935: "Deich_{0,1}KM$" : "dike_km", aheinecke@4935: "Bereich$" : "range", aheinecke@4935: "H[oeö]{0,2}he_{0,1}SOLL$" : "z_target", aheinecke@4935: "(WSP_){0,1}BfG_{0,1}100$" : "rated_level", aheinecke@4935: "H[oeö]{0,2}he_{0,1}IST$" : "z", 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@4934: return geomType == ogr.wkbPoint or geomType == ogr.wkbPoint25D aheinecke@4875: aheinecke@4875: def isShapeRelevant(self, name, path): aheinecke@4934: shp = ogr.Open(path) aheinecke@4934: if shp.GetLayerByName(name).GetGeomType() == ogr.wkbPoint or \ aheinecke@4934: shp.GetLayerByName(name).GetGeomType() == ogr.wkbPoint25D: 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@4881: geometry.SetCoordinateDimension(2) aheinecke@4875: aheinecke@4884: self.copyFields(feat, newFeat, self.fieldmap) aheinecke@4875: aheinecke@4875: newFeat.SetGeometry(geometry) aheinecke@4875: aheinecke@4875: newFeat.SetField("ogr_fid", feat.GetFID()) aheinecke@4935: artname = self.searchField("art$") aheinecke@4935: if self.IsFieldSet(feat, artname): aheinecke@4935: self.handled(artname) aheinecke@4935: kind_id = HWS_KIND.get(feat.GetField(artname)) aheinecke@4875: if not kind_id: aheinecke@4935: print ("Unknown Art: %s" % \ aheinecke@4935: feat.GetField(artname)) aheinecke@4875: else: aheinecke@4875: newFeat.SetField("kind_id", kind_id) aheinecke@4875: aheinecke@4935: fname = self.searchField("Bundesland$") aheinecke@4935: if self.IsFieldSet(feat, fname): aheinecke@4935: self.handled(fname) aheinecke@4935: fed_id = FED_STATES.get(feat.GetField(fname)) aheinecke@4875: aheinecke@4875: if not fed_id: aheinecke@4935: print ("Unknown Bundesland: %s" % \ aheinecke@4875: feat.GetField("Bundesland")) aheinecke@4875: else: aheinecke@4875: newFeat.SetField("fed_state_id", fed_id) aheinecke@4875: aheinecke@4935: fname = self.searchField("(ufer$)|(flussseite$)") aheinecke@4935: if self.IsFieldSet(feat, fname): aheinecke@4935: self.handled(fname) aheinecke@4935: shoreString = feat.GetField(fname) 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@4935: aheinecke@4935: fname = self.searchField("river_{0,1}id$") aheinecke@4935: if self.IsFieldSet(feat, fname): aheinecke@4935: self.handled(fname) aheinecke@4935: if feat.GetField(fname) != self.river_id: aheinecke@4935: print ("River_id mismatch between shapefile and" aheinecke@4935: " importer parameter.") aheinecke@4935: newFeat.SetField("river_id", feat.GetField(fname)) aheinecke@4935: else: aheinecke@4935: newFeat.SetField("river_id", self.river_id) aheinecke@4935: aheinecke@4935: fname = self.searchField("name$") aheinecke@4935: if not self.IsFieldSet(feat, fname): aheinecke@4875: newFeat.SetField("name", args['name']) aheinecke@4875: aheinecke@4935: fname = self.searchField("offiziell$") aheinecke@4935: if self.IsFieldSet(feat, fname): aheinecke@4935: self.handled(fname) aheinecke@4935: offiziell = feat.GetField(fname) aheinecke@4881: if offiziell == "1" or offiziell == 1: aheinecke@4881: newFeat.SetField("offiziell", True) aheinecke@4881: else: aheinecke@4881: newFeat.SetField("offiziell", False) aheinecke@4881: aheinecke@4881: if self.IsFieldSet(newFeat, "z") and \ aheinecke@4881: self.IsFieldSet(newFeat, "rated_level"): aheinecke@4935: fname = self.searchField("freibord(_m){0,1}$") aheinecke@4935: self.handled(fname) aheinecke@4881: z = newFeat.GetFieldAsDouble("z") aheinecke@4881: rl = newFeat.GetFieldAsDouble("rated_level") aheinecke@4881: newFeat.SetField("freeboard", z - rl) aheinecke@4875: aheinecke@4875: return newFeat aheinecke@4875: aheinecke@4875: