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" %}  | 
