summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-09-09 12:38:46 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:23:18 +0100
commita8d8513c6c365d09eb663722b29740d3231d2c56 (patch)
tree44dd6b9849a9bdfbfb6b1c22c78cf3ad0992d7c6 /ishtar_common/models_common.py
parent16aa1615cfdfdf96104b8654bb7caa463a5c95e0 (diff)
downloadIshtar-a8d8513c6c365d09eb663722b29740d3231d2c56.tar.bz2
Ishtar-a8d8513c6c365d09eb663722b29740d3231d2c56.zip
Geo: display associated context records and associated finds on sheet map (refactor and fixes)
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 9d71ae0dc..b72251f02 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -2359,6 +2359,52 @@ class GeoVectorData(Imported, OwnPerms):
profile = get_current_profile()
return profile.srs
+ @classmethod
+ def _get_geo_item_list(cls, q, current_geodata, url, precision, rounded):
+ collection_id = []
+ items_id = []
+ q = q.values("main_geodata", "id")
+ for item in q.distinct().all():
+ geodata_id = item["main_geodata"]
+ if geodata_id not in current_geodata:
+ collection_id.append(geodata_id)
+ items_id.append(item["id"])
+ current_geodata.append(geodata_id)
+
+ collection = []
+ for idx in range(len(collection_id)):
+ geo = json.loads(GeoVectorData.objects.get(pk=collection_id[idx]).geojson)
+ geo_type = geo.get("type", None)
+ url_geo = url.format(items_id[idx])
+ if geo_type == "FeatureCollection":
+ for feat in geo["features"]:
+ if "properties" in feat:
+ feat["properties"]["url"] = url_geo
+ collection += geo["features"]
+ elif geo_type:
+ if "properties" in geo:
+ geo["properties"]["url"] = url_geo
+ collection.append(geo)
+
+ if not precision and rounded:
+ precision = 6
+ r = re.compile(r"(\d+)\.(\d{6})(\d*)")
+ new_collection = []
+ for feat in collection:
+ geom_type = feat["geometry"].get("type", None)
+ if geom_type == "Point":
+ if precision is not None:
+ feat["geometry"]["coordinates"] = [
+ round(feat["geometry"]["coordinates"][0], precision),
+ round(feat["geometry"]["coordinates"][1], precision),
+ ]
+ if not (-90 <= feat["geometry"]["coordinates"][1] <= 90) or not (
+ -180 <= feat["geometry"]["coordinates"][0] <= 180):
+ # probably a bad projection
+ continue
+ new_collection.append(feat)
+ return new_collection
+
def get_geo_items(self, rounded=5):
dct = {"type": "Feature", "geometry": {},
"properties": {"label": str(self)}}