diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-02-04 12:46:49 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:38:56 +0200 |
commit | 7db3c03eed446df0f2dfb84dec9467cf43589e63 (patch) | |
tree | d7cf1f8c7d31f3a8a51d2c532c6b6ba82f440280 | |
parent | b665a5ecec08e057e78320c43c702ebefb5a7a29 (diff) | |
download | Ishtar-7db3c03eed446df0f2dfb84dec9467cf43589e63.tar.bz2 Ishtar-7db3c03eed446df0f2dfb84dec9467cf43589e63.zip |
Map: manage default extent and zoom to current extent
-rw-r--r-- | archaeological_context_records/admin.py | 2 | ||||
-rw-r--r-- | ishtar_common/admin.py | 9 | ||||
-rw-r--r-- | ishtar_common/context_processors.py | 2 | ||||
-rw-r--r-- | ishtar_common/migrations/0085_auto_20190204_1149.py | 26 | ||||
-rw-r--r-- | ishtar_common/models.py | 5 | ||||
-rw-r--r-- | ishtar_common/static/js/ishtar-map.js | 64 | ||||
-rw-r--r-- | ishtar_common/templates/base.html | 8 |
7 files changed, 101 insertions, 15 deletions
diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py index bfa859c48..f79bf1d7b 100644 --- a/archaeological_context_records/admin.py +++ b/archaeological_context_records/admin.py @@ -47,7 +47,7 @@ class AdminContextRecordForm(forms.ModelForm): model = models.ContextRecord exclude = [] point_2d = PointField(label=_(u"Point"), required=False, - widget=OSMWidget) + widget=OSMWidget) multi_polygon = MultiPolygonField(label=_(u"Multi polygon"), required=False, widget=OSMWidget) operation = AutoCompleteSelectField('operation') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 3786870d2..f64f04ad5 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -175,10 +175,19 @@ admin_site.register(Group, MyGroupAdmin) admin_site.register(Site, SiteAdmin) +class AdminIshtarSiteProfileForm(forms.ModelForm): + class Meta: + model = models.IshtarSiteProfile + exclude = [] + default_center = PointField(label=_(u"Maps - default center"), + widget=OSMWidget) + + class IshtarSiteProfileAdmin(admin.ModelAdmin): list_display = ('label', 'slug', 'active', 'files', 'context_record', 'find', 'warehouse', 'mapping', 'preservation') model = models.IshtarSiteProfile + form = AdminIshtarSiteProfileForm admin_site.register(models.IshtarSiteProfile, IshtarSiteProfileAdmin) diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py index 12e7bc9be..786d3f5b5 100644 --- a/ishtar_common/context_processors.py +++ b/ishtar_common/context_processors.py @@ -50,6 +50,8 @@ def get_base_context(request): current_action = dct['CURRENT_ACTION'] dct['CURRENT_PATH'] = request.path + dct['SITE_PROFILE'] = get_current_profile() + # messages dct['MESSAGES'] = [] if not request.is_ajax() and 'messages' in request.session and \ diff --git a/ishtar_common/migrations/0085_auto_20190204_1149.py b/ishtar_common/migrations/0085_auto_20190204_1149.py new file mode 100644 index 000000000..d89a8ac94 --- /dev/null +++ b/ishtar_common/migrations/0085_auto_20190204_1149.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2019-02-04 11:49 +from __future__ import unicode_literals + +import django.contrib.gis.db.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0084_ishtarsiteprofile_use_town_for_geo'), + ] + + operations = [ + migrations.AddField( + model_name='ishtarsiteprofile', + name='default_center', + field=django.contrib.gis.db.models.fields.PointField(default=b'SRID=4326;POINT(2.4397 46.5528)', srid=4326, verbose_name='Maps - default center'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='default_zoom', + field=models.IntegerField(default=6, verbose_name='Maps - default zoom'), + ), + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 76e415368..ea6bd3bf0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2241,6 +2241,11 @@ class IshtarSiteProfile(models.Model, Cached): default=True) currency = models.CharField(_(u"Currency"), default=u"€", choices=CURRENCY, max_length=5) + default_center = models.PointField( + _(u"Maps - default center"), + default='SRID=4326;POINT(2.4397 46.5528)') + default_zoom = models.IntegerField( + _(u"Maps - default zoom"), default=6) class Meta: verbose_name = _(u"Ishtar site profile") diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js index a8e1a4fa5..ce8f9b616 100644 --- a/ishtar_common/static/js/ishtar-map.js +++ b/ishtar_common/static/js/ishtar-map.js @@ -4,6 +4,9 @@ var default_pointer = "../media/images/default-pointer.png"; var view_projection = 'EPSG:3857'; +var map_default_center = 'SRID=4326;POINT (2.4397 46.5528)'; +var map_default_zoom = '7'; + var source_osm = function(options){ return new ol.layer.Tile({ source: new ol.source.OSM() @@ -11,7 +14,7 @@ var source_osm = function(options){ }; -var map_layers = { +var default_map_layers = { 'osm': source_osm }; @@ -23,7 +26,7 @@ var get_layers = function(layers){ for (idx in layers){ var layer_attr = layers[idx]; ol_layers.push( - map_layers[layer_attr['type']](layer_attr['options']) + default_map_layers[layer_attr['type']](layer_attr['options']) ); } return ol_layers; @@ -67,17 +70,25 @@ var get_style = function(feature){ /* display map */ var vector_source; var vector_layer; -var map_layers; +var center; var map; -var geojson_format = new ol.format.GeoJSON( - {dataProjection:'EPSG:4326', featureProjection: view_projection}); +var map_view; +var map_layers; +var proj_options = { + dataProjection:'EPSG:4326', featureProjection: view_projection +} +var geojson_format = new ol.format.GeoJSON(proj_options); +var wkt_format = new ol.format.WKT(proj_options); +var initialize_map = function(map_id, layers){ + center = wkt_format.readGeometry(map_default_center).getCoordinates(); -var display_map = function(map_id, points, layers){ + /* vector_source = new ol.source.Vector({ features: geojson_format.readFeatures(points) }); - + */ + vector_source = new ol.source.Vector(); vector_layer = new ol.layer.Vector({ source: vector_source, style: get_style @@ -85,15 +96,44 @@ var display_map = function(map_id, points, layers){ map_layers = get_layers(layers); map_layers.push(vector_layer); + + map_view = new ol.View({ + projection: view_projection, + center: ol.proj.fromLonLat([center[0], center[1]]), + zoom: map_default_zoom + }); + map = new ol.Map({ target: map_id, layers: map_layers, - view: new ol.View({ - projection: view_projection, - center: ol.proj.fromLonLat([37.41, 8.82]), - zoom: 4 - }) + view: map_view }); } +var redraw_map = function(map_id, layers){ + map.setTarget(null); + map = null; + initialize_map(map_id, layers); +}; + + +var display_map = function(map_id, points, layers){ + if (map){ + redraw_map(map_id, layers); + } else { + initialize_map(map_id, layers); + } + vector_source.clear(); + vector_source.addFeatures(geojson_format.readFeatures(points)); + + map.updateSize(); + if (points.features.length){ + map_view.fit(vector_source.getExtent()); + if (map_view.getZoom() > 12){ + map_view.setZoom(12); + } + } + +} + diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index 86b4c8b58..0a4f58e24 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -79,9 +79,13 @@ {% endcompress %} {% block extra_head %} {% endblock %} - {% if DEBUG %}<script type='text/javascript'> + <script type='text/javascript'> + map_default_center = '{{SITE_PROFILE.default_center.wkt}}'; + map_default_zoom = '{{SITE_PROFILE.default_zoom}}'; + {% if DEBUG %} debug = true; - </script>{% endif %} + {% endif %} + </script> </head> <body data-spy="scroll" data-target="#window-fixed-menu"{% if current_theme%} id='{{current_theme}}'{%endif%}> {% include "navbar.html" %} |