# HG changeset patch # User Andre Heinecke # Date 1359106919 -3600 # Node ID 37fa93f659713f3e9778149e8cd58bd7d20e4d90 # Parent b1d7e600b43bdf7cbb878de10c808cf031f20775 (importer) Add classes for hws_points and hws_lines diff -r b1d7e600b43b -r 37fa93f65971 flys-backend/contrib/shpimporter/hws.py --- a/flys-backend/contrib/shpimporter/hws.py Fri Jan 25 10:41:09 2013 +0100 +++ b/flys-backend/contrib/shpimporter/hws.py Fri Jan 25 10:41:59 2013 +0100 @@ -1,34 +1,62 @@ -import ogr +# -*- coding: utf-8 -*- +import os + +try: + from osgeo import ogr +except ImportErrror: + import ogr from importer import Importer +import utils -TABLE_NAME="hws" PATH="Hydrologie/HW-Schutzanlagen" NAME="HWS" +# Keep in sync with hws_kinds table: +HWS_KIND = { + "Durchlass" : 1, + "Damm" : 2, + "Deich" : 2, + "Graben" : 3, + } -class HWS(Importer): +# Keep in sync with fed_states table: +FED_STATES = { + "Bayern" : 1, + "Hessen" : 2, + "Niedersachsen" : 3, + "Nordrhein-Westfalen" : 4, + "Rheinland-Pfalz" : 5, + "Saarland" : 6, + "Schleswig-Holstein" : 7, + "Brandenburg" : 8, + "Mecklenburg-Vorpommern" : 9, + "Thüringen" : 10, + "Baden-Württemberg" : 11, + "Sachsen-Anhalt" : 12, + "Sachsen" : 13, + "Berlin" : 14, + "Bremen" : 15, + "Hamburg" : 16, +} + +class HWSLines(Importer): def getPath(self, base): return "%s/%s" % (base, PATH) - def getTablename(self): - return TABLE_NAME - + return "hws_lines" def getName(self): - return NAME - + return "HWS_LINES" def isGeometryValid(self, geomType): return geomType == 2 - def isShapeRelevant(self, name, path): return True - def createNewFeature(self, featureDef, feat, **args): newFeat = ogr.Feature(featureDef) geometry = feat.GetGeometryRef() @@ -54,3 +82,88 @@ return newFeat +class HWSPoints(Importer): + fieldmap = { + "Name" : "name", + "Freibord_m" : "freeboard", + "Quelle" : "source", + "Anmerkung" : "description", + "Stand" : "status_date", + "Verband" : "agency", + "Deich_KM" : "dike_km", + "Bereich" : "range", + } + + def getPath(self, base): + return "%s/%s" % (base, PATH) + + def getTablename(self): + return "hws_points" + + def getName(self): + return "HWS_POINTS" + + def isGeometryValid(self, geomType): + return geomType == 1 + + def isShapeRelevant(self, name, path): + print "Checking relevancy of %s" % path + if "punkte" in os.path.basename(path).lower(): + return True + else: + return False + + def createNewFeature(self, featureDef, feat, **args): + newFeat = ogr.Feature(featureDef) + geometry = feat.GetGeometryRef() + geometry.SetCoordinateDimension(3) + + utils.copyFields(feat, newFeat, self.fieldmap) + + newFeat.SetGeometry(geometry) + + newFeat.SetFID(feat.GetFID()) + + newFeat.SetField("ogr_fid", feat.GetFID()) + + if self.IsFieldSet(feat, "Art"): + kind_id = HWS_KIND.get(feat.GetField("Art")) + if not kind_id: + print ("Unbekannte Art: %s" % \ + feat.GetField("Art")) + else: + newFeat.SetField("kind_id", kind_id) + + if self.IsFieldSet(feat, "Bundesland"): + fed_id = FED_STATES.get(feat.GetField("Bundesland")) + + if not fed_id: + print ("Unbekanntes Bundesland: %s" % \ + feat.GetField("Bundesland")) + else: + newFeat.SetField("fed_state_id", fed_id) + + if self.IsFieldSet(feat, "river_id"): + if feat.GetField("river_id") != self.river_id: + print ("River_id mismatch between shapefile and" + " importer parameter.") + newFeat.SetField("river_id", feat.GetField("river_id")) + else: + newFeat.SetField("river_id", self.river_id) + + if self.IsFieldSet(feat, "Ufer"): + shoreString = feat.GetField("Ufer") + if "links" in shoreString.lower(): + newFeat.SetField("shore_side", True) + elif "rechts" in shoreString.lower(): + newFeat.SetField("shore_side", False) + + if not self.IsFieldSet(feat, "Name"): + newFeat.SetField("name", args['name']) + + # TODO: + # offical + + return newFeat + +