Skip to content

Commit 8343634

Browse files
Merge pull request #37 from geoCML/def-spatial-refs
Set spatial reference for layers
2 parents 16a932a + 54fc45c commit 8343634

File tree

4 files changed

+34
-13
lines changed

4 files changed

+34
-13
lines changed

src/db_connector.py

+5
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ def get_triggers_for_table(self, table: str) -> set[str]:
109109
return {trigger[0] for trigger in self.cursor.fetchall()}
110110

111111

112+
def get_srid_for_table(self, schema: str, table: str) -> str:
113+
self.cursor.execute(f"""SELECT Find_SRID('{schema}', '{table}', 'geom');""")
114+
return self.cursor.fetchone()[0]
115+
116+
112117
def execute_commit_query(self, query: str) -> None:
113118
self.cursor.execute(query)
114119
self.connection.commit()

src/tabor.py

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ def write(file_path: str, db: str, username: str, password: str, host: str, port
6969
geom_type = db_connector.get_geometry_type_for_table(schema, table_name)
7070
if geom_type:
7171
data[table]["geometry"] = geom_type
72+
srid = db_connector.get_srid_for_table(schema, table_name)
73+
if srid:
74+
data[table]["srid"] = srid
7275

7376
data[table]["owner"] = username
7477

src/tabor_file.py

+20-7
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,17 @@ def __init__(self, path: str, psql_data: dict | None = None) -> None:
3535
pass
3636

3737

38-
group = ""
3938
try:
4039
group = layer["group"]
4140
except KeyError:
42-
pass
41+
group = None
42+
43+
try:
44+
srid = layer["srid"]
45+
except KeyError:
46+
srid = None
4347

44-
self.add_layer(layer["name"], layer["schema"], geometry, layer["owner"], layer["fields"], constraints, group)
48+
self.add_layer(layer["name"], layer["schema"], geometry, layer["owner"], layer["fields"], constraints, group, srid)
4549

4650
except FileNotFoundError:
4751
raise Exception(f"Failed to read .tabor file at {self.path}, does that path exist?")
@@ -54,6 +58,11 @@ def __init__(self, path: str, psql_data: dict | None = None) -> None:
5458
except KeyError:
5559
geom = None
5660

61+
try:
62+
srid = values["srid"]
63+
except KeyError:
64+
srid = None
65+
5766
derived_constraints: list[dict] = []
5867
try:
5968
for trigger in values["constraints"]:
@@ -66,11 +75,12 @@ def __init__(self, path: str, psql_data: dict | None = None) -> None:
6675
derived_group = values["group"]
6776
except KeyError:
6877
pass
69-
self.add_layer(table.split(".")[1], table.split(".")[0], geom, values["owner"], values["fields"], derived_constraints, derived_group)
78+
79+
self.add_layer(table.split(".")[1], table.split(".")[0], geom, values["owner"], values["fields"], derived_constraints, derived_group, srid)
7080

7181

72-
def add_layer(self, name: str, schema: str, geometry: str | None, owner: str, fields: dict, constraints: list[dict], group: str | None) -> TaborLayer:
73-
layer = TaborLayer(name, schema, geometry, owner, fields, constraints, group)
82+
def add_layer(self, name: str, schema: str, geometry: str | None, owner: str, fields: dict, constraints: list[dict], group: str | None, srid: str | None) -> TaborLayer:
83+
layer = TaborLayer(name, schema, geometry, owner, fields, constraints, group, srid)
7484
if group:
7585
feature_group = self.add_or_get_group(group)
7686
feature_group.add_layer(layer)
@@ -114,7 +124,10 @@ def to_psql(self) -> dict:
114124
result["layers"][layer.name]["constraints"].append(str(constraint))
115125

116126
if layer.geometry:
117-
result["layers"][layer.name]["geometry"] = f"""ALTER TABLE "{layer.schema}"."{layer.name}" ALTER COLUMN geom TYPE Geometry({layer.derive_geometry_type()});"""
127+
if layer.srid:
128+
result["layers"][layer.name]["geometry"] = f"""ALTER TABLE "{layer.schema}"."{layer.name}" ALTER COLUMN geom TYPE Geometry({layer.derive_geometry_type()}, {layer.srid});"""
129+
else:
130+
result["layers"][layer.name]["geometry"] = f"""ALTER TABLE "{layer.schema}"."{layer.name}" ALTER COLUMN geom TYPE Geometry({layer.derive_geometry_type()});"""
118131

119132
result["groups"] = {}
120133
for group in self.groups:

src/tabor_layer.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,17 @@
55

66

77
class TaborLayer(object):
8-
def __init__(self, name: str, schema: str, geometry: str | None, owner: str, fields: dict, constraints: list[dict], group: str | None) -> None:
8+
def __init__(self, name: str, schema: str, geometry: str | None, owner: str, fields: dict, constraints: list[dict], group: str | None, srid: str | None) -> None:
99
self.name = name
1010
self.schema = schema
11+
self.srid = srid
12+
self.group = group
1113

1214
if geometry:
1315
self.geometry = GeometryType(geometry)
1416
else:
1517
self.geometry = None
1618

17-
if group:
18-
self.group = group
19-
else:
20-
self.group = None
21-
2219
self.constraints: list[Constraint] = []
2320
if constraints:
2421
for constraint in constraints:
@@ -72,6 +69,9 @@ def as_dict(self) -> dict:
7269
if self.group:
7370
var_dict["group"] = self.group
7471

72+
if self.srid:
73+
var_dict["srid"] = self.srid
74+
7575
return var_dict
7676

7777

0 commit comments

Comments
 (0)