summaryrefslogtreecommitdiff
path: root/ishtar_common
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
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')
-rw-r--r--ishtar_common/models_common.py46
-rw-r--r--ishtar_common/static/js/ishtar-map.js2
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_map.html46
3 files changed, 70 insertions, 24 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)}}
diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js
index 8ffe399d6..67d29cc48 100644
--- a/ishtar_common/static/js/ishtar-map.js
+++ b/ishtar_common/static/js/ishtar-map.js
@@ -716,7 +716,7 @@ var display_map = function(map_id, points, lines_and_polys, layers){
} else {
initialize_base_map(map_id, layers);
}
- display_points(map_id, points);
+ display_points(map_id, points, true);
init_popup(map_id);
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_map.html b/ishtar_common/templates/ishtar/blocks/sheet_map.html
index 11780ae8a..4a380ed13 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_map.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_map.html
@@ -9,40 +9,40 @@
<h4>{% trans "Geographic data" %}</h4>
<ul>{% for geodata in geodata_list %}
<li>
- <input type="checkbox" name="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}"
- class="map-ol-{{item.SLUG}}-{{item.pk}}"
- id="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}"
+ <input type="checkbox" name="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-{{geodata.pk}}"
+ class="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}"
+ id="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-{{geodata.pk}}"
{% if not forloop.counter0 %}checked{% endif %}
>
- &nbsp; <label for="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}">
+ &nbsp; <label for="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-{{geodata.pk}}">
<strong>{{geodata.data_type}}</strong></label><br/>
{{geodata.name}}
</li>{% endfor %}
- {% if geo_item.SLUG == "operation" %}
+ {% if geo_item.SLUG == "operation" and display_context_records %}
<li>
- <input type="checkbox" name="map-ol-{{item.SLUG}}-{{item.pk}}-crs"
- class="map-ol-{{item.SLUG}}-{{item.pk}}"
- id="map-ol-{{item.SLUG}}-{{item.pk}}-crs">
- &nbsp; <label for="map-ol-{{item.SLUG}}-{{item.pk}}-crs">
+ <input type="checkbox" name="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-crs"
+ class="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}"
+ id="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-crs">
+ &nbsp; <label for="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-crs">
<strong>{% trans "Associated context records" %}</strong></label>
</li>
{% endif %}
- {% if geo_item.SLUG == "operation" or geo_item.SLUG == "contextrecord" %}
+ {% if display_finds %}{% if geo_item.SLUG == "operation" or geo_item.SLUG == "contextrecord" %}
<li>
- <input type="checkbox" name="map-ol-{{item.SLUG}}-{{item.pk}}-finds"
- class="map-ol-{{item.SLUG}}-{{item.pk}}"
- id="map-ol-{{item.SLUG}}-{{item.pk}}-finds">
- &nbsp; <label for="map-ol-{{item.SLUG}}-{{item.pk}}-finds">
+ <input type="checkbox" name="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-finds"
+ class="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}"
+ id="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-finds">
+ &nbsp; <label for="map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}-finds">
<strong>{% trans "Associated finds" %}</strong></label>
</li>
- {% endif %}
+ {% endif %}{% endif %}
</ul>
</div>
<script type="text/javascript">
-const refresh_map_{{item.SLUG}}_{{item.pk}} = function(first_init) {
- let idx = "{{item.SLUG}}-{{item.pk}}";
+const refresh_map_{{geo_item.SLUG}}_{{geo_item.pk}} = function(first_init) {
+ let idx = "{{geo_item.SLUG}}-{{geo_item.pk}}";
let geodata_list = { {% for geodata in geodata_list %}
- "{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}": ["{{geodata.geometry_type}}", {{geodata.geojson|safe}}]{% if not forloop.last %},{% endif %}
+ "{{geo_item.SLUG}}-{{geo_item.pk}}-{{geodata.pk}}": ["{{geodata.geometry_type}}", {{geodata.geojson|safe}}]{% if not forloop.last %},{% endif %}
{% endfor %} };
let url{% if geo_item.SLUG == "operation" or geo_item.SLUG == "contextrecord" %} = "{% url 'api-get-geo' %}"{% endif %};
let attrs{% if geo_item.SLUG == "operation" %} = {"operation_id": "{{geo_item.pk}}"}{% elif geo_item.SLUG == "contextrecord" %} = {"context_record_id": "{{geo_item.pk}}"}{% endif %};
@@ -51,19 +51,19 @@ const refresh_map_{{item.SLUG}}_{{item.pk}} = function(first_init) {
display_points("map-{{window_id}}-" + idx, _geo_points[idx], first_init);
}
-const display_map_{{item.SLUG}}_{{item.pk}} = function() {
+const display_map_{{geo_item.SLUG}}_{{geo_item.pk}} = function() {
const html = render_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", false, true);
$("#map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}").html(html);
display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, null);
- $(".map-ol-{{item.SLUG}}-{{item.pk}}").change(
+ $(".map-ol-{{geo_item.SLUG}}-{{geo_item.pk}}").change(
function(){
- refresh_map_{{item.SLUG}}_{{item.pk}}(false);
+ refresh_map_{{geo_item.SLUG}}_{{geo_item.pk}}(false);
}
);
}
-display_map_{{item.SLUG}}_{{item.pk}}();
-refresh_map_{{item.SLUG}}_{{item.pk}}(true);
+display_map_{{geo_item.SLUG}}_{{geo_item.pk}}();
+refresh_map_{{geo_item.SLUG}}_{{geo_item.pk}}(true);
</script>