aheinecke@5353: # -*- coding: utf-8 -*-
aheinecke@5353: import os
aheinecke@5353: 
aheinecke@5353: try:
aheinecke@5353:     from osgeo import ogr
aheinecke@5353: except ImportError:
aheinecke@5353:     import ogr
aheinecke@5353: 
aheinecke@5353: from importer import Importer
aheinecke@5353: import utils
aheinecke@5353: 
aheinecke@5353: import logging
aheinecke@5353: logger = logging.getLogger("Jetties")
aheinecke@5353: 
aheinecke@5353: PATH="Geodaesie/Bauwerke"
aheinecke@5353: NAME="Jetties"
aheinecke@5353: 
aheinecke@5353: # strings need to be lowercase
aheinecke@5357: # buhnenkopf 0
aheinecke@5357: # buhnenfuß 1
aheinecke@5357: # buhnenwurzel 2
aheinecke@5353: JETTY_KIND = {
aheinecke@5357:         "bkl" : 0,
aheinecke@5357:         "bkr" : 0,
aheinecke@5384:         "bk"  : 0,
aheinecke@5357:         "bfl" : 1,
aheinecke@5357:         "bfr" : 1,
aheinecke@5384:         "bf"  : 1,
aheinecke@5357:         "bwl" : 2,
aheinecke@5357:         "bwr" : 2,
aheinecke@5384:         "bw"  : 2,
aheinecke@5353:     }
aheinecke@5353: 
aheinecke@5353: class Jetties(Importer):
aheinecke@5353:     fieldmap = {
aheinecke@5384:             "^station$"       : "km",
aheinecke@5384:             "^km$"            : "km",
aheinecke@5384:             "^wsv-km$"        : "km",
aheinecke@5384:             "^z$"             : "z",
aheinecke@5384:             "^H[oeö]{0,2}he$" : "z",
aheinecke@5384:             "^m+NHN$"         : "z",
aheinecke@5353:         }
aheinecke@5353: 
aheinecke@5353:     def getPath(self, base):
aheinecke@5353:         return "%s/%s" % (base, PATH)
aheinecke@5353: 
aheinecke@5353:     def getTablename(self):
aheinecke@5353:         return "jetties"
aheinecke@5353: 
aheinecke@5353:     def getName(self):
aheinecke@5353:         return "JETTIES"
aheinecke@5353: 
aheinecke@5353:     def isGeometryValid(self, geomType):
aheinecke@5353:         return geomType == ogr.wkbPoint or geomType == ogr.wkbPoint25D
aheinecke@5353: 
aheinecke@5353:     def isShapeRelevant(self, name, path):
aheinecke@5353:         if not path.endswith("Buhnen.shp"):
aheinecke@5353:             return False
aheinecke@5353:         shp = ogr.Open(path)
aheinecke@5353:         return self.isGeometryValid(shp.GetLayerByName(name).GetGeomType())
aheinecke@5353: 
aheinecke@5353:     def createNewFeature(self, featureDef, feat, **args):
aheinecke@5353:         newFeat  = ogr.Feature(featureDef)
aheinecke@5353:         geometry = feat.GetGeometryRef()
aheinecke@5353:         geometry.SetCoordinateDimension(2)
aheinecke@5353: 
aheinecke@5353:         self.copyFields(feat, newFeat, self.fieldmap)
aheinecke@5353: 
aheinecke@5353:         newFeat.SetGeometry(geometry)
aheinecke@5353: 
aheinecke@5438:         newFeat.SetField("river_id", self.river_id)
aheinecke@5438: 
aheinecke@5353:         artname = self.searchField("^type$")
aheinecke@5353:         if self.IsFieldSet(feat, artname):
aheinecke@5353:             self.handled(artname)
aheinecke@5353:             kind_id = JETTY_KIND.get(feat.GetField(artname).lower())
aheinecke@5357:             if kind_id == None:
aheinecke@5353:                 logger.warn("Unknown Type: %s" % \
aheinecke@5353:                         feat.GetField(artname))
aheinecke@5353:             else:
aheinecke@5353:                 newFeat.SetField("kind_id", kind_id)
aheinecke@5353: 
aheinecke@5353:         return newFeat
aheinecke@5353: