summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/utils.py64
-rw-r--r--ishtar_common/version.py4
2 files changed, 66 insertions, 2 deletions
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 = "&params=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():