Refine service area

This commit is contained in:
wqy
2023-07-28 18:38:42 +08:00
parent fb347ba03a
commit 897dd72a07
3 changed files with 27 additions and 12 deletions

View File

@@ -2,7 +2,7 @@ import sys
import json import json
from queue import Queue from queue import Queue
from .database import * from .database import *
from .s0_base import get_node_links, get_link_nodes, get_nodes from .s0_base import get_node_links, get_link_nodes
sys.path.append('..') sys.path.append('..')
from epanet.epanet import run_project from epanet.epanet import run_project
@@ -38,7 +38,7 @@ def _calculate_service_area(name: str, inp, time_index: int = 0) -> dict[str, li
elif node2 == cursor and link_flows[link] < 0: elif node2 == cursor and link_flows[link] < 0:
queue.put(node1) queue.put(node1)
return sources #return sources
# calculation concentration # calculation concentration
concentration_map: dict[str, dict[str, float]] = {} concentration_map: dict[str, dict[str, float]] = {}
@@ -111,11 +111,7 @@ def _calculate_service_area(name: str, inp, time_index: int = 0) -> dict[str, li
source_to_main_node[max_source] = [] source_to_main_node[max_source] = []
source_to_main_node[max_source].append(node) source_to_main_node[max_source].append(node)
sas: list[dict[str, Any]] = [] return source_to_main_node
for source, nodes in source_to_main_node.items():
sas.append({ 'source': source, 'nodes': nodes })
return { 'service_areas' : sas, 'concentrations': concentration_map }
def calculate_service_area(name: str) -> list[dict[str, list[str]]]: def calculate_service_area(name: str) -> list[dict[str, list[str]]]:

17
dev.py
View File

@@ -5,6 +5,17 @@ p = 'dev'
read_inp(p, f'./inp/net3.inp', '3') read_inp(p, f'./inp/net3.inp', '3')
open_project(p) open_project(p)
add_region(p, ChangeSet({'id': 'r', 'boundary': [(24.614,13.087), (24.835,11.069), (26.144,10.747), (27.290,11.543), (25.726,12.987), (24.614,13.087)]})) sass = calculate_service_area(p)
links = get_links_on_region_boundary(p, 'r') assert len(sass) == 25
print(links)
assert sass[0]['River'] == ['River', '60', '61', '123', '601']
assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '267', '107', '141', '164', '265', '187', '189', '143', '166', '169', '204', '15', '167', '171', '269', '173', '271', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[0]['1'] == ['185', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
print(sass[1])
assert sass[0]['River'] == ['River', '60', '61', '123', '601']
assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '145', '163', '195', '191', '141', '164', '265', '187', '143', '166', '169', '267', '204', '15', '167', '171', '269', '173', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[0]['Lake'] == ['105', '107', 'Lake', '10', '101', '103', '109']
assert sass[0]['1'] == ['189', '185', '271', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']

View File

@@ -6209,9 +6209,17 @@ class TestApi:
sass = calculate_service_area(p) sass = calculate_service_area(p)
assert len(sass) == 25 assert len(sass) == 25
assert sass[0] == {'River': ['River', '60', '61', '123', '601', '121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '267', '107', '141', '164', '265', '187', '189', '143', '166', '169', '204', '15', '167', '171', '269', '185', '173', '271', '184', '199', '205', '201', '207', '273', '203', '275'], '1': ['1', '40', '179', '177', '183', '181', '185', '189', '35', '271', '184', '187', '171', '205', '204', '173', '207', '273', '199', '275', '201', '203'], '2': ['2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '207', '219', '225', '275', '201', '203'], '3': ['3', '20', '127', '125', '129', '121', '153', '131', '139', '120', '119', '151', '141', '117', '257', '157', '149', '143', '115', '259', '261', '159', '147', '15', '111', '113', '263', '161', '145', '197', '193', '105', '163', '195', '191', '267', '107', '164', '265', '187', '189', '166', '169', '204', '167', '171', '269', '185', '173', '271', '184', '199', '205', '201', '207', '273', '203', '275']} assert sass[0]['River'] == ['River', '60', '61', '123', '601']
assert sass[1] == {'River': ['River', '60', '61', '123', '601', '121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '107', '141', '164', '265', '187', '143', '166', '169', '267', '204', '15', '167', '171', '269', '189', '185', '173', '271', '184', '199', '205', '201', '207', '273', '203', '275'], 'Lake': ['Lake', '10', '101', '103', '105', '109', '107', '111', '115', '113', '197', '193', '191', '187', '204', '185', '184', '205', '207', '273', '275', '199', '201', '203'], '1': ['1', '40', '179', '177', '183', '181', '185', '189', '35', '271', '184', '187', '171', '205', '204', '173', '207', '273', '199', '275', '201', '203'], '2': ['2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '207', '219', '225', '275', '201', '203'], '3': ['3', '20', '127', '125', '129', '121', '153', '131', '139', '120', '119', '151', '141', '117', '257', '157', '149', '143', '115', '259', '261', '159', '147', '15', '111', '113', '263', '161', '145', '197', '193', '105', '163', '195', '191', '107', '164', '265', '187', '166', '169', '267', '204', '167', '171', '269', '189', '185', '173', '271', '184', '199', '205', '201', '207', '273', '203', '275']} assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '267', '107', '141', '164', '265', '187', '189', '143', '166', '169', '204', '15', '167', '171', '269', '173', '271', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[0]['1'] == ['185', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
assert sass[1]['River'] == ['River', '60', '61', '123', '601']
assert sass[1]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '145', '163', '195', '191', '141', '164', '265', '187', '143', '166', '169', '267', '204', '15', '167', '171', '269', '173', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[1]['Lake'] == ['105', '107', 'Lake', '10', '101', '103', '109']
assert sass[1]['1'] == ['189', '185', '271', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[1]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
self.leave(p) self.leave(p)