59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from .database import *
|
|
|
|
|
|
def sql_update_coord(node: str, x: float, y: float) -> str:
|
|
coord = f"st_geomfromtext('point({x} {y})')"
|
|
return str(f"update coordinates set coord = {coord} where node = '{node}';")
|
|
|
|
|
|
def sql_insert_coord(node: str, x: float, y: float) -> str:
|
|
coord = f"st_geomfromtext('point({x} {y})')"
|
|
return str(f"insert into coordinates (node, coord) values ('{node}', {coord});")
|
|
|
|
|
|
def sql_delete_coord(node: str) -> str:
|
|
return str(f"delete from coordinates where node = '{node}';")
|
|
|
|
|
|
def from_postgis_point(coord: str) -> dict[str, float]:
|
|
xy = coord.lower().removeprefix('point(').removesuffix(')').split(' ')
|
|
return { 'x': float(xy[0]), 'y': float(xy[1]) }
|
|
|
|
|
|
def get_node_coord(name: str, node: str) -> dict[str, float]:
|
|
row = try_read(name, f"select st_astext(coord) as coord_geom from coordinates where node = '{node}'")
|
|
if row == None:
|
|
write(name, sql_insert_coord(node, 0.0, 0.0))
|
|
return {'x': 0.0, 'y': 0.0}
|
|
return from_postgis_point(row['coord_geom'])
|
|
|
|
|
|
def node_has_coord(name: str, node: str) -> bool:
|
|
return try_read(name, f"select node from coordinates where node = '{node}'") != None
|
|
|
|
|
|
#--------------------------------------------------------------
|
|
# [EPA2][EPA3][IN][OUT]
|
|
# id x y
|
|
#--------------------------------------------------------------
|
|
# exception ! need merge to node change set !
|
|
|
|
|
|
def inp_in_coord(line: str) -> str:
|
|
tokens = line.split()
|
|
node = tokens[0]
|
|
coord = f"st_geomfromtext('point({tokens[1]} {tokens[2]})')"
|
|
return str(f"insert into coordinates (node, coord) values ('{node}', {coord});")
|
|
|
|
|
|
def inp_out_coord(name: str) -> list[str]:
|
|
lines = []
|
|
objs = read_all(name, 'select node, st_astext(coord) as coord_geom from coordinates')
|
|
for obj in objs:
|
|
node = obj['node']
|
|
coord = from_postgis_point(obj['coord_geom'])
|
|
x = coord['x']
|
|
y = coord['y']
|
|
lines.append(f'{node} {x} {y}')
|
|
return lines
|