aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xgeodata-import-topo19
1 files changed, 14 insertions, 5 deletions
diff --git a/geodata-import-topo b/geodata-import-topo
index d814771..e58a701 100755
--- a/geodata-import-topo
+++ b/geodata-import-topo
@@ -56,27 +56,30 @@ from import_source import (
def get_layer_schema(layer : ogr.Layer) -> dict[str, Any]:
"""Return the layer definition dictionary for the given OGR layer."""
schema = {}
+ layer_name = layer.GetName()
defn = layer.GetLayerDefn()
n = defn.GetGeomFieldCount()
if n != 1:
- raise NotImplementedError(f'Layer "{layer.GetName()}" has geometry field count {n} != 1')
+ raise NotImplementedError(f'Layer "{layer_name}" has geometry field count {n} != 1')
geom_fld = defn.GetGeomFieldDefn(0)
if geom_fld.IsIgnored():
- raise NotImplementedError(f'Geometry field #0 in layer "{layer.GetName()}" is ignored')
+ raise NotImplementedError(f'Geometry field #0 in layer "{layer_name}" is ignored')
schema['geometry-type'] = geom_fld.GetType()
+ layer_name_lower = layer_name.lower()
fields = schema['fields'] = []
for i in range(defn.GetFieldCount()):
fld = defn.GetFieldDefn(i)
fld_name = fld.GetName()
+ fld_name_lower = fld_name.lower()
if fld.IsIgnored():
logging.warning('Field #%d "%s" in source layer "%s" is ignored',
- i, fld_name, layer.GetName())
+ i, fld_name, layer_name)
continue
field = { 'Name': fld_name }
fields.append(field)
- if fld_name.lower() in ('objektidentitet', 'skapad', 'objekttypnr', 'objekttyp'):
+ if fld_name_lower in ('objektidentitet', 'skapad', 'objekttypnr', 'objekttyp'):
field['Nullable'] = False
else:
field['Nullable'] = fld.IsNullable()
@@ -86,7 +89,13 @@ def get_layer_schema(layer : ogr.Layer) -> dict[str, Any]:
field['Comment'] = fld.GetComment()
fld_type = field['Type'] = fld.GetType()
- if fld_type == ogr.OFTString and fld_name.lower() == 'objektidentitet':
+ if (layer_name_lower, fld_name_lower) in (('lansyta', 'lanskod'),
+ ('kommunyta', 'kommunkod')):
+ fld_type = field['Type'] = ogr.OFTInteger
+ field['SubType'] = ogr.OFSTInt16
+ field['Nullable'] = False
+ field['Unique'] = True
+ elif fld_type == ogr.OFTString and fld_name_lower == 'objektidentitet':
field['SubType'] = ogr.OFSTUUID
else:
field['SubType'] = fld.GetSubType()