diff flys-backend/contrib/shpimporter/hws.py @ 4875:37fa93f65971

(importer) Add classes for hws_points and hws_lines
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 25 Jan 2013 10:41:59 +0100
parents 59ca5dab2782
children 9b03cf6b85c9
line wrap: on
line diff
--- 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
+
+

http://dive4elements.wald.intevation.org