from .database import * def sql_update_coord(node: str, x: float, y: float) -> str: coord = f"st_geomfromtext('point({x} {y})')" return 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 f"insert into coordinates (node, coord) values ('{node}', {coord});" def sql_delete_coord(node: str) -> str: return 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']) #-------------------------------------------------------------- # [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 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