# HG changeset patch # User Andre Heinecke # Date 1363969929 -3600 # Node ID 974f0e3dcc281e92e524e5f3186a56c1872c5fd3 # Parent 6c2751c17869b7a127a59484ac94116f213e0bc8 Import buildings according to specification diff -r 6c2751c17869 -r 974f0e3dcc28 flys-backend/contrib/shpimporter/buildings.py --- a/flys-backend/contrib/shpimporter/buildings.py Fri Mar 22 17:31:48 2013 +0100 +++ b/flys-backend/contrib/shpimporter/buildings.py Fri Mar 22 17:32:09 2013 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- try: from osgeo import ogr except ImportError: @@ -9,8 +10,24 @@ PATH="Geodaesie/Bauwerke" NAME="Buildings" +BUILDING_KINDS= { + "sonstige" : 0, + "brücken" : 1, + "wehre" : 2, + "pegel" : 3, + } class Building(Importer): + fieldmap = { + "^station$" : "km", + "^km$" : "km", + "^wsv-km$" : "km", + "^z$" : "z", + "^H[oeö]{0,2}he$" : "z", + "^m+NHN$" : "z", + "^KWNAAM$" : "description", + "^Name$" : "description" + } def getPath(self, base): return "%s/%s" % (base, PATH) @@ -29,22 +46,42 @@ def isShapeRelevant(self, name, path): - return True + return "buhnen.shp" not in name.lower() + + def getKind(self, feat, path): + # First try to resolve it with the filename + for fname in ["brücke.shp", "bruecke.shp", + "brücken.shp", "bruecken.shp"]: + if path.lower().endswith(fname): + return BUILDING_KINDS["brücken"] + for fname in ["wehr.shp", "wehre.shp"]: + if path.lower().endswith(fname): + return BUILDING_KINDS["wehre"] + for fname in ["pegel.shp"]: + if path.lower().endswith(fname): + return BUILDING_KINDS["pegel"] + + # Now it gets ugly when we search all attributes + if self.searchValue(feat, "^br[ueü]{0,2}cke[n]{0,1}$"): + return BUILDING_KINDS["brücken"] + if self.searchValue(feat, "^wehr[e]{0,1}$"): + return BUILDING_KINDS["wehre"] + + return BUILDING_KINDS["sonstige"] def createNewFeature(self, featureDef, feat, **args): - newFeat = ogr.Feature(featureDef) - newFeat.SetGeometry(feat.GetGeometryRef()) + newFeat = ogr.Feature(featureDef) + geometry = feat.GetGeometryRef() + geometry.SetCoordinateDimension(2) + newFeat.SetGeometry(geometry) - if self.IsFieldSet(feat, "river_id"): - newFeat.SetField("river_id", feat.GetField("river_id")) - else: - newFeat.SetField("river_id", self.river_id) + self.copyFields(feat, newFeat, self.fieldmap) - if self.IsFieldSet(feat, "Name"): - newFeat.SetField("name", feat.GetField("Name")) - elif self.IsFieldSet(feat, "KWNAAM"): - newFeat.SetField("name", feat.GetField("KWNAAM")) + newFeat.SetField("kind_id", self.getKind(feat, args['path'])) + newFeat.SetField("name", args["name"]) + + newFeat.SetField("river_id", self.river_id) return newFeat