diff --git a/api/inp_in.py b/api/inp_in.py index 9b5e73b..6b81297 100644 --- a/api/inp_in.py +++ b/api/inp_in.py @@ -3,6 +3,7 @@ import os from .project import * from .database import ChangeSet, write from .sections import * +from .s0_base import get_region_type from .s1_title import inp_in_title from .s2_junctions import inp_in_junction from .s3_reservoirs import inp_in_reservoir @@ -32,6 +33,7 @@ from .s25_vertices import inp_in_vertex from .s26_labels import inp_in_label from .s27_backdrop import inp_in_backdrop from .s32_region import inp_in_region,inp_in_bound +from .s32_region_util import from_postgis_polygon,to_postgis_polygon _S = 'S' _L = 'L' @@ -113,7 +115,14 @@ _level_4 = [ BOUND, ] - +map_regiontype={ + # map the region types from desktop to server + 'DISTRIBUTION':'WDA', + 'DMA':'DMA', + 'PMA':'PMA', + 'VD':'VD', + 'SA':'SA', +} class SQLBatch: def __init__(self, project: str, count: int = 100) -> None: self.batch: list[str] = [] @@ -183,9 +192,11 @@ def parse_file(project: str, inp: str, version: str = '3') -> None: current_pattern = None current_curve = None curve_type_desc_line = None - + current_region =None + current_bound=[] + current_bound.clear() + region_list={} sql_batch = SQLBatch(project) - print("aaa") _print_time("Second scan...") with open(inp) as f: for s in levels: @@ -255,8 +266,23 @@ def parse_file(project: str, inp: str, version: str = '3') -> None: sql_batch.add(f"insert into _curve (id, type) values ('{tokens[0]}', '{type}');") current_curve = tokens[0] curve_type_desc_line = None + elif s== REGION: + tokens = line.split() + region_list[tokens[0]]=tokens[1] elif s == BOUND: tokens = line.split() + if(tokens[0]!=current_region and len(current_bound)>0): + #insert the previous region after get all the vertex of the attatched geometry + current_bound.append(current_bound[0]) + current_geometry=to_postgis_polygon(current_bound) + region_type=map_regiontype[region_list[tokens[0]]] + sql_batch.add(f"insert into region(id, boundary,r_type) values ('{current_region}', '{current_geometry}','{region_type}');") + #start the new region + current_bound.clear() + vertex_point=(float(tokens[1]),float(tokens[2])) + current_bound.append(vertex_point) + current_region=tokens[0] + if s == JUNCTIONS: sql_batch.add(handler(line, demand_outside)) elif s == PATTERNS: @@ -273,7 +299,12 @@ def parse_file(project: str, inp: str, version: str = '3') -> None: sql_batch.add(handler(sections[s], version)) else: sql_batch.add(handler(sections[s])) - + #need to insert the last region into database + if len(current_bound)>0: + current_bound.append(current_bound[0]) + current_geometry=to_postgis_polygon(current_bound) + region_type=map_regiontype[region_list[current_region]] + sql_batch.add(f"insert into region(id, boundary,r_type) values ('{current_region}', '{current_geometry}','{region_type}');") sql_batch.flush() end = _print_time(f'End reading file "{inp}"') diff --git a/api/s0_base.py b/api/s0_base.py index 6f42f98..6612555 100644 --- a/api/s0_base.py +++ b/api/s0_base.py @@ -125,3 +125,8 @@ def get_link_nodes(name: str, id: str) -> list[str]: elif is_valve(name, id): row = read(name, f"select node1, node2 from valves where id = '{id}'") return [str(row['node1']), str(row['node2'])] + +def get_region_type(name: str, id: str)->str: + if(is_region(name,id)): + type = read(name, f"select type from _region where id = '{id}'") + return type \ No newline at end of file