summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models_common.py10
-rw-r--r--ishtar_common/static/js/ishtar-map.js40
-rw-r--r--ishtar_common/templates/base.html2
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_coordinates.html28
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_geo_items.html48
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_map.html57
6 files changed, 88 insertions, 97 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 221fa3ede..83897768c 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -2545,6 +2545,16 @@ class GeographicItem(models.Model):
self.main_geodata = self.geodata.order_by("pk").all()[0]
self.save()
+ @property
+ def geodata_list(self):
+ lst = []
+ if self.main_geodata:
+ lst.append(self.main_geodata)
+ for geo in self.geodata.all():
+ if geo != self.main_geodata:
+ lst.append(geo)
+ return lst
+
class TownManager(models.Manager):
def get_by_natural_key(self, numero_insee, year):
diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js
index a3f275720..95f8ad3e3 100644
--- a/ishtar_common/static/js/ishtar-map.js
+++ b/ishtar_common/static/js/ishtar-map.js
@@ -29,6 +29,8 @@ var geoloc_activated = {};
var fetching_msg = "Fetching data...";
+var base_maps_msg = "Base maps";
+
var _map_submit_search = function(query_vars, name, source, extra){
if (!extra) extra = "default";
var modal_base_text = $('.modal-progress .modal-header').html();
@@ -523,7 +525,10 @@ var _display_items = function(map_id, features, offset_x, offset_y){
}
var feat = features[idx_feat];
var properties = feat.getProperties();
- var link = link_template[map_id].replace("<pk>", properties["id"]);
+ var link = "";
+ if (link_template[map_id]){
+ link = link_template[map_id].replace("<pk>", properties["id"]);
+ }
var txt = "<li>" + link + " " + properties['name'] + "</li>";
window_content += txt;
if (idx_feat < 5){
@@ -623,7 +628,7 @@ var initialize_base_map = function(map_id, layers){
map_layers[map_id] = [
new ol.layer.Group({
- title: 'Base maps',
+ title: base_maps_msg,
visible: true,
layers: get_layers(layers)
})
@@ -677,7 +682,7 @@ var display_map = function(map_id, points, lines_and_polys, layers){
if (points){
link_template[map_id] = points['link_template'];
- } else {
+ } else if (lines_and_polys) {
link_template[map_id] = lines_and_polys['link_template'];
}
if (map[map_id]){
@@ -686,7 +691,6 @@ var display_map = function(map_id, points, lines_and_polys, layers){
initialize_base_map(map_id, layers);
}
display_points(map_id, points);
- display_lines_and_polys(map_id, lines_and_polys);
init_popup(map_id);
@@ -698,31 +702,43 @@ var display_map = function(map_id, points, lines_and_polys, layers){
}
};
-var display_points = function(map_id, points){
+var display_points = function(map_id, points, first_init){
if (!points) return;
point_features[map_id] = geojson_format.readFeatures(points);
- enable_clustering(map_id);
+ console.log(708);
+ if (!cluster_source[map_id]){
+ enable_clustering(map_id);
+ } else {
+ cluster_source[map_id].getSource().clear();
+ cluster_source[map_id].getSource().refresh();
+ }
cluster_source[map_id].getSource().addFeatures(point_features[map_id]);
- if (points.features.length){
+ if (first_init && points.features && points.features.length){
map_view[map_id].fit(cluster_source[map_id].getSource().getExtent());
- if (map_view[map_id].getZoom() > 12){
- map_view[map_id].setZoom(12);
+ if (map_view[map_id].getZoom() > 14){
+ map_view[map_id].setZoom(14);
}
}
};
-var display_lines_and_polys = function(map_id, lines_and_polys){
+var display_lines_and_polys = function(map_id, lines_and_polys, first_init){
if (!lines_and_polys) return;
vector_features[map_id] = geojson_format.readFeatures(lines_and_polys);
- vector_source[map_id] = new ol.source.Vector();
+ if (!vector_source[map_id]){
+ vector_source[map_id] = new ol.source.Vector();
+ } else {
+ vector_source[map_id].clear();
+ vector_source[map_id].refresh();
+ }
vector_source[map_id].addFeatures(vector_features[map_id]);
vector_layer[map_id] = new ol.layer.Vector({
source: vector_source[map_id],
style: get_vector_style
});
+ console.log(738);
map[map_id].addLayer(vector_layer[map_id]);
- if (lines_and_polys.features.length){
+ if (first_init && lines_and_polys.features && lines_and_polys.features.length){
map_view[map_id].fit(vector_source[map_id].getExtent());
}
};
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 8041452c6..12e8567a1 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -73,6 +73,8 @@
var YES = "{% trans 'yes' %}";
var NO = "{% trans 'no' %}";
var fetching_msg = "{% trans 'Fetching data...' %}";
+ var base_maps_msg = "{% trans 'Base maps' %}";
+ var layers_msg = "{% trans 'Layers' %}";
var stats_incompatible_modality = "{% trans 'This graph type accept only one modality.' %}";
var show_msg = "{% trans "Show" %}";
var entries_msg = "{% trans "entries" %}";
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_coordinates.html b/ishtar_common/templates/ishtar/blocks/sheet_coordinates.html
deleted file mode 100644
index 0093ed31f..000000000
--- a/ishtar_common/templates/ishtar/blocks/sheet_coordinates.html
+++ /dev/null
@@ -1,28 +0,0 @@
-{% load i18n window_field %}{% if PROFILE.mapping and geo_item.main_geodata %}
-{% with geodata=geo_item.main_geodata %}
-{% if geodata.cached_x or geodata.cached_z %}
-<dl class="col-12">
- <dt>{% trans "Coordinates" %}</dt>
- <dd>
- {% with coordinates=geodata.display_coordinates %}
- {% trans "X:"%} {{coordinates.0|default_if_none:"-"}}
- {% if geodata.estimated_error_x %} ({% trans "error:" %} {{geodata.estimated_error_x}}){% endif %},
- {% trans "Y:"%} {{coordinates.1|default_if_none:"-"}}
- {% if geodata.estimated_error_y %} ({% trans "error:" %} {{geodata.estimated_error_y}}){% endif %},
- {% endwith %}
- {% trans "Z:"%} {{geodata.z|default_if_none:"-"}}
- {% if geodata.estimated_error_z %} ({% trans "error:" %} {{geodata.estimated_error_z}}){% endif %}
- {% with srs=geodata.display_spatial_reference_system %}
- {% if srs %} &ndash; {{srs.label}} - {% trans "SRID"%} {{srs.srid}} {% endif %}
- {% endwith %}
- </dd>
-</dl>
-{% field_flex_full "Data type" geodata.data_type %}
-{% field_flex_full "Source" geodata.source_label %}
-{% field_flex_full "Name" geodata.name %}
-{% field_flex_full "Origin" geodata.origin %}
-{% field_flex_full "Provider" geodata.provider %}
-{% field_flex_full "Comment" geodata.comment %}
-{% endif %}
-{% endwith %}
-{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html b/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html
deleted file mode 100644
index 12e4b4ef0..000000000
--- a/ishtar_common/templates/ishtar/blocks/sheet_geo_items.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% load i18n window_field %}{% if PROFILE.mapping %}
-{% if geo_item.point_2d or geo_item.multi_polygon %}
-<dl class="col-12">
- <dt id="display-geo-items-for-{{geo_item.SLUG}}-{{geo_item.pk}}">{% trans "Display geo items" %}</dt>
- <dd>
- <fieldset>
- {% if geo_item.SLUG == "operation" %}
- <input type="checkbox" id="disp-cr-for-{{geo_item.SLUG}}-{{geo_item.pk}}" class='checkbox-geo-items'>
- <label for="disp-cr-for-{{geo_item.SLUG}}-{{geo_item.pk}}">{% trans "Display context records" %}</label>
- {% endif %}
- <input type="checkbox" id="disp-bf-for-{{geo_item.SLUG}}-{{geo_item.pk}}" class='checkbox-geo-items'>
- <label for="disp-bf-for-{{geo_item.SLUG}}-{{geo_item.pk}}">{% trans "Display base finds" %}</label>
- </fieldset>
- </dd>
- <dd>
- <label for="get-poly-for-{{geo_item.SLUG}}-{{geo_item.pk}}" id="get-poly-label-for-{{geo_item.SLUG}}-{{geo_item.pk}}">{% trans "Geometry: " %}</label>
- <select id="get-poly-for-{{geo_item.SLUG}}-{{geo_item.pk}}" class='get-poly-geo-items'>
- <option value="polygons" selected="selected">{% trans "Display polygons" %}</option>
- <option value="points">{% trans "Display points" %}</option>
- </select>
- </dd>
-</dl>
-<script>
-const hide_get_polygons = function() {
- const disp_cr = $("#disp-cr-for-{{geo_item.SLUG}}-{{geo_item.pk}}");
- const disp_bf = $("#disp-bf-for-{{geo_item.SLUG}}-{{geo_item.pk}}");
- const get_poly = $("#get-poly-for-{{geo_item.SLUG}}-{{geo_item.pk}}");
- const label = $("#get-poly-label-for-{{geo_item.SLUG}}-{{geo_item.pk}}");
- get_poly.hide();
- label.hide();
- const display_get_poly = function () {
- if (disp_bf.prop('checked') || ((disp_cr.length > 0) && disp_cr.prop('checked'))) {
- get_poly.show();
- label.show();
- } else {
- get_poly.hide();
- label.hide();}
- }
- if (disp_cr.length > 0) {
- disp_cr.change( display_get_poly );
- }
- disp_bf.change( display_get_poly )
-}
-hide_get_polygons();
-
-</script>
-{% endif %}
-{% endif %} \ No newline at end of file
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_map.html b/ishtar_common/templates/ishtar/blocks/sheet_map.html
index e0278b8c7..16e014b49 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_map.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_map.html
@@ -1,22 +1,60 @@
-{% if PROFILE.mapping and geo_item.main_geodata %}
+{% load i18n window_field %}{% if PROFILE.mapping and geo_item.main_geodata %}
+{% with geodata_list=geo_item.geodata_list %}
<div class="col-12 col-lg-6 flex-wrap">
<div class="window-map" id="map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}">
</div>
<div id="map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"></div>
</div>
+<div class="col-12 col-lg-6 flex-wrap">
+ <h4>{% trans "Geographic data" %}</h4>
+ <ul>{% for geodata in geodata_list %}
+ <li>
+ <input type="checkbox" name="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}"
+ id="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}"
+ {% if not forloop.counter0 %}checked{% endif %}
+ >
+ &nbsp; <label for="map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}">
+ <strong>{{geodata.data_type}}</strong></label><br/>
+ {{geodata.name}}
+ </li>{% endfor %}
+ </ul>
+</div>
<script type="text/javascript">
-const disp_map = function() {
+const refresh_map_{{item.SLUG}}_{{item.pk}} = function(first_init) {
+ var {{geo_item.SLUG}}{{geo_item.pk}}_point = {"type": "FeatureCollection", "features": []};
+ var {{geo_item.SLUG}}{{geo_item.pk}}_other = {"type": "FeatureCollection", "features": []};
+ {% for geodata in geodata_list %}
+ if ($("#map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}").prop('checked')){
+ let geojson = {{geodata.geojson|safe}};
+ {% if geodata.geometry_type == 'POINT' %}
+ Array.prototype.push.apply({{geo_item.SLUG}}{{geo_item.pk}}_point["features"],
+ geojson["features"]);
+ {% else %}
+ Array.prototype.push.apply({{geo_item.SLUG}}{{geo_item.pk}}_other["features"],
+ geojson["features"]);
+ {% endif %}
+ }{% endfor %}
+ display_lines_and_polys("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}}_other, first_init);
+ display_points("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}}_point, first_init);
+}
+
+const display_map_{{item.SLUG}}_{{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);
- const {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.main_geodata.geojson|safe}};
- {% if geo_item.main_geodata.geometry_type == 'POINT' %}
- display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}});
- {% else %}
- display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, {{geo_item.SLUG}}{{geo_item.pk}});
- {% endif %}
+ display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, null);
+ {% for geodata in geodata_list %}
+ $("#map-ol-{{item.SLUG}}-{{item.pk}}-{{geodata.pk}}").change(
+ function(){
+ refresh_map_{{item.SLUG}}_{{item.pk}}(false);
+ }
+ );
+ {% endfor %}
}
-disp_map();
+
+display_map_{{item.SLUG}}_{{item.pk}}();
+refresh_map_{{item.SLUG}}_{{item.pk}}(true);
+
{% if geo_item.SLUG == "operation" or geo_item.SLUG == "contextrecord" %}
const disp_geo_items = function(disp_cr, disp_bf, get_polygons) {
@@ -69,4 +107,5 @@ get_polygons.change( function () {
{% endif %}
</script>
+{% endwith %}
{% endif %}