diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-09-18 12:35:53 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-09-18 12:35:53 +0200 |
commit | be5cb3e7679732fc4d93583c18af3a1df87e52d9 (patch) | |
tree | 40adf06eacda3d74c1120ad75e01d937aec180a7 | |
parent | 2485e5e42df1e260d6d44788bddd7bf04122d953 (diff) | |
download | Ishtar-be5cb3e7679732fc4d93583c18af3a1df87e52d9.tar.bz2 Ishtar-be5cb3e7679732fc4d93583c18af3a1df87e52d9.zip |
Utils - `create_osm_town` create town from OSM relation
-rw-r--r-- | CHANGES.md | 9 | ||||
-rw-r--r-- | ishtar_common/utils.py | 64 | ||||
-rw-r--r-- | ishtar_common/version.py | 4 |
3 files changed, 74 insertions, 3 deletions
diff --git a/CHANGES.md b/CHANGES.md index 2e0e814da..a9a1f52b1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,11 +1,18 @@ --- title: Ishtar changelog -date: 2022-07-10 +date: 2022-09-18 --- Ishtar changelog ================ +v3.2.5 - 2022-09-18 +-------------------- + +### Features ### + +- utils - `create_osm_town` create town from OSM relation + v3.2.4 - 2022-09-18 -------------------- diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index bfb5d0e32..137f89469 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -2162,3 +2162,67 @@ def generate_pdf_preview(item, save=True, tempdir=None, page_number=None): django_file = File(preview) getattr(item, "image").save("page.jpg", django_file, save=True) shutil.rmtree(tempdir) + + +def get_create_merge_town(insee, default): + from ishtar_common.model_merging import merge_model_objects + Town = apps.get_model("ishtar_common", "Town") + q = Town.objects.filter(numero_insee=insee) + if q.count() > 1: + town = None + for t in q.all(): + if not town: + town = t + else: + merge_model_objects(town, t) + else: + town, __ = Town.objects.get_or_create( + numero_insee=insee, defaults=default + ) + return town + + +OSM_URL = "http://polygons.openstreetmap.fr/get_geojson.py?id={}" +OSM_REFRESH_URL = "http://polygons.openstreetmap.fr/?id={}" +OSM_SIMPLIFY = "¶ms=0.000800-0.000200-0.000200" + + +def create_osm_town(rel_id, name, numero_insee=None): + """ + Create town from OSM relation + + :param rel_id: OSM relation IS + :param name: "town" name + :param numero_insee: town reference by default OSM[rel_id] + :return: town + """ + geojson, retry = None, 0 + while not geojson and retry < 5: + response = requests.get(OSM_URL.format(rel_id)) + retry += 1 + try: + geojson = response.json() + except: + requests.get(OSM_REFRESH_URL.format(rel_id)) + time.sleep(3) + if not geojson: + print("\nError on: " + OSM_URL.format(rel_id)) + return + if len(geojson) > 50000: + response = requests.get(OSM_URL.format(rel_id) + OSM_SIMPLIFY) + try: + geojson_simplify = response.json() + geojson = geojson_simplify + except: + pass + default = {"name": name} + if not numero_insee: + numero_insee = f"OSM{rel_id}" + town = get_create_merge_town(numero_insee, default) + geom = GEOSGeometry(str(geojson)) + if geom.geom_type == "GeometryCollection": + geom = geom[0] + town.limit = geom + town.center = town.limit.centroid + town.save() + return town diff --git a/ishtar_common/version.py b/ishtar_common/version.py index 59dda6a51..adde2c7e9 100644 --- a/ishtar_common/version.py +++ b/ishtar_common/version.py @@ -1,5 +1,5 @@ -# 3.2.4 -VERSION = (3, 2, 4) +# 3.2.5 +VERSION = (3, 2, 5) def get_version(): |