From e01b6a270a4c5a790ef70b799e404fe062c1b0de Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 5 May 2012 21:49:29 +0200 Subject: Manage different and multiple layers in areas (including default) --- chimere/default_settings.py | 4 +- chimere/fixtures/initial_data.json | 6 +- chimere/static/chimere/css/styles.css | 39 ++ .../static/chimere/img/layer-switcher-maximize.png | Bin 480 -> 594 bytes chimere/static/chimere/js/edit_map.js | 149 ------ chimere/static/chimere/js/jquery.chimere.js | 5 +- chimere/static/chimere/js/main_map.js | 534 --------------------- chimere/templates/chimere/blocks/head_chimere.html | 2 +- chimere/templates/chimere/blocks/map_params.html | 2 +- chimere/templatetags/chimere_tags.py | 5 +- chimere/views.py | 6 +- chimere/widgets.py | 39 +- example_project/settings.py | 8 +- 13 files changed, 92 insertions(+), 707 deletions(-) delete mode 100644 chimere/static/chimere/js/edit_map.js delete mode 100644 chimere/static/chimere/js/main_map.js diff --git a/chimere/default_settings.py b/chimere/default_settings.py index 7b7d1c3..121d912 100644 --- a/chimere/default_settings.py +++ b/chimere/default_settings.py @@ -40,9 +40,7 @@ CHIMERE_DAYS_BEFORE_EVENT = 30 CHIMERE_DEFAULT_CATEGORIES = [1] # JS definition of the main map cf. OpenLayers documentation for more details -#MAP_LAYER = '''new OpenLayers.Layer.OSM.CycleMap("Cycle map", { -#displayOutsideMaxExtent: true, wrapDateLine: true})''' # OSM cyclemap -CHIMERE_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map +CHIMERE_DEFAULT_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map # display picture inside the description by default or inside a galery? CHIMERE_MINIATURE_BY_DEFAULT = True diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json index 84931f4..553f7d6 100644 --- a/chimere/fixtures/initial_data.json +++ b/chimere/fixtures/initial_data.json @@ -236,7 +236,7 @@ "pk": 1, "model": "chimere.layer", "fields": { - "layer_code": "OpenLayers.Layer.OSM.Mapnik({% trans \"Default\" %},\r\n{attribution:\"\", keyid:\"mapnik\", displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"M\"})", + "layer_code": "new OpenLayers.Layer.OSM.Mapnik(\"Default\",\r\n{attribution:\"\", keyid:\"mapnik\", displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"M\"})", "name": "OSM - Mapnik" } }, @@ -244,7 +244,7 @@ "pk": 2, "model": "chimere.layer", "fields": { - "layer_code": "OpenLayers.Layer.OSM.CycleMap({% trans \"Cycle map\" %},\r\n{attribution:\"Tiles courtesy of Andy Allan\",\r\nkeyid:\"cyclemap\",displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"C\"})", + "layer_code": "new OpenLayers.Layer.OSM.CycleMap(\"Cycle map\",\r\n{attribution:\"Tiles courtesy of Andy Allan\",\r\nkeyid:\"cyclemap\",displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"C\"})", "name": "OSM - CycleMap" } }, @@ -252,7 +252,7 @@ "pk": 3, "model": "chimere.layer", "fields": { - "layer_code": "OpenLayers.Layer.OSM.TransportMap({% trans \"Transport map\" %},\r\n{attribution:\"Tiles courtesy of Andy Allan\",\r\nkeyid:\"transportmap\",displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"T\"})", + "layer_code": "new OpenLayers.Layer.OSM.TransportMap(\"Transport map\",\r\n{attribution:\"Tiles courtesy of Andy Allan\",\r\nkeyid:\"transportmap\",displayOutsideMaxExtent:!0,wrapDateLine:!0,layerCode:\"T\"})", "name": "OSM - TransportMap" } } diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index ee47557..3eb81c1 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -32,6 +32,8 @@ body, h2, h3, th, .ui-widget-header, .action li.selected, #welcome_button, +#content .olControlLayerSwitcher .layersDiv, +#content .olControlLayerSwitcher span, .olControlPermalink{ background-color:#4ea30d; } @@ -568,6 +570,43 @@ table.inline-table td input[type=file]{ left:220px; } +#content .olControlLayerSwitcher .baseLbl, +#content .olControlLayerSwitcher .dataLbl, +#content .olControlLayerSwitcher .dataLayersDiv{ + display:None; +} + +#content .olControlLayerSwitcher { + top: 150px !important; + right: auto !important; + bottom: auto !important; + left: 0 !important; +} + + +#content .olControlLayerSwitcher .layersDiv { + padding-top: 5px; + padding-left: 5px !important; + padding-bottom: 5px; + padding-right: 0px !important; + width: 100%; + height: auto !important; +} + +#content .olControlLayerSwitcher .layersDiv .baseLayersDiv, +{ + padding-left: 15px; +} + +#content .olControlLayerSwitcher .maximizeDiv, +#content .olControlLayerSwitcher .minimizeDiv { + top: 10px !important; + right: auto !important; + position: absolute !important; + bottom: auto !important; + left: 0px !important; +} + .simple .olControlScaleLine { bottom:50px; left:10px; diff --git a/chimere/static/chimere/img/layer-switcher-maximize.png b/chimere/static/chimere/img/layer-switcher-maximize.png index 33368db..f23bef8 100644 Binary files a/chimere/static/chimere/img/layer-switcher-maximize.png and b/chimere/static/chimere/img/layer-switcher-maximize.png differ diff --git a/chimere/static/chimere/js/edit_map.js b/chimere/static/chimere/js/edit_map.js deleted file mode 100644 index 5000b75..0000000 --- a/chimere/static/chimere/js/edit_map.js +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 2008 Étienne Loks - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -See the file COPYING for details. -*/ - -/* map edit */ - -var map; - -/* availaible map layers */ -var layerMarkers = new OpenLayers.Layer.Markers('POIs'); - -/* default size and offset for icon */ -var size = new OpenLayers.Size(21, 25); -var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); -var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset); - -/* set a marker with a click on the map */ -var setMarker = function (event){ - event = event || window.event; - var lonlat = layerMarkers.getLonLatFromViewPortPx(event.xy); - putMarker(lonlat, false); - OpenLayers.Event.stop(event); -} - -/* put the marker on the map and update latitude and longitude fields */ -var putMarker = function (lonlat, zoom){ - if (marker) { - layerMarkers.removeMarker(marker); - } - var marker = new OpenLayers.Marker(lonlat.clone(), icon); - layerMarkers.addMarker(marker); - lonlat = lonlat.clone().transform(map.getProjectionObject(), - epsg_display_projection); - document.getElementById('id_point').value = 'POINT(' + lonlat.lon + - ' ' + lonlat.lat + ')'; - document.getElementById('live_latitude').value = lonlat.lat; - document.getElementById('live_longitude').value = lonlat.lon; - /*zoom to the point*/ - if (zoom){ - var bounds = layerMarkers.getDataExtent(); - if (bounds) map.zoomToExtent(bounds); - } - return; -} - -/* main initialisation function */ -function init(){ - var options = { - controls:[new OpenLayers.Control.Navigation(), - new OpenLayers.Control.PanPanel(), - new OpenLayers.Control.ZoomPanel(), - new OpenLayers.Control.Attribution()], - maxResolution: 156543.0399, - units: 'm', - projection: epsg_projection, - displayProjection: epsg_display_projection - }; - if (restricted_extent){ - restricted_extent.transform(epsg_display_projection, epsg_projection); - options['restrictedExtent'] = restricted_extent; - } - map = new OpenLayers.Map ('map_edit', options); - layerMarkers.setOpacity(0.5); - map.addLayers([map_layer, layerMarkers]); - map.events.register('click', map, setMarker); - /* zoom to the appropriate extent */ - if (!zoomToCurrentExtent(map)){ - map.setCenter(centerLonLat, 12); - } -} - - -/* code for drag'n drop : delayed for further version of openlayers */ - -/* -function init_b(){ - init(); - - marker.events.register('mouseup', marker, releaseMarker); - marker.events.register('mousedown', marker, catchMarker); - marker.events.register('mouseover', marker, markerOver); - marker.events.register('mouseout', marker, markerOut); - - map.events.register('mousemove', map, onMouseMove); - map.events.register('moveend', map, onMoveEnd); -} - -var marker_catched = false; - -function catchMarker(event){ - marker_catched = true; - event = event || window.event; - OpenLayers.Event.stop(event); -} - -function releaseMarker(event){ - event = event || window.event; - if(marker_catched) { - marker_catched = false; - lonlat = layerMarkers.getLonLatFromViewPortPx(marker.icon.px); - marker.lonlat = lonlat; - document.getElementById('latitude').value = marker.lonlat.lat; - document.getElementById('longitude').value = marker.lonlat.lon; - } - OpenLayers.Event.stop(event); -} - -function onMouseMove(event) { - event = event || window.event; - if (!marker_catched) {return;} - marker.icon.px = null; - marker.icon.moveTo(new OpenLayers.Pixel(event.xy.x + delta_x, - event.xy.y + delta_y + 20)); - defLiveLatLon(); - lonlat = layerMarkers.getLonLatFromViewPortPx(marker.icon.px).transform(epsg_projection, epsg_display_projection); - live_longitude.value = lonlat.lon; - live_latitude.value = lonlat.lat; - OpenLayers.Event.stop(event); -} - -function onMoveEnd(event) { - event = event || window.event; - marker.icon.px = map.getPixelFromLonLat(marker.lonlat); - OpenLayers.Event.stop(event); -} - -var markerOver = function (evt) { - document.body.style.cursor='pointer'; - OpenLayers.Event.stop(evt); -}; -var markerOut = function (evt) { - document.body.style.cursor='auto'; - OpenLayers.Event.stop(evt); -}; -*/ diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 4c35fdf..f395333 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -141,7 +141,10 @@ See the file COPYING for details. } /* Add Layers */ settings.map.addLayers(settings.map_layers); - if (settings.map_layers.length > 1) settings.map.addControl(new OpenLayers.Control.LayerSwitcher()); + if (settings.map_layers.length > 1){ + settings.map.addControl(new OpenLayers.Control.LayerSwitcher( + {roundedCorner:false})); + } /* Vectors layer */ settings.layerVectors = new OpenLayers.Layer.Vector("Vector Layer"); settings.map.addLayer(settings.layerVectors); diff --git a/chimere/static/chimere/js/main_map.js b/chimere/static/chimere/js/main_map.js deleted file mode 100644 index 42c9b28..0000000 --- a/chimere/static/chimere/js/main_map.js +++ /dev/null @@ -1,534 +0,0 @@ -/* Copyright (C) 2008-2011 Étienne Loks - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -See the file COPYING for details. -*/ - -/* main map */ - -var current_cat = -1; - -/* open a category section */ -function toggleCategory(item){ - var id = item.id.split('_').pop(); - var old; - if (current_cat != -1){ - old = document.getElementById('maincategory_' + current_cat); - } else { - img = document.getElementById('maincategory_img_' + id); - if (img.src.split('/').pop() == "minus.png"){ - current_cat = id; - old = document.getElementById('maincategory_' + id); - } - } - if(old){ - old.style.display = 'None'; - old_img = document.getElementById('maincategory_img_' + current_cat); - old_img.src = media_path + "icons/plus.png"; - } - if (id != current_cat){ - current_cat = id; - document.getElementById('maincategory_' + current_cat).style.display = 'block'; - img = document.getElementById('maincategory_img_' + current_cat); - img.src = media_path + "icons/minus.png"; - } else { - current_cat = 0; - } -} - -/* reopen the current opened categories when a redraw occurs */ -function reOpenCurrent(){ - if (current_cat && current_cat != -1){ - document.getElementById('maincategory_' + current_cat).style.display = 'block'; - img = document.getElementById('maincategory_img_' + current_cat); - img.src = media_path + "icons/minus.png"; - } -} - -function reCheckCategories(){ - /* recheck categories when a redraw occurs */ - if (!checked_categories){ - return; - } - var checked_categories_ids = checked_categories.split('_'); - inputs = window.document.forms["frm_categories"]; - for (var i = 0; i < inputs.length; i++) { - input = inputs[i]; - cat_id = input.name.split('_').pop(); - if (checked_categories_ids.indexOf(cat_id) != -1){ - input.checked = true; - } - if (input.id == 'display_submited' && display_submited == true){ - input.checked = true; - } - } -} - -/* get available subcategories for a designed category */ -function getSubcategories(category_id){ - var ul = document.getElementById('maincategory_'+category_id); - var subcats = new Array(); - for (i in ul.children){ - var li = ul.children[i]; - if (li.id){ - subcats.push(li.id.split('_').pop()); - } - } - return subcats; -} - -/* check all the categories if clicked, unckeck if unclick */ -function checkAll(item){ - check = false; - if(item.checked == true){ - check = true; - } - id = item.id.split('_').pop(); - var subcats = getSubcategories(id); - for (i=0;i < subcats.length; i++){ - var checkbox = document.getElementById('category_'+subcats[i]); - checkbox.checked = check; - } -} - -var map; -var permalink; - -/* default size and offset for icon */ -var size = new OpenLayers.Size(21, 25); -var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); - -/* define global variable */ -var markers = new Array(); -var layerMarkers; -var layerVectors; - -var simple = false; -var first = true; - -var currentPopup; -var currentFeature; -var clicked = false; - -/* show a popup */ -function showPop(feature) { - if (currentPopup != null) { - currentPopup.hide(); - } - if (feature.popup == null) { - feature.popup = feature.createPopup(); - map.addPopup(feature.popup); - } else { - feature.popup.toggle(); - } - currentPopup = feature.popup; - /* hide on click on the cloud */ - currentPopup.groupDiv.onclick = hidePopUp; - permalink.updateLink(); -} - -/* check checked categories */ -var checked_categories; -var display_submited = false; - -function updateCheckedCategories(){ - /* get checked categories */ - inputs = window.document.forms["frm_categories"]; - checked_categories = ''; - display_submited = false; - for (var i = 0; i < inputs.length; i++) { - input = inputs[i]; - // 'category_'.length : 9 - if (input.checked - && input.name.substring(9, 0) == 'category_'){ - id = input.name.substring(9, input.name.length); - if(checked_categories) checked_categories += '_'; - checked_categories += id; - } - if (input.checked && input.name == 'display_submited'){ - display_submited = true; - } - } - permalink.updateLink(); -} - -/* load marker and route layer from a JSON feature string */ -function loadLayersFromJSON(layer_markers, layer_vectors, geo_objects){ - for (var i = 0; i < geo_objects.features.length; i++) { - var feature = geo_objects.features[i]; - if (feature.geometry.type == 'Point'){ - putMarker(layer_markers, feature); - } else if (feature.geometry.type == 'LineString') { - putRoute(layer_vectors, feature); - } - } -} - -/* zoom to an area */ -function zoomToArea(left, top, right, bottom){ - var bounds = new OpenLayers.Bounds(left, bottom, right, top); - bounds.transform(epsg_display_projection, epsg_projection); - map.zoomToExtent(bounds, true); - loadCategories(); -} - -/* zoom to a desired category */ -function zoomToCategory(category_id){ - var sub_cats = getSubcategories(category_id).join('_'); - zoomToSubCategory(sub_cats); -} - -/* zoom to desired sub categories */ -function zoomToSubCategory(subcategory_ids){ - /* 0 stand for all categories */ - var uri = extra_url + "getGeoObjects/" + subcategory_ids; - if (display_submited) uri += "/A_S"; - OpenLayers.loadURL(uri, '', this, zoomToCategoryExtent); -} - -/* zoom to a selected category from an http response GeoJSON */ -function zoomToCategoryExtent(response){ - if (response.responseText.indexOf('no results') != -1) return; - var fakeLayerVectors = new OpenLayers.Layer.Vector("Fake vector layer"); - var fakeLayerMarkers = new OpenLayers.Layer.Markers('Fake POIs layer'); - var json = new OpenLayers.Format.JSON(); - var geo_objects = json.read(response.responseText); - /* load every geo object */ - loadLayersFromJSON(fakeLayerMarkers, fakeLayerVectors, geo_objects); - var bounds = fakeLayerMarkers.getDataExtent(); - if (bounds){ - bounds.extend(fakeLayerVectors.getDataExtent()); - } else { - bounds = fakeLayerVectors.getDataExtent(); - } - if(bounds){ - map.zoomToExtent(bounds); - } - fakeLayerMarkers.destroy(); - fakeLayerVectors.destroy(); - loadCategories(); -} - -/* update the categories with an AJAX request */ -function loadCategories(){ - var current_extent = map.getExtent().transform(map.getProjectionObject(), - epsg_display_projection); - current_extent = current_extent.toArray().join('_') - current_extent = current_extent.replace(/\./g, 'D'); - current_extent = current_extent.replace(/-/g, 'M'); - var uri = extra_url + "getAvailableCategories/" + current_extent; - if (display_submited) uri += "/A_S"; - OpenLayers.loadURL(uri, '', this, updateCategories); -} - -function updateCategories(response){ - if (response.responseText.indexOf('no results') != -1) { - return; - } - document.getElementById('categories').innerHTML = response.responseText; - reCheckCategories(); - reOpenCurrent(); -} - -/* load geo objects with an AJAX request */ -function loadGeoObjects(){ - if (!first){ updateCheckedCategories(); } - else if (p_checked_categories){ - checked_categories = p_checked_categories.join('_'); - } - first = false; - /* 0 stand for all categories */ - if (!checked_categories) checked_categories = '0'; - var uri = extra_url + "getGeoObjects/" + checked_categories; - if (display_submited) uri += "/A_S"; - OpenLayers.loadURL(uri, '', this, setGeoObjects); -} - -/* update the marker and vector layers from an http response GeoJSON */ -function setGeoObjects(response){ - if(layerMarkers) layerMarkers.destroy(); - if(layerVectors) layerVectors.destroy(); - if (response.responseText.indexOf('no results') == -1) { - /* clean the marker layer */ - if (currentPopup) { - currentPopup.hide(); - if (!simple){ - hide('detail'); - } - } - layerVectors = new OpenLayers.Layer.Vector("Vector Layer"); - map.addLayer(layerVectors); - layerVectors.setOpacity(0.8); - layerMarkers = new OpenLayers.Layer.Markers('POIs'); - map.addLayer(layerMarkers); - layerMarkers.setOpacity(0.8); - - var json = new OpenLayers.Format.JSON(); - var geo_objects = json.read(response.responseText); - /* load every geo object */ - loadLayersFromJSON(layerMarkers, layerVectors, geo_objects); - /* - var geojson = new OpenLayers.Format.GeoJSON(); - var markers_pt = geojson.read(response.responseText); - for (var i = 0; i < markers_pt.length; i++) { - putMarker2(markers_pt[i]); - }*/ - } -} - -/* put a route on the map */ -function putRoute(layer, route) { - var polyline = route.geometry; - var point_array = new Array(); - for (i=0; i" + - response.responseText + ""); - } - } -} - -/* show the detail of a category */ -function displayCategoryDetail(category_id) { - var uri = extra_url + "getDescriptionDetail/" + category_id; - OpenLayers.loadURL(uri, '', this, setCategoryDetail); -} - -/* update the category detail panel from an http response */ -function setCategoryDetail(response){ - if (response.responseText.indexOf('no results') == -1) { - document.getElementById('category_detail').innerHTML = - response.responseText; - show('category_detail'); - } -} - -/* new permalink createParams method - update when facilities are given to -personalize the permalink */ -function createParams(center, zoom, layers) { - center = center || this.map.getCenter(); - var params = OpenLayers.Util.getParameters(this.base); - // If there's still no center, map is not initialized yet. - // Break out of this function, and simply return the params from the - // base link. - if (center) { - center.transform(epsg_projection, epsg_display_projection); - //zoom - params.zoom = zoom || this.map.getZoom(); - //lon,lat - var lat = center.lat; - var lon = center.lon; - params.lat = Math.round(lat*100000)/100000; - params.lon = Math.round(lon*100000)/100000; - //layers - layers = layers || this.map.layers; - params.layers = ''; - for (var i=0, len=layers.length; i 0){ - permalink.div.childNodes[0].textContent = permalink_label; - } - map.addLayers([map_layer]); - - map.events.register('click', map, hidePopUp); - if (dynamic_categories){ - map.events.register('moveend', map, refreshMapItems); - } - /* if from a permalink */ - if (p_zoom) { - var p_centerLonLat = new OpenLayers.LonLat(p_lon, p_lat); - p_centerLonLat.transform(epsg_display_projection, epsg_projection); - map.setCenter(p_centerLonLat, p_zoom); - if (p_display_submited) { - document.getElementById('display_submited_check').checked = true; - } - if (p_checked_categories){ - /* ckeck selected categories and uncheck others */ - inputs = window.document.forms["frm_categories"]; - for (var i = 0; i < inputs.length; i++) { - input = inputs[i]; - if (input.name.substring(9, 0) == 'category_'){ - id = input.name.substring(9, input.name.length); - input.checked = false; - for (var cc=0; cc < p_checked_categories.length; cc++){ - if (p_checked_categories[cc] == id){ - input.checked = true; - } - } - } - } - checked_categories = p_checked_categories.join('_'); - } - } - /* if not zoom to the extent in cookies */ - else if (!zoomToCurrentExtent(map)){ - /* if no extent in cookies zoom to default */ - map.setCenter(centerLonLat, 13); - } - loadCategories(); - loadGeoObjects(); -} diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html index 8b92c6c..d24a13a 100644 --- a/chimere/templates/chimere/blocks/head_chimere.html +++ b/chimere/templates/chimere/blocks/head_chimere.html @@ -17,7 +17,7 @@ OpenLayers.ImgPath = '{{ STATIC_URL }}chimere/img/'; var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:{{ EPSG_PROJECTION }}'); var CENTER_LONLAT = centerLonLat = new OpenLayers.LonLat{{ DEFAULT_CENTER }}.transform(epsg_display_projection, epsg_projection); - var map_layer = {{ MAP_LAYER|safe }}; + /*var map_layer = {{ MAP_LAYER|safe }};*/ var restricted_extent; {% if area_name %} var area_name = '{{ area_name }}';{% endif %} diff --git a/chimere/templates/chimere/blocks/map_params.html b/chimere/templates/chimere/blocks/map_params.html index 448e206..84b365e 100644 --- a/chimere/templates/chimere/blocks/map_params.html +++ b/chimere/templates/chimere/blocks/map_params.html @@ -1,7 +1,7 @@ {% load i18n %} \n" % js return js +def get_map_layers(area_name=''): + from chimere.models import Area + area = None + if area_name: + try: + area = Area.objects.get(name=area_name) + except ObjectDoesNotExist: + pass + else: + try: + area = Area.objects.get(default=True) + except ObjectDoesNotExist: + pass + map_layers = [] + if area and area.layers.count(): + map_layers = [layer.layer_code for layer in area.layers.all()] + elif settings.CHIMERE_DEFAULT_MAP_LAYER: + map_layers = [settings.CHIMERE_DEFAULT_MAP_LAYER] + else: + map_layers = ["new OpenLayers.Layer.OSM.Mapnik('Mapnik')"] + return map_layers + class ChosenSelectWidget(forms.Select): """ Chosen select widget. @@ -126,21 +149,21 @@ class PointChooserWidget(forms.TextInput): value = None else: value = None + map_layers = get_map_layers(area_name) js = """ var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s'); var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s'); var chimere_init_options = {}; - chimere_init_options["map_layers"] = [new OpenLayers.Layer.OSM.Mapnik('Mapnik')]; + chimere_init_options["map_layers"] = [%s]; chimere_init_options['dynamic_categories'] = false; chimere_init_options['edition'] = true; chimere_init_options["checked_categories"] = []; """ % (settings.CHIMERE_EPSG_DISPLAY_PROJECTION, - settings.CHIMERE_EPSG_PROJECTION) + settings.CHIMERE_EPSG_PROJECTION, + ", ".join(map_layers)) #TODO: manage area tpl = u"\n" % js - #tpl += u'\n' % \ - # settings.STATIC_URL tpl += u"
"\ u"
"\ u"

"\ @@ -197,17 +220,19 @@ class RouteChooserWidget(forms.TextInput): Render a map and latitude, longitude information field ''' tpl = getMapJS(area_name) + map_layers = get_map_layers(area_name) js = """ var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s'); var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s'); var chimere_init_options = {}; - chimere_init_options["map_layers"] = [new OpenLayers.Layer.OSM.Mapnik('Mapnik')]; + chimere_init_options["map_layers"] = [%s]; chimere_init_options['dynamic_categories'] = false; chimere_init_options['edition'] = true; chimere_init_options['edition_type_is_route'] = true; chimere_init_options["checked_categories"] = []; """ % (settings.CHIMERE_EPSG_DISPLAY_PROJECTION, - settings.CHIMERE_EPSG_PROJECTION) + settings.CHIMERE_EPSG_PROJECTION, + ", ".join(map_layers)) tpl = u"\n" % js #TODO: manage area diff --git a/example_project/settings.py b/example_project/settings.py index b0d4188..332198e 100644 --- a/example_project/settings.py +++ b/example_project/settings.py @@ -71,10 +71,10 @@ CHIMERE_DEFAULT_CATEGORIES = [1] # display picture inside the description by default or inside a galery? CHIMERE_MINIATURE_BY_DEFAULT = False -# JS definition of the main map cf. OpenLayers documentation for more details -#MAP_LAYER = '''new OpenLayers.Layer.OSM.CycleMap("Cycle map", { -#displayOutsideMaxExtent: true, wrapDateLine: true})''' # OSM cyclemap -CHIMERE_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map +# JS definition of the default map (for admin and when no map are defined in +# the application) +# cf. OpenLayers documentation for more details +CHIMERE_DEFAULT_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map CHIMERE_XAPI_URL = 'http://open.mapquestapi.com/xapi/api/0.6/' CHIMERE_OSM_API_URL = 'api06.dev.openstreetmap.org' # test URL -- cgit v1.2.3