diff options
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 |
commit | a8d8513c6c365d09eb663722b29740d3231d2c56 (patch) | |
tree | 44dd6b9849a9bdfbfb6b1c22c78cf3ad0992d7c6 /ishtar_common/models_common.py | |
parent | 16aa1615cfdfdf96104b8654bb7caa463a5c95e0 (diff) | |
download | Ishtar-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.py | 46 |
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)}} |