annotate backend/contrib/shpimporter/floodmarks.py @ 9716:c3afc0274bba 3.2.x

Improve Docker-based development setup _ Add demo DEMs and WSPLGEN to artifact server _ Do not unpack unused large DEM files into database image _ Improve README
author Tom Gottfried <tom@intevation.de>
date Mon, 22 Mar 2021 17:35:30 +0100
parents 90ba3ae2ced1
children
rev   line source
5545
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 try:
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 from osgeo import ogr
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 except ImportError:
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 import ogr
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 from importer import Importer
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 import logging
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 import os
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10 import re
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
11
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12 TABLE_NAME="flood_marks"
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 PATH="Hydrologie/HW-Marken"
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14 NAME="Floodmarks"
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 logger = logging.getLogger(NAME)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
17
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18 class Floodmark(Importer):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19 fieldmap = {
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 "^station$" : "km",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21 "^km$" : "km",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22 "^wsv-km$" : "km",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 "^FlussKm$" : "km",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 "^z$" : "z",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25 "^z\d*" : "z", # z02, z1890, usw.
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
26 "^m+NHN$" : "z",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 "^Ort$" : "location",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 "^Pegel$" : "location",
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
29 }
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31 def getPath(self, base):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
32 return "%s/%s" % (base, PATH)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
33
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 def getTablename(self):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 return TABLE_NAME
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37 def getName(self):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 return NAME
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40 def isGeometryValid(self, geomType):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 return geomType == ogr.wkbPoint
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43 def isShapeRelevant(self, name, path):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 return "hw-marken" in name.lower()
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
45
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 def createNewFeature(self, featureDef, feat, **args):
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 newFeat = ogr.Feature(featureDef)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 geometry = feat.GetGeometryRef()
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 geometry.SetCoordinateDimension(2)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
50 newFeat.SetGeometry(geometry)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
51
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52 self.copyFields(feat, newFeat, self.fieldmap)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
53
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
54 newFeat.SetField("river_id", self.river_id)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
56 filename = os.path.basename(args['path'])
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
58 # Try to extract the year from the filename
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
59 match = re.search(r"([_\-])(\d\d\d\d)([_\-])", filename)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 if match:
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
61 year = match.groups()[1]
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
62 year = int(year)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63 newFeat.SetField("year", year)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
64 else:
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
65 logger.warn(u"Could not extract year from filename: %s " % filename)
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
67 return newFeat
ed149d5d7fb7 Add floodmarks importer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
68

http://dive4elements.wald.intevation.org