comparison flys-backend/contrib/shpimporter/boundaries.py @ 5379:61bf64b102bc mapgenfix

Merge with default branch
author Christian Lins <christian.lins@intevation.de>
date Fri, 22 Mar 2013 11:25:54 +0100
parents 71a24278322c
children 4e166c514940
comparison
equal deleted inserted replaced
5175:cfc5540a4eec 5379:61bf64b102bc
1 import ogr 1 try:
2 from osgeo import ogr
3 except ImportError:
4 import ogr
2 5
3 from importer import Importer 6 from importer import Importer
7 import utils
4 8
5 TABLE_NAME="hydr_boundaries" 9 TABLE_NAME="hydr_boundaries"
6 TABLE_NAME_POLY="hydr_boundaries_poly" 10 TABLE_NAME_POLY="hydr_boundaries_poly"
7 PATH="Hydrologie/Hydr.Grenzen/Linien" 11 PATH="Hydrologie/Hydr.Grenzen"
8 NAME="Hydr. Boundaries" 12 NAME="Hydr. Boundaries"
9 13
10 14
11 class HydrBoundary(Importer): 15 class HydrBoundary(Importer):
12 16
13 def getPath(self, base): 17 def getPath(self, base):
14 return "%s/%s" % (base, PATH) 18 return "%s/%s" % (base, PATH)
15 19
16
17 def getTablename(self): 20 def getTablename(self):
18 return TABLE_NAME 21 return TABLE_NAME
19
20 22
21 def getName(self): 23 def getName(self):
22 return NAME 24 return NAME
23 25
26 def isGeometryValid(self, geomType):
27 return geomType in [ogr.wkbLineString,
28 ogr.wkbLineString25D,
29 ogr.wkbMultiLineString25D,
30 ogr.wkbMultiLineString]
31
32 def isShapeRelevant(self, name, path):
33 shp = ogr.Open(path)
34 if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \
35 self.getKind(path) > 0:
36 return True
37 else:
38 return False
39
40 def getKind(self, path):
41 if "linien/bfg" in path.lower():
42 return 1
43 elif "linien/land" in path.lower():
44 return 2
45 elif "/sonstige/" in path.lower():
46 return 3
47 else:
48 return 0
49
50 def createNewFeature(self, featureDef, feat, **args):
51 kind = self.getKind(args['path'])
52
53 newFeat = ogr.Feature(featureDef)
54 geometry = feat.GetGeometryRef()
55 geometry.SetCoordinateDimension(3)
56
57 newFeat.SetGeometry(geometry)
58 newFeat.SetField("name", args['name'])
59 newFeat.SetField("kind", kind)
60 if self.IsFieldSet(feat, "SECTIE"):
61 newFeat.SetField("sectie", feat.GetField("SECTIE"))
62
63 if self.IsFieldSet(feat, "SOBEK"):
64 newFeat.SetField("sobek", feat.GetField("SOBEK"))
65
66 if self.IsFieldSet(feat, "river_id"):
67 newFeat.SetField("river_id", feat.GetField("river_id"))
68 else:
69 newFeat.SetField("river_id", self.river_id)
70
71 return utils.convertToMultiLine(newFeat)
72
73 class HydrBoundaryPoly(HydrBoundary):
74
75 def getTablename(self):
76 return TABLE_NAME_POLY
77
78 def getName(self):
79 return "%s (Polygons)" % NAME
24 80
25 def isGeometryValid(self, geomType): 81 def isGeometryValid(self, geomType):
26 return geomType == 2 82 return geomType == ogr.wkbPolygon or geomType == ogr.wkbMultiPolygon
27
28 83
29 def isShapeRelevant(self, name, path): 84 def isShapeRelevant(self, name, path):
30 return True 85 shp = ogr.Open(path)
31 86 if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \
32 87 self.getKind(path) > 0:
33 def getKind(self, path): 88 return True
34 if path.find("BfG") > 0:
35 return 1
36 else: 89 else:
37 return 2 90 return False
38
39 91
40 def createNewFeature(self, featureDef, feat, **args): 92 def createNewFeature(self, featureDef, feat, **args):
41 kind = self.getKind(args['path']) 93 kind = self.getKind(args['path'])
42 94
43 newFeat = ogr.Feature(featureDef) 95 newFeat = ogr.Feature(featureDef)
46 98
47 newFeat.SetGeometry(geometry) 99 newFeat.SetGeometry(geometry)
48 newFeat.SetField("name", args['name']) 100 newFeat.SetField("name", args['name'])
49 newFeat.SetField("kind", kind) 101 newFeat.SetField("kind", kind)
50 102
51 if self.IsFieldSet(feat, "river_id"): 103 if self.IsFieldSet(feat, "SECTIE"):
52 newFeat.SetField("river_id", feat.GetField("river_id")) 104 newFeat.SetField("sectie", feat.GetField("SECTIE"))
53 else:
54 newFeat.SetField("river_id", self.river_id)
55 105
56 return newFeat 106 if self.IsFieldSet(feat, "SOBEK"):
107 newFeat.SetField("sobek", feat.GetField("SOBEK"))
57 108
58
59
60 class HydrBoundaryPoly(HydrBoundary):
61
62 def getTablename(self):
63 return TABLE_NAME_POLY
64
65
66 def getName(self):
67 return "%s (Polygons)" % NAME
68
69
70 def isGeometryValid(self, geomType):
71 return geomType == 3 or geomType == 6
72
73
74 def createNewFeature(self, featureDef, feat, **args):
75 kind = self.getKind(args['path'])
76
77 newFeat = ogr.Feature(featureDef)
78 geometry = feat.GetGeometryRef()
79 geometry.SetCoordinateDimension(2)
80
81 newFeat.SetGeometry(geometry)
82 newFeat.SetField("name", args['name'])
83 newFeat.SetField("kind", kind)
84 109
85 if self.IsFieldSet(feat, "river_id"): 110 if self.IsFieldSet(feat, "river_id"):
86 newFeat.SetField("river_id", feat.GetField("river_id")) 111 newFeat.SetField("river_id", feat.GetField("river_id"))
87 else: 112 else:
88 newFeat.SetField("river_id", self.river_id) 113 newFeat.SetField("river_id", self.river_id)
89 114
90 return newFeat 115 return utils.convertToMultiPolygon(newFeat)
91 116

http://dive4elements.wald.intevation.org