[Dive4elements-commits] [PATCH 14 of 15] Importer: Move copy fields into importer class and track imported/unimported fields
Wald Commits
scm-commit at wald.intevation.org
Mon Jan 28 12:27:41 CET 2013
# HG changeset patch
# User Andre Heinecke <aheinecke at intevation.de>
# Date 1359372324 -3600
# Node ID b457532dae631d9bf5517d92ca49b314dafee525
# Parent 186dd186d5bd606090bc3ed38aa54d02ee4c4446
Importer: Move copy fields into importer class and track imported/unimported fields
diff -r 186dd186d5bd -r b457532dae63 flys-backend/contrib/shpimporter/hws.py
--- a/flys-backend/contrib/shpimporter/hws.py Fri Jan 25 15:43:05 2013 +0100
+++ b/flys-backend/contrib/shpimporter/hws.py Mon Jan 28 12:25:24 2013 +0100
@@ -119,7 +119,7 @@
geometry = feat.GetGeometryRef()
geometry.SetCoordinateDimension(2)
- utils.copyFields(feat, newFeat, self.fieldmap)
+ self.copyFields(feat, newFeat, self.fieldmap)
newFeat.SetGeometry(geometry)
@@ -128,6 +128,7 @@
newFeat.SetField("ogr_fid", feat.GetFID())
if self.IsFieldSet(feat, "Art"):
+ self.handled("Art")
kind_id = HWS_KIND.get(feat.GetField("Art"))
if not kind_id:
print ("Unbekannte Art: %s" % \
@@ -136,6 +137,7 @@
newFeat.SetField("kind_id", kind_id)
if self.IsFieldSet(feat, "Bundesland"):
+ self.handled("Bundesland")
fed_id = FED_STATES.get(feat.GetField("Bundesland"))
if not fed_id:
@@ -145,6 +147,7 @@
newFeat.SetField("fed_state_id", fed_id)
if self.IsFieldSet(feat, "river_id"):
+ self.handled("river_id")
if feat.GetField("river_id") != self.river_id:
print ("River_id mismatch between shapefile and"
" importer parameter.")
@@ -153,6 +156,7 @@
newFeat.SetField("river_id", self.river_id)
if self.IsFieldSet(feat, "Ufer"):
+ self.handled("Ufer")
shoreString = feat.GetField("Ufer")
if "links" in shoreString.lower():
newFeat.SetField("shore_side", True)
@@ -160,9 +164,11 @@
newFeat.SetField("shore_side", False)
if not self.IsFieldSet(feat, "Name"):
+ self.handled("Name")
newFeat.SetField("name", args['name'])
if self.IsFieldSet(feat, "offiziell"):
+ self.handled("offiziell")
offiziell = feat.GetField("offiziell")
if offiziell == "1" or offiziell == 1:
newFeat.SetField("offiziell", True)
@@ -171,6 +177,7 @@
if self.IsFieldSet(newFeat, "z") and \
self.IsFieldSet(newFeat, "rated_level"):
+ self.handled("Freibord_m")
z = newFeat.GetFieldAsDouble("z")
rl = newFeat.GetFieldAsDouble("rated_level")
newFeat.SetField("freeboard", z - rl)
diff -r 186dd186d5bd -r b457532dae63 flys-backend/contrib/shpimporter/importer.py
--- a/flys-backend/contrib/shpimporter/importer.py Fri Jan 25 15:43:05 2013 +0100
+++ b/flys-backend/contrib/shpimporter/importer.py Mon Jan 28 12:25:24 2013 +0100
@@ -14,6 +14,7 @@
self.river_id = config.river_id
self.dest_srs = osr.SpatialReference()
self.dest_srs.ImportFromEPSG(config.target_srs)
+ self.handled_fields = []
def getKind(self, path):
raise NotImplementedError("Importer.getKind is abstract!")
@@ -75,6 +76,45 @@
return feat
+ def handled(self, field):
+ """
+ Register a field or a map of as handled during the import.
+
+ There is a warning printed after the import for each unhandled field!
+ """
+ if not field in self.handled_fields:
+ self.handled_fields.append(field)
+
+ def copyFields(self, src, target, mapping):
+ """
+ Checks the mapping dictonary for key value pairs to
+ copy from the source to the destination feature.
+
+ The Key is the attribute of the source feature to be copied
+ into the target attribute named by the dict's value.
+ """
+ self.handled_fields.extend(mapping.keys())
+ for key, value in mapping.items():
+ if src.GetFieldIndex(key) == -1:
+ continue
+ # 0 OFTInteger, Simple 32bit integer
+ # 1 OFTIntegerList, List of 32bit integers
+ # 2 OFTReal, Double Precision floating point
+ # 3 OFTRealList, List of doubles
+ # 4 OFTString, String of ASCII chars
+ # 5 OFTStringList, Array of strings
+ # 6 OFTWideString, deprecated
+ # 7 OFTWideStringList, deprecated
+ # 8 OFTBinary, Raw Binary data
+ # 9 OFTDate, Date
+ # 10 OFTTime, Time
+ # 11 OFTDateTime, Date and Time
+ if src.IsFieldSet(src.GetFieldIndex(key)):
+ if src.GetFieldType(key) == 2:
+ target.SetField(value, src.GetFieldAsDouble(key))
+ else:
+ target.SetField(value, src.GetField(key))
+
def shape2Database(self, srcLayer, name, path):
destLayer = self.dbconn.GetLayerByName(self.getTablename())
@@ -129,6 +169,16 @@
shpimporter.INFO("Failed to create %i features" % creationFailed)
shpimporter.INFO("Found %i unsupported features" % unsupported)
+ unhandled = []
+ for i in range(0, srcLayer.GetLayerDefn().GetFieldCount()):
+ act_field = srcLayer.GetLayerDefn().GetFieldDefn(i).GetNameRef()
+ if not act_field in self.handled_fields:
+ unhandled.append(act_field)
+
+ if len(unhandled):
+ shpimporter.INFO("Did not import values from fields: %s " % \
+ " ".join(unhandled))
+
try:
if self.config.dry_run > 0:
return geomType
diff -r 186dd186d5bd -r b457532dae63 flys-backend/contrib/shpimporter/utils.py
--- a/flys-backend/contrib/shpimporter/utils.py Fri Jan 25 15:43:05 2013 +0100
+++ b/flys-backend/contrib/shpimporter/utils.py Mon Jan 28 12:25:24 2013 +0100
@@ -31,35 +31,3 @@
except UnicodeDecodeError:
# Probably Windows iso-8859-x names so lets try again
return unicode.encode(unicode(path, "iso-8859-15"), "UTF-8")
-
-
-# 0 OFTInteger, Simple 32bit integer
-# 1 OFTIntegerList, List of 32bit integers
-# 2 OFTReal, Double Precision floating point
-# 3 OFTRealList, List of doubles
-# 4 OFTString, String of ASCII chars
-# 5 OFTStringList, Array of strings
-# 6 OFTWideString, deprecated
-# 7 OFTWideStringList, deprecated
-# 8 OFTBinary, Raw Binary data
-# 9 OFTDate, Date
-# 10 OFTTime, Time
-# 11 OFTDateTime, Date and Time
-
-
-def copyFields(src, target, mapping):
- """
- Checks the mapping dictonary for key value pairs to
- copy from the source to the destination feature.
-
- The Key is the attribute of the source feature to be copied
- into the target attribute named by the dict's value.
- """
- for key, value in mapping.items():
- if src.GetFieldIndex(key) == -1:
- continue
- if src.IsFieldSet(src.GetFieldIndex(key)):
- if src.GetFieldType(key) == 2:
- target.SetField(value, src.GetFieldAsDouble(key))
- else:
- target.SetField(value, src.GetField(key))
More information about the Dive4elements-commits
mailing list