From 580a1ab9ac5afa0faf6cb53ae5ba032539363684 Mon Sep 17 00:00:00 2001 From: Alexey Zakharenkov <35913079+alexey-zakharenkov@users.noreply.github.com> Date: Fri, 2 Oct 2020 12:30:52 +0300 Subject: [PATCH] MWM size prediction model --- .gitignore | 2 + db/create_tables.sql | 8 +- docker-compose.yaml | 9 +- web/Dockerfile.web | 2 +- web/app/auto_split.py | 175 ++++++++----------------------- web/app/borders_api.py | 146 ++++++++++++++------------ web/app/config.py | 11 +- web/app/countries_structure.py | 64 +++++------ web/app/data/model.pkl | Bin 0 -> 39345 bytes web/app/data/mwm_data.xlsx | Bin 0 -> 186238 bytes web/app/data/prediction_model.py | 119 +++++++++++++++++++++ web/app/data/scaler.pkl | Bin 0 -> 632 bytes web/app/mwm_size_predictor.py | 29 +++++ web/app/static/borders.js | 82 +++++++++------ web/app/static/config.js | 1 + web/app/subregions.py | 102 ++++++++++++++++++ web/app/templates/index.html | 27 ++--- 17 files changed, 491 insertions(+), 286 deletions(-) create mode 100644 web/app/data/model.pkl create mode 100644 web/app/data/mwm_data.xlsx create mode 100644 web/app/data/prediction_model.py create mode 100644 web/app/data/scaler.pkl create mode 100644 web/app/mwm_size_predictor.py create mode 100644 web/app/subregions.py diff --git a/.gitignore b/.gitignore index 8d35cb3..c266415 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ __pycache__ *.pyc +.idea +nohup.out diff --git a/db/create_tables.sql b/db/create_tables.sql index ac098b7..b214ae7 100644 --- a/db/create_tables.sql +++ b/db/create_tables.sql @@ -14,7 +14,7 @@ CREATE TABLE borders ( count_k INTEGER, modified TIMESTAMP NOT NULL, cmnt VARCHAR(500), - mwm_size_est double precision + mwm_size_est REAL ); CREATE INDEX borders_geom_gits_idx ON borders USING gist (geom); CREATE INDEX borders_parent_id_idx ON borders (parent_id); @@ -29,15 +29,15 @@ CREATE TABLE borders_backup ( count_k INTEGER, modified TIMESTAMP NOT NULL, cmnt VARCHAR(500), - mwm_size_est double precision, + mwm_size_est REAL, PRIMARY KEY (backup, id) ); CREATE TABLE splitting ( osm_border_id BIGINT NOT NULL REFERENCES osm_borders(osm_id), -- reference to parent osm region subregion_ids BIGINT[] NOT NULL, - mwm_size_est double precision NOT NULL, - mwm_size_thr double precision NOT NULL, + mwm_size_est REAL NOT NULL, + mwm_size_thr INTEGER NOT NULL, -- mwm size threshold in Kb, 4-bytes INTEGER is enough geom geometry NOT NULL ); CREATE INDEX splitting_idx ON splitting (osm_border_id, mwm_size_thr); diff --git a/docker-compose.yaml b/docker-compose.yaml index 2854dc1..57a9140 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -21,13 +21,14 @@ services: context: ./db dockerfile: Dockerfile.db args: - PLANET_URL: http://generator.testdata.mapsme.cloud.devmail.ru/planet/planet-latest.o5m - PLANET_URL_external: https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf - PLANET_URL_small: http://download.geofabrik.de/africa/eritrea-latest.osm.pbf + PLANET_URL_full: https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf + PLANET_URL: http://download.geofabrik.de/africa/eritrea-latest.osm.pbf container_name: db restart: always environment: POSTGRES_HOST_AUTH_METHOD: password POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres - + ports: + - "55432:5432" + diff --git a/web/Dockerfile.web b/web/Dockerfile.web index 5778d0c..9f12b71 100644 --- a/web/Dockerfile.web +++ b/web/Dockerfile.web @@ -1,6 +1,6 @@ FROM tiangolo/uwsgi-nginx-flask:latest -RUN pip install flask_cors flask_compress psycopg2 unidecode +RUN pip install flask_cors flask_compress psycopg2 unidecode numpy sklearn COPY app /app COPY ./uwsgi.ini /app diff --git a/web/app/auto_split.py b/web/app/auto_split.py index 44cbb65..0c0e538 100644 --- a/web/app/auto_split.py +++ b/web/app/auto_split.py @@ -6,20 +6,21 @@ from collections import defaultdict from config import ( AUTOSPLIT_TABLE as autosplit_table, - TABLE as table, - OSM_TABLE as osm_table + OSM_TABLE as osm_table, + MWM_SIZE_THRESHOLD, ) +from subregions import get_subregions_info class DisjointClusterUnion: """Disjoint set union implementation for administrative subregions.""" - def __init__(self, region_id, subregions, thresholds): + def __init__(self, region_id, subregions, mwm_size_thr=None): self.region_id = region_id self.subregions = subregions - self.city_population_thr, self.cluster_population_thr = thresholds + self.mwm_size_thr = mwm_size_thr or MWM_SIZE_THRESHOLD self.representatives = {sub_id: sub_id for sub_id in subregions} - # a cluster is one or more subregions with common borders + # A cluster is one or more subregions with common borders self.clusters = {} # representative => cluster object # At the beginning, each subregion forms a cluster. @@ -28,27 +29,20 @@ class DisjointClusterUnion: self.clusters[subregion_id] = { 'representative': subregion_id, 'subregion_ids': [subregion_id], - 'population': data['population'], - 'big_cities_cnt': sum(1 for c in data['cities'] if self.is_city_big(c)), + 'mwm_size_est': data['mwm_size_est'], 'finished': False, # True if the cluster cannot be merged with another } - - def is_city_big(self, city): - return city['population'] >= self.city_population_thr - def get_smallest_cluster(self): """Find minimal cluster without big cities.""" smallest_cluster_id = min( filter( - lambda cluster_id: ( - not self.clusters[cluster_id]['finished'] and - self.clusters[cluster_id]['big_cities_cnt'] == 0) - , + lambda cluster_id: + not self.clusters[cluster_id]['finished'], self.clusters.keys() ), default=None, - key=lambda cluster_id: self.clusters[cluster_id]['population'] + key=lambda cluster_id: self.clusters[cluster_id]['mwm_size_est'] ) return smallest_cluster_id @@ -63,9 +57,9 @@ class DisjointClusterUnion: self.representatives[subregion_id] = representative return representative - def get_cluster_population(self, subregion_id): + def get_cluster_mwm_size_est(self, subregion_id): cluster_id = self.find_cluster(subregion_id) - return self.clusters[cluster_id]['population'] + return self.clusters[cluster_id]['mwm_size_est'] def get_cluster_count(self): return len(self.clusters) @@ -77,8 +71,7 @@ class DisjointClusterUnion: r_cluster = self.clusters[retained_cluster_id] d_cluster = self.clusters[dropped_cluster_id] r_cluster['subregion_ids'].extend(d_cluster['subregion_ids']) - r_cluster['population'] += d_cluster['population'] - r_cluster['big_cities_cnt'] += d_cluster['big_cities_cnt'] + r_cluster['mwm_size_est'] += d_cluster['mwm_size_est'] del self.clusters[dropped_cluster_id] self.representatives[dropped_cluster_id] = retained_cluster_id return retained_cluster_id @@ -95,52 +88,13 @@ class DisjointClusterUnion: return subregion_ids -def enrich_with_population_and_cities(conn, subregions): - cursor = conn.cursor() - ids = ','.join(str(x) for x in subregions.keys()) - cursor.execute(f""" - SELECT b.osm_id, c.name, c.population - FROM {osm_table} b, osm_cities c - WHERE b.osm_id IN ({ids}) AND ST_CONTAINS(b.way, c.center) - """ - ) - for rec in cursor: - sub_id = int(rec[0]) - subregions[sub_id]['cities'].append({ - 'name': rec[1], - 'population': int(rec[2]) - }) - subregions[sub_id]['population'] += int(rec[2]) - - -def find_subregions(conn, region_id, next_level): - cursor = conn.cursor() - cursor.execute(f""" - SELECT subreg.osm_id, subreg.name - FROM {osm_table} reg, {osm_table} subreg - WHERE reg.osm_id = %s AND subreg.admin_level = %s AND - ST_Contains(reg.way, subreg.way) - """, - (region_id, next_level) - ) - subregions = { - int(rec[0]): - { - 'osm_id': int(rec[0]), - 'name': rec[1], - 'population': 0, - 'cities': [] - } - for rec in cursor - } - if subregions: - enrich_with_population_and_cities(conn, subregions) - return subregions - - -def get_best_cluster_to_join_with(small_cluster_id, dcu: DisjointClusterUnion, common_border_matrix): +def get_best_cluster_to_join_with(small_cluster_id, + dcu: DisjointClusterUnion, + common_border_matrix): if small_cluster_id not in common_border_matrix: - return None # this may be if a subregion is isolated, like Bezirk Lienz inside Tyrol, Austria + # This may be if a subregion is isolated, + # like Bezirk Lienz inside Tyrol, Austria + return None common_borders = defaultdict(lambda: 0.0) # cluster representative => common border length subregion_ids = dcu.get_cluster_subregion_ids(small_cluster_id) for subregion_id in subregion_ids: @@ -148,29 +102,26 @@ def get_best_cluster_to_join_with(small_cluster_id, dcu: DisjointClusterUnion, c other_cluster_id = dcu.find_cluster(other_subregion_id) if other_cluster_id != small_cluster_id: common_borders[other_cluster_id] += length - #print(f"common_borders={json.dumps(common_borders)} of len {len(common_borders)}") - #common_borders = {k:v for k,v in common_borders.items() if v > 0.0} if not common_borders: return None total_common_border_length = sum(common_borders.values()) - total_adjacent_population = sum(dcu.get_cluster_population(x) for x in common_borders) + total_adjacent_mwm_size_est = sum(dcu.get_cluster_mwm_size_est(x) for x in common_borders) choice_criterion = ( ( lambda cluster_id: ( - common_borders[cluster_id]/total_common_border_length + - -dcu.get_cluster_population(cluster_id)/total_adjacent_population + common_borders[cluster_id]/total_common_border_length + + -dcu.get_cluster_mwm_size_est(cluster_id)/total_adjacent_mwm_size_est ) - ) if total_adjacent_population else + ) if total_adjacent_mwm_size_est else lambda cluster_id: ( common_borders[cluster_id]/total_common_border_length ) ) - small_cluster_population = dcu.get_cluster_population(small_cluster_id) best_cluster_id = max( filter( lambda cluster_id: ( - small_cluster_population + dcu.get_cluster_population(cluster_id) - <= dcu.cluster_population_thr + dcu.clusters[small_cluster_id]['mwm_size_est'] + + dcu.clusters[cluster_id]['mwm_size_est'] <= dcu.mwm_size_thr ), common_borders.keys() ), @@ -207,39 +158,31 @@ def calculate_common_border_matrix(conn, subregion_ids): def find_golden_splitting(conn, border_id, next_level, - country_region_name, thresholds): - subregions = find_subregions(conn, border_id, next_level) + country_region_name, mwm_size_thr): + subregions = get_subregions_info(conn, border_id, osm_table, + next_level, need_cities=True) if not subregions: - print(f"No subregions for {border_id} {country_region_name}") return - dcu = DisjointClusterUnion(border_id, subregions, thresholds) + dcu = DisjointClusterUnion(border_id, subregions, mwm_size_thr) #save_splitting_to_file(dcu, f'all_{country_region_name}') all_subregion_ids = dcu.get_all_subregion_ids() common_border_matrix = calculate_common_border_matrix(conn, all_subregion_ids) i = 0 while True: - with open(f"clusters-{i:02d}.json", 'w') as f: - json.dump(dcu.clusters, f, ensure_ascii=False, indent=2) if dcu.get_cluster_count() == 1: return dcu i += 1 - #print(f"i = {i}") smallest_cluster_id = dcu.get_smallest_cluster() if not smallest_cluster_id: - return dcu # TODO: return target splitting - #print(f"smallest cluster = {json.dumps(dcu.clusters[smallest_cluster_id])}") + return dcu best_cluster_id = get_best_cluster_to_join_with(smallest_cluster_id, dcu, common_border_matrix) - if not best_cluster_id: # !!! a case for South West England and popul 500000 - dcu.mark_cluster_finished(smallest_cluster_id) + if not best_cluster_id: + dcu.mark_cluster_finished(smallest_cluster_id) continue assert (smallest_cluster_id != best_cluster_id), f"{smallest_cluster_id}" - #print(f"best cluster = {json.dumps(dcu.clusters[best_cluster_id])}") - new_cluster_id = dcu.union(smallest_cluster_id, best_cluster_id) - #print(f"{json.dumps(dcu.clusters[new_cluster_id])}") - #print() - #import sys; sys.exit() + dcu.union(smallest_cluster_id, best_cluster_id) return dcu @@ -279,6 +222,9 @@ def write_polygons_to_poly(file, polygons, name_prefix): def save_splitting_to_file(conn, dcu: DisjointClusterUnion, filename_prefix=None): + """May be used for debugging""" + GENERATE_ALL_POLY=False + FOLDER='split_results' with open(f"{FOLDER}/{filename_prefix}.poly", 'w') as poly_file: poly_file.write(f"{filename_prefix}\n") for cluster_id, data in dcu.clusters.items(): @@ -297,7 +243,7 @@ def save_splitting_to_file(conn, dcu: DisjointClusterUnion, filename_prefix=None poly_file.write('END\n') with open(f"{FOLDER}/{filename_prefix}-splitting.json", 'w') as f: json.dump(dcu.clusters, f, ensure_ascii=False, indent=2) - + def save_splitting_to_db(conn, dcu: DisjointClusterUnion): cursor = conn.cursor() @@ -305,8 +251,7 @@ def save_splitting_to_db(conn, dcu: DisjointClusterUnion): cursor.execute(f""" DELETE FROM {autosplit_table} WHERE osm_border_id = {dcu.region_id} - AND city_population_thr = {dcu.city_population_thr} - AND cluster_population_thr = {dcu.cluster_population_thr} + AND mwm_size_thr = {dcu.mwm_size_thr} """) for cluster_id, data in dcu.clusters.items(): subregion_ids = data['subregion_ids'] @@ -314,20 +259,19 @@ def save_splitting_to_db(conn, dcu: DisjointClusterUnion): cluster_geometry_sql = get_union_sql(subregion_ids) cursor.execute(f""" INSERT INTO {autosplit_table} (osm_border_id, subregion_ids, geom, - city_population_thr, cluster_population_thr) + mwm_size_thr, mwm_size_est) VALUES ( {dcu.region_id}, '{{{','.join(str(x) for x in subregion_ids)}}}', ({cluster_geometry_sql}), - {dcu.city_population_thr}, - {dcu.cluster_population_thr} + {dcu.mwm_size_thr}, + {data['mwm_size_est']} ) - """) + """) conn.commit() - + def get_region_and_country_names(conn, region_id): - #if region_id != -1574364: return cursor = conn.cursor() try: cursor.execute( @@ -355,18 +299,15 @@ def get_region_and_country_names(conn, region_id): print(f"Many countries for region '{region_name}' id={region_id}") return region_name, country_name -DEFAULT_CITY_POPULATION_THRESHOLD = 500000 -DEFAULT_CLUSTER_POPULATION_THR = 500000 def split_region(conn, region_id, next_level, - thresholds=(DEFAULT_CITY_POPULATION_THRESHOLD, - DEFAULT_CLUSTER_POPULATION_THR), + mwm_size_thr, save_to_files=False): region_name, country_name = get_region_and_country_names(conn, region_id) region_name = region_name.replace('/', '|') country_region_name = f"{country_name}_{region_name}" if country_name else region_name dcu = find_golden_splitting(conn, region_id, next_level, - country_region_name, thresholds) + country_region_name, mwm_size_thr) if dcu is None: return @@ -378,30 +319,6 @@ def save_splitting(dcu: DisjointClusterUnion, conn, save_splitting_to_db(conn, dcu) if save_to_files: print(f"Saving {country_region_name}") - filename_prefix = f"{country_region_name}-{dcu.city_population_thrR}" + filename_prefix = f"{country_region_name}-{dcu.city_population_thr}" save_splitting_to_file(conn, dcu, filename_prefix) - -GENERATE_ALL_POLY=False -FOLDER='split_results' -#CITY_POPULATION_THR = 500000 -#CLUSTER_POPULATION_THR = 500000 - -if __name__ == '__main__': - conn = psycopg2.connect("dbname=az_gis3") - - PREFIX = "UBavaria" - CITY_POPULATION_THR = 500000 - CLUSTER_POPULATION_THR = 500000 - - region_id = -162050 # -165475 # California ## -162050 # Florida - region_id = -2145274 # Upper Bavaria - #region_id = -151339 # South West England - #region_id = -58446 # Scotland - dcu = find_golden_splitting(region_id) - make_polys(dcu.clusters) - with open(f"{PREFIX}_{CITY_POPULATION_THR}_splitting{region_id}-poplen.json", 'w') as f: - json.dump(dcu.clusters, f, ensure_ascii=False, indent=2) - - - diff --git a/web/app/borders_api.py b/web/app/borders_api.py index 422ce65..b725ad0 100755 --- a/web/app/borders_api.py +++ b/web/app/borders_api.py @@ -25,6 +25,7 @@ from countries_structure import ( create_countries_initial_structure, get_osm_border_name_by_osm_id, ) +from subregions import get_subregions_info try: from lxml import etree @@ -78,7 +79,8 @@ def fetch_borders(**kwargs): query = f""" SELECT name, geometry, nodes, modified, disabled, count_k, cmnt, (CASE WHEN area = 'NaN' THEN 0 ELSE area END) AS area, - id, admin_level, parent_id, parent_name + id, admin_level, parent_id, parent_name, + mwm_size_est FROM ( SELECT name, ST_AsGeoJSON({geom}, 7) as geometry, @@ -95,7 +97,8 @@ def fetch_borders(**kwargs): parent_id, ( SELECT name FROM {table} WHERE id = t.parent_id - ) AS parent_name + ) AS parent_name, + mwm_size_est FROM {table} t WHERE ({where_clause}) {leaves_filter} ) q @@ -112,18 +115,19 @@ def fetch_borders(**kwargs): 'disabled': rec[4], 'count_k': rec[5], 'comment': rec[6], 'area': rec[7], - 'id': region_id, 'country_id': country_id, + 'id': region_id, 'admin_level': rec[9], 'parent_id': rec[10], 'parent_name': rec[11] or '', - 'country_name': country_name + 'country_id': country_id, + 'country_name': country_name, + 'mwm_size_est': rec[12] } feature = {'type': 'Feature', 'geometry': json.loads(rec[1]), 'properties': props } borders.append(feature) - #print([x['properties'] for x in borders]) return borders def simplify_level_to_postgis_value(simplify_level): @@ -228,8 +232,8 @@ def query_crossing(): pass return jsonify(type='FeatureCollection', features=result) -@app.route('/tables') -def check_osm_table(): +@app.route('/config') +def get_server_configuration(): osm = False backup = False old = [] @@ -260,7 +264,9 @@ def check_osm_table(): crossing = True except psycopg2.Error as e: pass - return jsonify(osm=osm, tables=old, readonly=config.READONLY, backup=backup, crossing=crossing) + return jsonify(osm=osm, tables=old, readonly=config.READONLY, + backup=backup, crossing=crossing, + mwm_size_thr=config.MWM_SIZE_THRESHOLD) @app.route('/search') def search(): @@ -341,9 +347,10 @@ def join_borders(): cur.execute(f""" UPDATE {table} SET id = {free_id}, - geom = ST_Union(geom, b2.g), + geom = ST_Union({table}.geom, b2.geom), + mwm_size_est = {table}.mwm_size_est + b2.mwm_size_est, count_k = -1 - FROM (SELECT geom AS g FROM {table} WHERE id = %s) AS b2 + FROM (SELECT geom, mwm_size_est FROM {table} WHERE id = %s) AS b2 WHERE id = %s""", (region_id2, region_id1)) cur.execute(f"DELETE FROM {table} WHERE id = %s", (region_id2,)) except psycopg2.Error as e: @@ -630,24 +637,23 @@ def divide_preview(): if not is_admin: return jsonify(status="Could not apply auto-division to non-administrative regions") try: - city_population_thr = int(request.args.get('city_population_thr')) - cluster_population_thr = int(request.args.get('cluster_population_thr')) + mwm_size_thr = int(request.args.get('mwm_size_thr')) except ValueError: return jsonify(status='Not a number in thresholds.') return divide_into_clusters_preview( region_ids, next_level, - (city_population_thr, cluster_population_thr)) + mwm_size_thr) else: return divide_into_subregions_preview(region_ids, next_level) -def get_subregions(region_ids, next_level): +def get_subregions_for_preview(region_ids, next_level): subregions = list(itertools.chain.from_iterable( - get_subregions_one(region_id, next_level) + get_subregions_one_for_preview(region_id, next_level) for region_id in region_ids )) return subregions -def get_subregions_one(region_id, next_level): +def get_subregions_one_for_preview(region_id, next_level): osm_table = config.OSM_TABLE table = config.TABLE cur = g.conn.cursor() @@ -671,28 +677,28 @@ def get_subregions_one(region_id, next_level): subregions.append(feature) return subregions -def get_clusters(region_ids, next_level, thresholds): +def get_clusters_for_preview(region_ids, next_level, thresholds): clusters = list(itertools.chain.from_iterable( - get_clusters_one(region_id, next_level, thresholds) + get_clusters_for_preview_one(region_id, next_level, thresholds) for region_id in region_ids )) return clusters -def get_clusters_one(region_id, next_level, thresholds): +def get_clusters_for_preview_one(region_id, next_level, mwm_size_thr): autosplit_table = config.AUTOSPLIT_TABLE cursor = g.conn.cursor() where_clause = f""" osm_border_id = %s - AND city_population_thr = %s - AND cluster_population_thr = %s + AND mwm_size_thr = %s """ - splitting_sql_params = (region_id,) + thresholds + splitting_sql_params = (region_id, mwm_size_thr) cursor.execute(f""" SELECT 1 FROM {autosplit_table} WHERE {where_clause} """, splitting_sql_params) if cursor.rowcount == 0: - split_region(g.conn, region_id, next_level, thresholds) + split_region(g.conn, region_id, next_level, mwm_size_thr) + cursor.execute(f""" SELECT subregion_ids[1], ST_AsGeoJSON(ST_SimplifyPreserveTopology(geom, 0.01)) as way FROM {autosplit_table} @@ -700,23 +706,24 @@ def get_clusters_one(region_id, next_level, thresholds): """, splitting_sql_params) clusters = [] for rec in cursor: - cluster = { 'type': 'Feature', - 'geometry': json.loads(rec[1]), - 'properties': {'osm_id': int(rec[0])} + cluster = { + 'type': 'Feature', + 'geometry': json.loads(rec[1]), + 'properties': {'osm_id': int(rec[0])} } clusters.append(cluster) return clusters def divide_into_subregions_preview(region_ids, next_level): - subregions = get_subregions(region_ids, next_level) + subregions = get_subregions_for_preview(region_ids, next_level) return jsonify( status='ok', subregions={'type': 'FeatureCollection', 'features': subregions} ) -def divide_into_clusters_preview(region_ids, next_level, thresholds): - subregions = get_subregions(region_ids, next_level) - clusters = get_clusters(region_ids, next_level, thresholds) +def divide_into_clusters_preview(region_ids, next_level, mwm_size_thr): + subregions = get_subregions_for_preview(region_ids, next_level) + clusters = get_clusters_for_preview(region_ids, next_level, mwm_size_thr) return jsonify( status='ok', subregions={'type': 'FeatureCollection', 'features': subregions}, @@ -744,51 +751,53 @@ def divide(): if not is_admin: return jsonify(status="Could not apply auto-division to non-administrative regions") try: - city_population_thr = int(request.args.get('city_population_thr')) - cluster_population_thr = int(request.args.get('cluster_population_thr')) + mwm_size_thr = int(request.args.get('mwm_size_thr')) except ValueError: return jsonify(status='Not a number in thresholds.') return divide_into_clusters( region_ids, next_level, - (city_population_thr, cluster_population_thr)) + mwm_size_thr) else: return divide_into_subregions(region_ids, next_level) def divide_into_subregions(region_ids, next_level): - table = config.TABLE - osm_table = config.OSM_TABLE - cur = g.conn.cursor() for region_id in region_ids: - is_admin = is_administrative_region(region_id) - if is_admin: - # TODO: rewrite SELECT into join rather than subquery to enable gist index - cur.execute(f""" - INSERT INTO {table} (id, geom, name, parent_id, modified, count_k) - SELECT osm_id, way, name, %s, now(), -1 - FROM {osm_table} - WHERE ST_Contains( - (SELECT geom FROM {table} WHERE id = %s), way - ) - AND admin_level = {next_level} - """, (region_id, region_id,) - ) - else: - cur.execute(f""" - INSERT INTO {table} (id, geom, name, parent_id, modified, count_k) - SELECT osm_id, way, name, (SELECT parent_id FROM {table} WHERE id = %s), now(), -1 - FROM {osm_table} - WHERE ST_Contains( - (SELECT geom FROM {table} WHERE id = %s), way - ) - AND admin_level = {next_level} - """, (region_id, region_id,) - ) - cur.execute(f"DELETE FROM {table} WHERE id = %s", (region_id,)) - + divide_into_subregions_one(region_id, next_level) g.conn.commit() return jsonify(status='ok') -def divide_into_clusters(region_ids, next_level, thresholds): +def divide_into_subregions_one(region_id, next_level): + table = config.TABLE + osm_table = config.OSM_TABLE + subregions = get_subregions_info(g.conn, region_id, table, + next_level, need_cities=False) + cursor = g.conn.cursor() + is_admin = is_administrative_region(region_id) + if is_admin: + for subregion_id, data in subregions.items(): + cursor.execute(f""" + INSERT INTO {table} + (id, geom, name, parent_id, modified, count_k, mwm_size_est) + SELECT osm_id, way, name, %s, now(), -1, {data['mwm_size_est']} + FROM {osm_table} + WHERE osm_id = %s + """, (region_id, subregion_id) + ) + else: + for subregion_id, data in subregions.items(): + cursor.execute(f""" + INSERT INTO {table} + (id, geom, name, parent_id, modified, count_k, mwm_size_est) + SELECT osm_id, way, name, + (SELECT parent_id FROM {table} WHERE id = %s), + now(), -1, {data['mwm_size_est']} + FROM {osm_table} + WHERE osm_id = %s + """, (region_id, subregion_id) + ) + cursor.execute(f"DELETE FROM {table} WHERE id = %s", (region_id,)) + +def divide_into_clusters(region_ids, next_level, mwm_size_thr): table = config.TABLE autosplit_table = config.AUTOSPLIT_TABLE cursor = g.conn.cursor() @@ -799,16 +808,15 @@ def divide_into_clusters(region_ids, next_level, thresholds): where_clause = f""" osm_border_id = %s - AND city_population_thr = %s - AND cluster_population_thr = %s + AND mwm_size_thr = %s """ - splitting_sql_params = (region_id,) + thresholds + splitting_sql_params = (region_id, mwm_size_thr) cursor.execute(f""" SELECT 1 FROM {autosplit_table} WHERE {where_clause} """, splitting_sql_params) if cursor.rowcount == 0: - split_region(g.conn, region_id, next_level, thresholds) + split_region(g.conn, region_id, next_level, mwm_size_thr) free_id = get_free_id() counter = 0 @@ -830,8 +838,8 @@ def divide_into_clusters(region_ids, next_level, thresholds): subregion_id = free_id name = f"{base_name}_{counter}" insert_cursor.execute(f""" - INSERT INTO {table} (id, name, parent_id, geom, modified, count_k) - SELECT {subregion_id}, %s, osm_border_id, geom, now(), -1 + INSERT INTO {table} (id, name, parent_id, geom, modified, count_k, mwm_size_est) + SELECT {subregion_id}, %s, osm_border_id, geom, now(), -1, mwm_size_est FROM {autosplit_table} WHERE subregion_ids[1] = %s AND {where_clause} """, (name, cluster_id,) + splitting_sql_params) g.conn.commit() diff --git a/web/app/config.py b/web/app/config.py index 7b8d2e2..a6b04d2 100644 --- a/web/app/config.py +++ b/web/app/config.py @@ -8,11 +8,13 @@ READONLY = False TABLE = 'borders' # from where OSM borders are imported OSM_TABLE = 'osm_borders' +# All populated places in OSM +OSM_PLACES_TABLE = 'osm_places' # transit table for autosplitting results AUTOSPLIT_TABLE = 'splitting' -## tables with borders for reference +# tables with borders for reference OTHER_TABLES = { - #'old': 'old_borders' + #'old': 'old_borders' } # backup table BACKUP = 'borders_backup' @@ -28,3 +30,8 @@ IMPORT_ERROR_ALERT = False DAEMON_STATUS_PATH = '/tmp/borders-daemon-status.txt' DAEMON_PID_PATH = '/tmp/borders-daemon.pid' DAEMON_LOG_PATH = '/var/log/borders-daemon.log' +# mwm size threshold in Kb +MWM_SIZE_THRESHOLD = 70*1024 +# Estimated mwm size is predicted by the 'model.pkl' with 'scaler.pkl' for X +MWM_SIZE_PREDICTION_MODEL_PATH = '/app/data/model.pkl' +MWM_SIZE_PREDICTION_MODEL_SCALER_PATH = '/app/data/scaler.pkl' diff --git a/web/app/countries_structure.py b/web/app/countries_structure.py index cbee332..f230716 100644 --- a/web/app/countries_structure.py +++ b/web/app/countries_structure.py @@ -2,6 +2,8 @@ import itertools import config +from subregions import get_subregions_info + table = config.TABLE osm_table = config.OSM_TABLE @@ -260,43 +262,32 @@ def _clear_borders(conn): conn.commit() -def _find_subregions(conn, osm_ids, next_level, parents, names): +def _find_subregions(conn, osm_ids, next_level, regions): """Return subregions of level 'next_level' for regions with osm_ids.""" - cursor = conn.cursor() - parent_osm_ids = ','.join(str(x) for x in osm_ids) - cursor.execute(f""" - SELECT b.osm_id, b.name, subb.osm_id, subb.name - FROM {osm_table} b, {osm_table} subb - WHERE subb.admin_level=%s - AND b.osm_id IN ({parent_osm_ids}) - AND ST_Contains(b.way, subb.way) - """, - (next_level,) - ) - - # parent_osm_id => [(osm_id, name), (osm_id, name), ...] subregion_ids = [] - - for rec in cursor: - parent_osm_id = rec[0] - osm_id = rec[2] - parents[osm_id] = parent_osm_id - name = rec[3] - names[osm_id] = name - subregion_ids.append(osm_id) + for osm_id in osm_ids: + more_subregions = get_subregions_info(conn, osm_id, table, + next_level, need_cities=False) + for subregion_id, subregion_data in more_subregions.items(): + region_data = regions.setdefault(subregion_id, {}) + region_data['name'] = subregion_data['name'] + region_data['mwm_size_est'] = subregion_data['mwm_size_est'] + region_data['parent_id'] = osm_id + subregion_ids.append(subregion_id) return subregion_ids -def _create_regions(conn, osm_ids, parents, names): +def _create_regions(conn, osm_ids, regions): if not osm_ids: return osm_ids = list(osm_ids) # to ensure order cursor = conn.cursor() sql_values = ','.join( f'({osm_id},' - '%s,' + '%s,' + f"{regions[osm_id].get('parent_id', 'NULL')}," + f"{regions[osm_id].get('mwm_size_est', 'NULL')}," f'(SELECT way FROM {osm_table} WHERE osm_id={osm_id}),' - f'{parents[osm_id] or "NULL"},' 'now())' for osm_id in osm_ids ) @@ -304,21 +295,23 @@ def _create_regions(conn, osm_ids, parents, names): #print(f"names={tuple(names[osm_id] for osm_id in osm_ids)}") #print(f"all parents={parents}") cursor.execute(f""" - INSERT INTO {table} (id, name, geom, parent_id, modified) + INSERT INTO {table} (id, name, parent_id, mwm_size_est, geom, modified) VALUES {sql_values} - """, tuple(names[osm_id] for osm_id in osm_ids) + """, tuple(regions[osm_id]['name'] for osm_id in osm_ids) ) def _make_country_structure(conn, country_osm_id): - names = {} # osm_id => osm name - parents = {} # osm_id => parent_osm_id + regions = {} # osm_id: { 'name': name, + # 'mwm_size_est': size, + # 'parent_id': parent_id } country_name = get_osm_border_name_by_osm_id(conn, country_osm_id) - names[country_osm_id] = country_name - parents[country_osm_id] = None + country_data = regions.setdefault(country_osm_id, {}) + country_data['name'] = country_name + # TODO: country_data['mwm_size_est'] = ... - _create_regions(conn, [country_osm_id], parents, names) + _create_regions(conn, [country_osm_id], regions) if country_initial_levels.get(country_name): admin_levels = country_initial_levels[country_name] @@ -332,18 +325,19 @@ def _make_country_structure(conn, country_osm_id): f"AL={admin_level}, prev-AL={prev_level}" ) subregion_ids = _find_subregions(conn, prev_region_ids, - admin_level, parents, names) - _create_regions(conn, subregion_ids, parents, names) + admin_level, regions) + _create_regions(conn, subregion_ids, regions) prev_region_ids = subregion_ids def create_countries_initial_structure(conn): _clear_borders(conn) cursor = conn.cursor() + # TODO: process overlapping countries, like Ukraine and Russia with common Crimea cursor.execute(f""" SELECT osm_id, name FROM {osm_table} - WHERE admin_level = 2 + WHERE admin_level = 2 and name != 'Ukraine' """ # and name in --('Germany', 'Luxembourg', 'Austria') # ({','.join(f"'{c}'" for c in country_initial_levels.keys())}) diff --git a/web/app/data/model.pkl b/web/app/data/model.pkl new file mode 100644 index 0000000000000000000000000000000000000000..412a7a87565c8fd6a09f40f195b9040aeecdb9d2 GIT binary patch literal 39345 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

X0 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 o&B^}>{re#ES7`q% 260, axis=1) # 260 - median of pop_density + +popul_column = 'urban_pop' # options are 'population and 'urban_pop' (for population of cities and towns only) +feature_names = [popul_column, 'area', 'city_cnt', 'hamlet_cnt'] +target_name = 'size' + +for feature in set(feature_names) - set(['area']): # if area is None it's an error! + data[feature] = data[feature].fillna(0) + + +scoring = 'neg_mean_squared_error' # another option is 'r2' + + +def my_cross_validation(sample): + X = sample[feature_names] + y = sample[target_name] + + sc_X = StandardScaler() + X = sc_X.fit_transform(X) + + lin_regression = LinearRegression(fit_intercept=False) + svr_linear = SVR(kernel='linear') + svr_rbf = SVR(kernel='rbf') + + for estimator_name, estimator in zip( + ('LinRegression', 'SVR_linear', 'SVR_rbf'), + (lin_regression, svr_linear, svr_rbf)): + cv_scores = cross_val_score(estimator, X, y, + cv=KFold(5, shuffle=True, random_state=1), + scoring=scoring) + mean_score = np.mean(cv_scores) + print(f"{estimator_name:15}", cv_scores, mean_score) + + +def my_grid_search(sample): + X = sample[feature_names] + y = sample[target_name] + + sc_X = StandardScaler() + X = sc_X.fit_transform(X) + + X_train, X_test, y_train, y_test = train_test_split( + X, y, test_size=0.2, random_state=0) + + C_array = [10 ** n for n in range(6, 7)] + gamma_array = [0.009 + i * 0.001 for i in range(-7, 11, 2)] + ['auto', 'scale'] + epsilon_array = [0.5 * i for i in range(0, 15)] + coef0_array = [-0.1, -0.01, 0, 0.01, 0.1] + param_grid = [ + {'kernel': ['linear'], 'C': C_array, 'epsilon': epsilon_array}, + {'kernel': ['rbf'], 'C': C_array, 'gamma': gamma_array, 'epsilon': epsilon_array}, + {'kernel': ['poly', 'sigmoid'], + 'C': C_array, 'gamma': gamma_array, 'epsilon': epsilon_array, 'coef0': coef0_array}, + ] + + svr = SVR() + grid_search = GridSearchCV(svr, param_grid, scoring=scoring) + grid_search.fit(X_train, y_train) + #means = grid_search.cv_results_['mean_test_score'] + #stds = grid_search.cv_results_['std_test_score'] + #print("Grid scores on development set:") + #for mean, std, params in zip(means, stds, grid_search.cv_results_['params']): + # print("%0.3f (+/-%0.03f) for %r" % (mean, std, params)) + + print("C", C_array) + print("gamma", gamma_array) + print("epsilon", epsilon_array) + print("coef0", coef0_array) + print("Best_params:", grid_search.best_params_, grid_search.best_score_) + + +def train_and_serialize_model(sample): + X = sample[feature_names] + y = sample[target_name] + + X_head = X[0:4] + scaler = StandardScaler() + X = scaler.fit_transform(X) + + # Parameters tuned with GridSearch + regressor = SVR(kernel='rbf', C=10**6, epsilon=0.0, gamma=0.012) + regressor.fit(X, y) + + print(regressor.predict(X[0:4])) + + # Serialize model + import pickle + with open('model.pkl', 'wb') as f: + pickle.dump(regressor, f) + with open('scaler.pkl', 'wb') as f: + pickle.dump(scaler, f) + + # Deserialize model and test it on X_head samples + with open('model.pkl', 'rb') as f: + regressor2 = pickle.load(f) + with open('scaler.pkl', 'rb') as f: + scaler2 = pickle.load(f) + print(regressor2.predict(scaler2.transform(X_head))) + + +if __name__ == '__main__': + train_and_serialize_model(data) + diff --git a/web/app/data/scaler.pkl b/web/app/data/scaler.pkl new file mode 100644 index 0000000000000000000000000000000000000000..4274cfbc42d6aa38fbcefa52399092cf6036663c GIT binary patch literal 632 zcmZ{i&ui2`6vwmO?RFcryLHvp+G?%8wzZ~9d$6EF>fQ|OAuE`Z!z7uSXg0~4nXKes z@mJmLMGs#56NE(sMe(NKO}r@dCLUC zLP|m!ScEaxzoZ}=b1XMF_H9hcqjrH3YQ7&2=G zJ1ZVVLGcchbQm`JMUxDHVCR3b5hYgOGfpFm%TVqSB#TMNV3#JX!tPqeggtE-(P6Zr zWwhKX>~%KjmKR|xq1&g!xS(_X<(e?pYLll{CSKOPpX%@<@2*+Bsp5;(xd$U9wb*U1 zzn-yF*w5jBneMfPDS}C-?4;2L9g#bw!=Ya8VP{;}eYk&S03rCa6h z`8W4Ys;_>`zJL4Ws|rUr95s!+m_FGpL2zu#u#y-~>oC(ZJf0dhs%W9xDlEmL4?lf; zep~%@VP(B@xvb`YKmPpvo3FwwhZCkz5{9Vvr%;Pf<_10}X--v{Ur^>@E;5zBAI{j7 literal 0 HcmV?d00001 diff --git a/web/app/mwm_size_predictor.py b/web/app/mwm_size_predictor.py new file mode 100644 index 0000000..112ff78 --- /dev/null +++ b/web/app/mwm_size_predictor.py @@ -0,0 +1,29 @@ +import numpy as np +import pickle + +import config + + +class MwmSizePredictor: + + def __init__(self): + with open(config.MWM_SIZE_PREDICTION_MODEL_PATH, 'rb') as f: + self.model = pickle.load(f) + with open(config.MWM_SIZE_PREDICTION_MODEL_SCALER_PATH, 'rb') as f: + self.scaler = pickle.load(f) + + def predict(self, features_array): + """1D or 2D array of feature values for predictions. Features are + 'urban_pop', 'area', 'city_cnt', 'hamlet_cnt' as defined for the + prediction model. + """ + X = np.array(features_array) + one_prediction = (X.ndim == 1) + if one_prediction: + X = X.reshape(1, -1) + X_scaled = self.scaler.transform(X) + predictions = self.model.predict(X_scaled) + if one_prediction: + return predictions[0] + else: + return predictions.tolist() diff --git a/web/app/static/borders.js b/web/app/static/borders.js index b0bc1d1..b0329e5 100644 --- a/web/app/static/borders.js +++ b/web/app/static/borders.js @@ -3,11 +3,14 @@ var STYLE_SELECTED = { stroke: true, color: '#ff3', weight: 3, fill: true, fillO var FILL_TOO_SMALL = '#0f0'; var FILL_TOO_BIG = '#800'; var FILL_ZERO = 'black'; -var OLD_BORDERS_NAME; // filled in checkHasOSM() -var IMPORT_ENABLED = true; -var map, borders = {}, bordersLayer, selectedId, editing = false, readonly = false; -var size_good = 50, size_bad = 70; +var map, borders = {}, bordersLayer, selectedId, editing = false; +var config = { // server config + READONLY: false, + MWM_SIZE_THR: 70, + OLD_BORDERS_NAME: undefined // may be filled in getServerConfiguration() +}; +var size_good, size_bad; var maxRank = 1; var tooSmallLayer = null; var oldBordersLayer = null; @@ -68,17 +71,17 @@ function init() { else $('#population_thresholds').hide(); }); - checkHasOSM(); + getServerConfiguration(); filterSelect(true); } -function checkHasOSM() { - $.ajax(getServer('tables'), { +function getServerConfiguration() { + $.ajax(getServer('config'), { success: function(res) { if( res.osm ) $('#osm_actions').css('display', 'block'); if( res.tables && res.tables.length > 0 ) { - OLD_BORDERS_NAME = res.tables[0]; + config.OLD_BORDERS_NAME = res.tables[0]; $('#old_action').css('display', 'block'); $('#josm_old').css('display', 'inline'); } @@ -91,7 +94,7 @@ function checkHasOSM() { $('#action_buttons').css('display', 'none'); $('#import_link').css('display', 'none'); $('#backups').css('display', 'none'); - readonly = true; + config.READONLY = true; } if( !res.readonly && IMPORT_ENABLED ) { $('#import_link').css('display', 'none'); @@ -100,6 +103,11 @@ function checkHasOSM() { var iframe = ''; // $('#filefm').after(iframe); } + size_bad = config.MWM_SIZE_THR = Math.round(parseInt(res.mwm_size_thr)/1024); + size_good = Math.round(size_bad * 0.7 / 10) * 10; + $('#r_green').val(size_good); + $('#r_red').val(size_bad); + $('#mwm_size_thr').val(config.MWM_SIZE_THR); } }); } @@ -148,11 +156,11 @@ function updateBorders() { crossingLayer.clearLayers(); } - if( oldBordersLayer != null && OLD_BORDERS_NAME ) { + if( oldBordersLayer != null && config.OLD_BORDERS_NAME ) { oldBordersLayer.clearLayers(); $.ajax(getServer('bbox'), { data: { - 'table': OLD_BORDERS_NAME, + 'table': config.OLD_BORDERS_NAME, 'simplify': simplified, 'xmin': b.getWest(), 'xmax': b.getEast(), @@ -302,6 +310,7 @@ function selectLayer(e) { $('#b_al').text(props['admin_level'] ? '('+props['admin_level']+')' : ''); $('#b_parent_name').text(props['parent_name']); $('#b_size').text(Math.round(props['count_k'] * BYTES_FOR_NODE / 1024 / 1024) + ' MB'); + $('#pa_size').text(Math.round(props['mwm_size_est']/1024) + ' MB'); //$('#b_nodes').text(borders[selectedId].layer.getLatLngs()[0].length); $('#b_nodes').text(props['nodes']); $('#b_date').text(props['modified']); @@ -317,7 +326,7 @@ function selectLayer(e) { function filterSelect(noRefresh) { var value = $('#f_type').val(); - $('#f_size').css('display', value == 'size' ? 'block' : 'none'); + $('#f_size').css('display', value.endsWith('size') ? 'block' : 'none'); $('#f_chars').css('display', value == 'chars' ? 'block' : 'none'); $('#f_comments').css('display', value == 'comments' ? 'block' : 'none'); $('#f_topo').css('display', value == 'topo' ? 'block' : 'none'); @@ -336,29 +345,47 @@ var colors = ['red', 'orange', 'yellow', 'lime', 'green', 'olive', 'cyan', 'dark 'blue', 'navy', 'magenta', 'purple', 'deeppink', 'brown'] //'black'; var alphabet = 'abcdefghijklmnopqrstuvwxyz'; +function getStringHash(str) { + var hash = 0, i, chr; + /* + for (i = 0; i < str.length; i++) { + chr = str.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; // Convert to 32bit integer + } + */ + hash = str.charCodeAt(0) + str.charCodeAt(1); + return hash; +} + function getCountryColor(props) { var country_name = props.country_name; if (!country_name) return 'black'; - var firstLetter = country_name[0].toLowerCase(); - var index = alphabet.indexOf(firstLetter); - if (index === -1) - return 'black'; - var indexInColors = index % colors.length; + var hash = getStringHash(country_name); + var indexInColors = Math.abs(hash) % colors.length; return colors[indexInColors]; } function getColor(props) { var color = STYLE_BORDER.color; var fType = $('#f_type').val(); - if( fType == 'size' ) { + if( fType == 'nodes_size' ) { if( props['count_k'] <= 0 ) color = FILL_ZERO; else if( props['count_k'] * BYTES_FOR_NODE < size_good * 1024 * 1024 ) color = FILL_TOO_SMALL; else if( props['count_k'] * BYTES_FOR_NODE > size_bad * 1024 * 1024 ) color = FILL_TOO_BIG; - } else if( fType == 'topo' ) { + } else if( fType == 'predict_size' ) { + if( props['mwm_size_est'] <= 0 ) + color = FILL_ZERO; + else if( props['mwm_size_est'] < size_good * 1024 ) + color = FILL_TOO_SMALL; + else if( props['mwm_size_est'] > size_bad * 1024 ) + color = FILL_TOO_BIG; + } + else if( fType == 'topo' ) { var rings = countRings([0, 0], props.layer); if( rings[1] > 0 ) color = FILL_TOO_BIG; @@ -471,7 +498,7 @@ function bJOSM() { function bJosmOld() { var b = map.getBounds(); importInJOSM('josm', { - 'table': OLD_BORDERS_NAME, + 'table': config.OLD_BORDERS_NAME, 'xmin': b.getWest(), 'xmax': b.getEast(), 'ymin': b.getSouth(), @@ -508,7 +535,7 @@ function finishRename() { } function bToggleRename() { - if( !selectedId || !(selectedId in borders) || readonly ) + if( !selectedId || !(selectedId in borders) || config.READONLY ) return; var rename_el = $('#rename'); if (rename_el.is(':hidden')) { @@ -952,11 +979,8 @@ function clearDivideLayers() { function bDividePreview() { var auto_divide = $('#auto_divide').prop('checked'); - if (auto_divide && ( - !$('#city_population_thr').val() || - !$('#cluster_population_thr').val()) - ) { - alert('Fill population thresholds'); + if (auto_divide && !$('#mwm_size_thr').val()) { + alert('Fill mmw size threshold'); return; } clearDivideLayers(); @@ -970,8 +994,7 @@ function bDividePreview() { 'apply_to_similar': apply_to_similar }; if (auto_divide) { - params['city_population_thr'] = $('#city_population_thr').val(); - params['cluster_population_thr'] = $('#cluster_population_thr').val(); + params['mwm_size_thr'] = parseInt($('#mwm_size_thr').val()) * 1024; } $.ajax(getServer('divpreview'), { data: params, @@ -1025,8 +1048,7 @@ function bDivideDo() { 'apply_to_similar': apply_to_similar }; if (auto_divide) { - params['city_population_thr'] = $('#city_population_thr').val(); - params['cluster_population_thr'] = $('#cluster_population_thr').val(); + params['mwm_size_thr'] = parseInt($('#mwm_size_thr').val()) * 1024; } $.ajax(getServer('divide'), { data: params, diff --git a/web/app/static/config.js b/web/app/static/config.js index d788be1..2d7f45e 100644 --- a/web/app/static/config.js +++ b/web/app/static/config.js @@ -1,4 +1,5 @@ const BYTES_FOR_NODE = 8; +const IMPORT_ENABLED = true; const SELF_URL = document.location.origin; diff --git a/web/app/subregions.py b/web/app/subregions.py new file mode 100644 index 0000000..d5ffff4 --- /dev/null +++ b/web/app/subregions.py @@ -0,0 +1,102 @@ +import config +from mwm_size_predictor import MwmSizePredictor + + +osm_table = config.OSM_TABLE +osm_places_table = config.OSM_PLACES_TABLE +size_predictor = MwmSizePredictor() + + +def get_subregions_info(conn, region_id, region_table, + next_level, need_cities=False): + """ + :param conn: psycopg2 connection + :param region_id: + :param region_table: maybe TABLE or OSM_TABLE from config.py + :param next_level: admin level of subregions to find + :return: dict {subregion_id => subregion data} including area and population info + """ + subregions = _get_subregions_basic_info(conn, region_id, region_table, + next_level, need_cities) + _add_population_data(conn, subregions, need_cities) + _add_mwm_size_estimation(subregions) + keys = ('name', 'mwm_size_est') + if need_cities: + keys = keys + ('cities',) + return {subregion_id: {k: subregion_data[k] for k in keys} + for subregion_id, subregion_data in subregions.items() + } + + +def _get_subregions_basic_info(conn, region_id, region_table, + next_level, need_cities): + cursor = conn.cursor() + region_id_column, region_geom_column = ( + ('id', 'geom') if region_table == config.TABLE else + ('osm_id', 'way') + ) + cursor.execute(f""" + SELECT subreg.osm_id, subreg.name, ST_Area(geography(subreg.way))/1.0E+6 area + FROM {region_table} reg, {osm_table} subreg + WHERE reg.{region_id_column} = %s AND subreg.admin_level = %s AND + ST_Contains(reg.{region_geom_column}, subreg.way) + """, (region_id, next_level) + ) + subregions = {} + for rec in cursor: + subregion_data = { + 'osm_id': rec[0], + 'name': rec[1], + 'area': rec[2], + 'urban_pop': 0, + 'city_cnt': 0, + 'hamlet_cnt': 0 + } + if need_cities: + subregion_data['cities'] = [] + subregions[rec[0]] = subregion_data + return subregions + + +def _add_population_data(conn, subregions, need_cities): + cursor = conn.cursor() + subregion_ids = ','.join(str(x) for x in subregions.keys()) + cursor.execute(f""" + SELECT b.osm_id, p.name, COALESCE(p.population, 0), p.place + FROM {osm_table} b, {osm_places_table} p + WHERE b.osm_id IN ({subregion_ids}) + AND ST_CONTAINS(b.way, p.center) + """ + ) + for subregion_id, place_name, place_population, place_type in cursor: + subregion_data = subregions[subregion_id] + if place_type in ('city', 'town'): + subregion_data['city_cnt'] += 1 + subregion_data['urban_pop'] += place_population + if need_cities: + subregion_data['cities'].append({ + 'name': place_name, + 'population': place_population + }) + else: + subregion_data['hamlet_cnt'] += 1 + + +def _add_mwm_size_estimation(subregions): + subregions_sorted = [ + ( + s_id, + [subregions[s_id][f] for f in + ('urban_pop', 'area', 'city_cnt', 'hamlet_cnt')] + ) + for s_id in sorted(subregions.keys()) + ] + + feature_array = [x[1] for x in subregions_sorted] + predictions = size_predictor.predict(feature_array) + + for subregion_id, mwm_size_prediction in zip( + (x[0] for x in subregions_sorted), + predictions + ): + subregions[subregion_id]['mwm_size_est'] = mwm_size_prediction diff --git a/web/app/templates/index.html b/web/app/templates/index.html index a75465a..7cfff93 100644 --- a/web/app/templates/index.html +++ b/web/app/templates/index.html @@ -30,8 +30,11 @@ #backup_saving, #backup_restoring { margin-bottom: 1em; } #filefm, #old_action, #josm_old, #cross_actions { display: none; } #h_iframe { display: block; width: 100%; height: 80px; } + a, a:hover, a:visited { color: blue; } #start_over, #start_over:hover, #start_over:visited { color: red; } - #city_population_thr, #cluster_population_thr { max-width: 80px;} + #population_thresholds { padding-left: 1.5em; } + #mwm_size_thr { max-width: 50px;} + #r_green, #r_red { width: 40px; } #b_import { max-width: 180px; } #import_div { position: relative; display: none; } #hide_import_button { @@ -44,7 +47,7 @@ align-items: center; justify-content: center; cursor: pointer; - } + } @@ -54,7 +57,8 @@

Раскраска по .

-
-
- Порог населения города, региона
- , - +
+ Верхняя граница размера mwm: + Мб +