Mercurial > dive4elements > river
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 |