diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-09-13 23:04:00 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-09-13 23:04:00 +0200 |
commit | 4248e144950d7977e25f9e6de244892275861258 (patch) | |
tree | f4c5ebd72b8259b425eb01edad344e540a98c237 | |
parent | a6e5edbde8c9053e66898e2d58bc9a2b9191b8e4 (diff) | |
download | Chimère-4248e144950d7977e25f9e6de244892275861258.tar.bz2 Chimère-4248e144950d7977e25f9e6de244892275861258.zip |
jquery.chimere.js: adaptations for multiple maps on the same page
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 1601 |
1 files changed, 847 insertions, 754 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 2e8d6a8..d4b7e28 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -244,6 +244,7 @@ function transformCoordToLonLat(coord) { // if leave to false every click on the map hide the pop-up explicit_popup_hide: false, controls:null, + popupId: 'popup', // OL3-deprecated popupClass: OpenLayers.Popup.FramedCloud, popupClass: null, popupContentFull: false, // if true the detail is inside the popup @@ -291,7 +292,12 @@ function transformCoordToLonLat(coord) { /* * Plugin init function */ + map_id: function(item){ + return $(item).attr('id'); + }, init: function ( options ) { + var map_id = methods.map_id(this); + /* Manage parameters */ if (defaults.map_layers == null || ! defaults.map_layers.length){ defaults.map_layers = [ @@ -301,15 +307,15 @@ function transformCoordToLonLat(coord) { source: new ol.source.OSM() })]; } - settings = $.extend({}, defaults); - settings._revision = 0; + settings[map_id] = $.extend({}, defaults); + settings[map_id]._revision = 0; - if ( options ) $.extend(settings, options); + if ( options ) $.extend(settings[map_id], options); - if (settings.controls == null){ + if (settings[map_id].controls == null){ /* OL3-deprecated-mobile - if (settings.mobile){ - settings.controls = [new OpenLayers.Control.TouchNavigation({ + if (settings[map_id].mobile){ + settings[map_id].controls = [new OpenLayers.Control.TouchNavigation({ dragPanOptions: { enableKinetic: true } @@ -317,15 +323,15 @@ function transformCoordToLonLat(coord) { new OpenLayers.Control.Zoom()]; } else { */ - settings.controls = [ + settings[map_id].controls = [ new ol.control.Attribution(), new ol.control.ScaleLine(), new ol.control.Zoom(), new ol.control.FullScreen() ]; // OverviewMap mess with clustering - if (!settings.enable_clustering){ - settings.controls.push( + if (!settings[map_id].enable_clustering){ + settings[map_id].controls.push( new ol.control.OverviewMap({ collapsed: false }) @@ -333,26 +339,25 @@ function transformCoordToLonLat(coord) { } //} } - var map_element = $(this).attr('id'); var view_options = { - projection: settings.projection, + projection: settings[map_id].projection, center: CENTER_LONLAT, zoom: DEFAULT_ZOOM, - maxZoom: settings.maxZoom + maxZoom: settings[map_id].maxZoom }; - if (settings.minZoom){ - view_options['minZoom'] = settings.minZoom; + if (settings[map_id].minZoom){ + view_options['minZoom'] = settings[map_id].minZoom; } - if (settings.restricted_extent - && settings.restricted_extent.length == 4){ + if (settings[map_id].restricted_extent + && settings[map_id].restricted_extent.length == 4){ var extent = [ - Math.round(settings.restricted_extent[0] * 1000) / 1000, - Math.round(settings.restricted_extent[1] * 1000) / 1000, - Math.round(settings.restricted_extent[2] * 1000) / 1000, - Math.round(settings.restricted_extent[3] * 1000) / 1000 + Math.round(settings[map_id].restricted_extent[0] * 1000) / 1000, + Math.round(settings[map_id].restricted_extent[1] * 1000) / 1000, + Math.round(settings[map_id].restricted_extent[2] * 1000) / 1000, + Math.round(settings[map_id].restricted_extent[3] * 1000) / 1000 ] var point_1 = ol.proj.transform( [extent[0], extent[1]], EPSG_DISPLAY_PROJECTION, @@ -364,38 +369,38 @@ function transformCoordToLonLat(coord) { point_2[0], point_2[1]] } - $.each(settings.map_layers, function(idx, layer){ + $.each(settings[map_id].map_layers, function(idx, layer){ // property for permalink layer.set('base-layer-idx', idx); }); - settings.view = new ol.View(view_options); + settings[map_id].view = new ol.View(view_options); var map_options = { - controls: settings.controls, - view: settings.view, - target: map_element, - layers: settings.map_layers + controls: settings[map_id].controls, + view: settings[map_id].view, + target: map_id, + layers: settings[map_id].map_layers }; - settings.current_position = null; - settings.suspend_load = false; + settings[map_id].current_position = null; + settings[map_id].suspend_load = false; /* Create map object */ - settings.map = map = new ol.Map(map_options); + settings[map_id].map = map = new ol.Map(map_options); // get interactions - settings.map.getInteractions().forEach(function (interaction){ + settings[map_id].map.getInteractions().forEach(function (interaction){ if (interaction instanceof ol.interaction.MouseWheelZoom){ - settings.MouseWheelZoom = interaction; + settings[map_id].MouseWheelZoom = interaction; } if (interaction instanceof ol.interaction.DragPan){ - settings.DragPan = interaction; + settings[map_id].DragPan = interaction; } }); - settings.deactivate_on_hover = [settings.MouseWheelZoom, - settings.DragPan]; + settings[map_id].deactivate_on_hover = [settings[map_id].MouseWheelZoom, + settings[map_id].DragPan]; // only display the first layer - $.each(settings.map.getLayers().getArray(), function(i, layer){ + $.each(settings[map_id].map.getLayers().getArray(), function(i, layer){ if (i > 0){ layer.setVisible(false); } @@ -403,7 +408,7 @@ function transformCoordToLonLat(coord) { // manage context menu var contextmenu_items = []; - if (settings.routing){ + if (settings[map_id].routing){ contextmenu_items = [ { text: labels['routing_from'], @@ -430,19 +435,19 @@ function transformCoordToLonLat(coord) { contextmenu_items = contextmenu_items.concat([ { text: labels['center_map'], - callback: methods.mapCenter, + callback: methods._getMapCenter(map_id), classname: 'ol-ctx-menu-center ol-ctx-menu-icon' }, '-', { text: labels['zoom_in'], classname: 'ol-ctx-menu-zoom-in ol-ctx-menu-icon', - callback: methods.zoomIn + callback: methods._getZoomIn(map_id) }, { text: labels['zoom_out'], classname: 'ol-ctx-menu-zoom-out ol-ctx-menu-icon', - callback: methods.zoomOut + callback: methods._getZoomOut(map_id) } ]); @@ -462,40 +467,40 @@ function transformCoordToLonLat(coord) { } }); - settings.map.addControl(contextmenu); + settings[map_id].map.addControl(contextmenu); } /* OL3-deprecated - if (settings.map_layers.length > 1){ - settings.map.addControl(new OpenLayers.Control.LayerSwitcher( + if (settings[map_id].map_layers.length > 1){ + settings[map_id].map.addControl(new OpenLayers.Control.LayerSwitcher( {roundedCorner:false})); } // select the default map layer - if (!settings.selected_map_layer){ - settings.selected_map_layer = 0; + if (!settings[map_id].selected_map_layer){ + settings[map_id].selected_map_layer = 0; } - settings.map.setBaseLayer( - settings.map_layers[settings.selected_map_layer]); + settings[map_id].map.setBaseLayer( + settings[map_id].map_layers[settings[map_id].selected_map_layer]); */ - settings.layerSwitcher = new ol.control.LayerSwitcher(); - settings.map.addControl(settings.layerSwitcher); + settings[map_id].layerSwitcher = new ol.control.LayerSwitcher(); + settings[map_id].map.addControl(settings[map_id].layerSwitcher); /* marker layer */ - settings.iconStyles = new Object(); - settings.dbFeatures = new ol.Collection(); + settings[map_id].iconStyles = new Object(); + settings[map_id].dbFeatures = new ol.Collection(); - settings.sourceDbFeatures = new ol.source.Vector({ - features: settings.dbFeatures + settings[map_id].sourceDbFeatures = new ol.source.Vector({ + features: settings[map_id].dbFeatures }); - settings.layerDbFeatures = new ol.layer.Vector({ - source: settings.sourceDbFeatures + settings[map_id].layerDbFeatures = new ol.layer.Vector({ + source: settings[map_id].sourceDbFeatures }); /* - settings.layerDbFeatures = new ol.layer.Image({ + settings[map_id].layerDbFeatures = new ol.layer.Image({ source: new ol.source.ImageVector({ - source: settings.sourceDbFeatures, + source: settings[map_id].sourceDbFeatures, style: function(feature, resolution){ if (feature.getGeometry().getType() == "Polygon"){ @@ -513,184 +518,186 @@ function transformCoordToLonLat(coord) { }) }); */ - settings.map.addLayer(settings.layerDbFeatures); - - // popup management - settings.popup_item = document.getElementById('popup'); - var popup_options = { - element: settings.popup_item, - positioning: 'bottom-left', - stopEvent: false + settings[map_id].map.addLayer(settings[map_id].layerDbFeatures); + + if (!settings[map_id].edition){ + // popup management + settings[map_id].popup_item = document.getElementById(settings[map_id].popupId); + var popup_options = { + element: settings[map_id].popup_item, + positioning: 'bottom-left', + stopEvent: false + } + settings[map_id].popup = new ol.Overlay(popup_options); + settings[map_id].map.addOverlay(settings[map_id].popup); } - settings.popup = new ol.Overlay(popup_options); - settings.map.addOverlay(settings.popup); // manage the routing - if (settings.routing){ - settings.routing_start = null; - settings.routing_steps = new Array(); - settings.routing_end = null; - settings.routingFeatures = new ol.Collection(); - - settings.sourceRoutingFeatures = new ol.source.Vector({ - features: settings.routingFeatures + if (settings[map_id].routing){ + settings[map_id].routing_start = null; + settings[map_id].routing_steps = new Array(); + settings[map_id].routing_end = null; + settings[map_id].routingFeatures = new ol.Collection(); + + settings[map_id].sourceRoutingFeatures = new ol.source.Vector({ + features: settings[map_id].routingFeatures }); - settings.layerRoutingFeatures = new ol.layer.Vector({ - source: settings.sourceRoutingFeatures + settings[map_id].layerRoutingFeatures = new ol.layer.Vector({ + source: settings[map_id].sourceRoutingFeatures }); - settings.map.addLayer(settings.layerRoutingFeatures); + settings[map_id].map.addLayer(settings[map_id].layerRoutingFeatures); } // display marker on click - settings.map.on('click', function(evt) { - var feature = settings.map.forEachFeatureAtPixel( + settings[map_id].map.on('click', function(evt) { + var feature = settings[map_id].map.forEachFeatureAtPixel( evt.pixel, function(feature, layer) { return feature; } ); - if (typeof feature != 'undefined') settings.current_feature = feature; - if (!settings.edition){ - if (methods._is_popuphovering()) return; - $(settings.popup_item).popover('destroy'); + if (typeof feature != 'undefined') settings[map_id].current_feature = feature; + if (!settings[map_id].edition){ + if (methods._is_popuphovering(map_id)) return; + $(settings[map_id].popup_item).popover('destroy'); if (feature) { // zoom on aggregated var key = feature.get('key'); if (key && key.length > 3 && key.substring(0, 3) == 'agg' && - settings._zoom_need_reload){ - var current_zoom = settings.map.getView().getZoom(); - if (current_zoom < settings._zoom_need_reload){ - settings.map.getView().setZoom(settings._zoom_need_reload); - settings.map.getView().setCenter(evt.coordinate); + settings[map_id]._zoom_need_reload){ + var current_zoom = settings[map_id].map.getView().getZoom(); + if (current_zoom < settings[map_id]._zoom_need_reload){ + settings[map_id].map.getView().setZoom(settings[map_id]._zoom_need_reload); + settings[map_id].map.getView().setCenter(evt.coordinate); } return } if (key && key.length > 6 && key.substring(0, 7) == 'cluster'){ - feature = methods.clickOnCluster(feature); + feature = methods.clickOnCluster(map_id, feature); } else { - methods.openPopup(feature); + methods.openPopup(map_id, feature); } } } }); - map.on('pointermove', function(e) { - var pixel = map.getEventPixel(e.originalEvent); - var hit = map.hasFeatureAtPixel(pixel); - var target = map.getTarget(); + settings[map_id].map.on('pointermove', function(e) { + var pixel = settings[map_id].map.getEventPixel(e.originalEvent); + var hit = settings[map_id].map.hasFeatureAtPixel(pixel); + var target = settings[map_id].map.getTarget(); target = typeof target === "string" ? document.getElementById(target) : target; target.style.cursor = hit ? 'pointer' : ''; }); /* Vectors layer */ - settings.vectors = new ol.Collection(); + settings[map_id].vectors = new ol.Collection(); - settings.sourceVectors = new ol.source.Vector({ - features: settings.vectors + settings[map_id].sourceVectors = new ol.source.Vector({ + features: settings[map_id].vectors }); - settings.layerVectors = new ol.layer.Vector({ - source: settings.sourceVectors + settings[map_id].layerVectors = new ol.layer.Vector({ + source: settings[map_id].sourceVectors }); - settings.map.addLayer(settings.layerVectors); - if (settings.edition) methods.activateEdition(); + settings[map_id].map.addLayer(settings[map_id].layerVectors); + if (settings[map_id].edition) methods.activateEdition(map_id); - // OL3-deprecated settings.layerVectors.setOpacity(0.8); + // OL3-deprecated settings[map_id].layerVectors.setOpacity(0.8); /* OL3-deprecated-routing - if (settings.edition_type_is_route){ - settings.map.addControl(new OpenLayers.Control.DrawFeature( - settings.layerVectors, OpenLayers.Handler.Path)); - settings.map.addControl(new OpenLayers.Control.ModifyFeature( - settings.layerVectors, {clickout:false, toggle:false})); + if (settings[map_id].edition_type_is_route){ + settings[map_id].map.addControl(new OpenLayers.Control.DrawFeature( + settings[map_id].layerVectors, OpenLayers.Handler.Path)); + settings[map_id].map.addControl(new OpenLayers.Control.ModifyFeature( + settings[map_id].layerVectors, {clickout:false, toggle:false})); } */ - if (settings.enable_clustering){ - settings.invisibleStyleIcon = new ol.style.Style({ + if (settings[map_id].enable_clustering){ + settings[map_id].invisibleStyleIcon = new ol.style.Style({ image: new ol.style.Icon({ src : MEDIA_URL+'chimere/img/marker-cluster.png', //still need something even if it's invisible opacity : 0 }) }); - methods.enableClustering(); + methods.enableClustering(map_id); } /* Markers layer */ - settings.icons = []; - settings.layerIcons = new ol.source.Vector({ - features: settings.icons + settings[map_id].icons = []; + settings[map_id].layerIcons = new ol.source.Vector({ + features: settings[map_id].icons }); - settings.layerDbFeatures = new ol.layer.Vector({ - source: settings.layerIcons + settings[map_id].layerDbFeatures = new ol.layer.Vector({ + source: settings[map_id].layerIcons }); - settings.map.addLayer(settings.layerDbFeatures); + settings[map_id].map.addLayer(settings[map_id].layerDbFeatures); /* OL3-deprecated - if (settings.dynamic_categories){ - settings.map.events.register('moveend', settings.map, + if (settings[map_id].dynamic_categories){ + settings[map_id].map.events.register('moveend', settings[map_id].map, methods.loadCategories); } */ /* OL3-deprecated // TODO make a function - if (settings.display_submited) { + if (settings[map_id].display_submited) { document.getElementById('display_submited_check').checked = true; } */ /* if we have some zoom and lon/lat from the init options */ - if (settings.zoom && settings.lon && settings.lat) { - var centerLonLat = [settings.lon, settings.lat]; - settings.view.setCenter(centerLonLat); - settings.view.setZoom(settings.zoom); + if (settings[map_id].zoom && settings[map_id].lon && settings[map_id].lat) { + var centerLonLat = [settings[map_id].lon, settings[map_id].lat]; + settings[map_id].view.setCenter(centerLonLat); + settings[map_id].view.setZoom(settings[map_id].zoom); } /* if not zoom to the extent in cookies */ - else if (!methods.zoomToCurrentExtent(settings.map)){ + else if (!methods.zoomToCurrentExtent(settings[map_id].map)){ /* if no extent in cookies zoom to default */ if(CENTER_LONLAT && DEFAULT_ZOOM){ - settings.view.setCenter(CENTER_LONLAT); - settings.view.setZoom(DEFAULT_ZOOM); + settings[map_id].view.setCenter(CENTER_LONLAT); + settings[map_id].view.setZoom(DEFAULT_ZOOM); } } var post_load_helper; - if (!settings.edition){ - methods.loadCategories(function(){ - if (settings.permalink) { + if (!settings[map_id].edition){ + methods.loadCategories(map_id, function(){ + if (settings[map_id].permalink) { post_load_helper = methods._param_map_from_permalink(); } - methods.loadGeoObjects(post_load_helper); + methods.loadGeoObjects(map_id, post_load_helper); }); } else { - if (settings.edition_type == 'route'){ - methods.activateRouteEdit(); - } else if (settings.edition_type == 'polygon'){ - methods.activatePolygonEdit(); + if (settings[map_id].edition_type == 'route'){ + methods.activateRouteEdit(map_id); + } else if (settings[map_id].edition_type == 'polygon'){ + methods.activatePolygonEdit(map_id); } else { - methods.activateMarkerEdit(); + methods.activateMarkerEdit(map_id); } } /* register reload on move once the map is loaded */ - settings._map_loaded = false; - settings._cache_boundingbox = false; - settings._reload_on_move = function(){}; - settings.map.once("postcompose", function(){ - if (settings.reload_on_move){ - methods.register_reload_on_move(); + settings[map_id]._map_loaded = false; + settings[map_id]._cache_boundingbox = false; + settings[map_id]._reload_on_move = function(){}; + settings[map_id].map.once("postcompose", function(){ + if (settings[map_id].reload_on_move){ + methods.register_reload_on_move(map_id); } - settings.map.on('moveend', methods._move_end); + settings[map_id].map.on('moveend', methods._move_end); - settings._map_loaded = true; - if (settings._load_geoobjects_requested){ - methods.loadGeoObjects(post_load_helper); + settings[map_id]._map_loaded = true; + if (settings[map_id]._load_geoobjects_requested){ + methods.loadGeoObjects(map_id, post_load_helper); } }); $("#permalink").click(methods.update_permalink); @@ -698,43 +705,43 @@ function transformCoordToLonLat(coord) { return; /* - if (settings.routing_start_lon && settings.routing_start_lat){ + if (settings[map_id].routing_start_lon && settings[map_id].routing_start_lat){ /// OL3-TODO - settings.current_position = new OpenLayers.LonLat( - settings.routing_start_lon, settings.routing_start_lat + settings[map_id].current_position = new OpenLayers.LonLat( + settings[map_id].routing_start_lon, settings[map_id].routing_start_lat ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); methods.routingFrom(); } - if (settings.routing_end_lon && settings.routing_end_lat){ + if (settings[map_id].routing_end_lon && settings[map_id].routing_end_lat){ /// OL3-TODO - settings.current_position = new OpenLayers.LonLat( - settings.routing_end_lon, settings.routing_end_lat + settings[map_id].current_position = new OpenLayers.LonLat( + settings[map_id].routing_end_lon, settings[map_id].routing_end_lat ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); methods.routingTo(); } - if (settings.routing_steps_lonlat){ + if (settings[map_id].routing_steps_lonlat){ /// OL3-TODO - for (var i = 0; i < settings.routing_steps_lonlat.length/2; i++) { - lon = settings.routing_steps_lonlat[i*2]; - lat = settings.routing_steps_lonlat[i*2+1]; - settings.current_position = new OpenLayers.LonLat(lon, lat + for (var i = 0; i < settings[map_id].routing_steps_lonlat.length/2; i++) { + lon = settings[map_id].routing_steps_lonlat[i*2]; + lat = settings[map_id].routing_steps_lonlat[i*2+1]; + settings[map_id].current_position = new OpenLayers.LonLat(lon, lat ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); methods.routingAddStep(); } } // verify that the initial display_feature is displayed - if (settings.display_feature){ + if (settings[map_id].display_feature){ /// OL3-TODO var is_displayed = false; - for(j=0; j<settings.layerDbFeatures.markers.length;j++){ - var c_marker = settings.layerDbFeatures.markers[j]; - if(c_marker.pk == settings.display_feature){ + for(j=0; j<settings[map_id].layerDbFeatures.markers.length;j++){ + var c_marker = settings[map_id].layerDbFeatures.markers[j]; + if(c_marker.pk == settings[map_id].display_feature){ is_displayed = true; } } if (!is_displayed){ - methods.loadMarker(settings.display_feature); + methods.loadMarker(settings[map_id].display_feature); } } /// OL3-TODO @@ -746,47 +753,48 @@ function transformCoordToLonLat(coord) { /* * hovering management */ - _set_animation: function(duration){ - if (!duration) duration = settings.animation_duration; - var v = settings.map.getView(); + _set_animation: function(map_id, duration){ + if (!duration) duration = settings[map_id].animation_duration; + var v = settings[map_id].map.getView(); var pan = ol.animation.pan( {duration: duration, source: v.getCenter()}) var zoom = ol.animation.zoom( {duration: duration, resolution: v.getResolution()}) - settings.map.beforeRender(pan, zoom); + settings[map_id].map.beforeRender(pan, zoom); }, - _is_popuphovering: function(){ + _is_popuphovering: function(map_id){ if ($('.popover-content').is(':visible') && $('.popover-content:hover').length > 0){ - for (idx in settings.deactivate_on_hover){ - settings.deactivate_on_hover[idx].setActive(false); + for (idx in settings[map_id].deactivate_on_hover){ + settings[map_id].deactivate_on_hover[idx].setActive(false); return true; } } else { - for (idx in settings.deactivate_on_hover){ - settings.deactivate_on_hover[idx].setActive(true); + for (idx in settings[map_id].deactivate_on_hover){ + settings[map_id].deactivate_on_hover[idx].setActive(true); return false; } } }, _move_end: function(e){ // prevent too fast reloading when UI is inconsistent + var map_id = e.map.getTarget(); var d = new Date(); var n = d.getTime(); - if (typeof settings._move_end_time != 'undefined'){ - if ((n - settings._move_end_time) < 500) return; + if (typeof settings[map_id]._move_end_time != 'undefined'){ + if ((n - settings[map_id]._move_end_time) < 500) return; } - settings._move_end_time = n; - settings._reload_on_move(e); + settings[map_id]._move_end_time = n; + settings[map_id]._reload_on_move(e); }, update_permalink: function(e){ - var view = settings.map.getView(); + var view = settings[map_id].map.getView(); var center = ol.proj.transform( view.getCenter(), EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); var layers = ''; - $.each(settings.map.getLayers().getArray(), function(i, l){ + $.each(settings[map_id].map.getLayers().getArray(), function(i, l){ var idx = l.getProperties()['base-layer-idx']; if (typeof idx != 'undefined' && String(idx) != '0' && l.getVisible()){ @@ -796,46 +804,46 @@ function transformCoordToLonLat(coord) { }); var current_feature = ''; - if (settings.current_feature) - current_feature = settings.current_feature.getId(); + if (settings[map_id].current_feature) + current_feature = settings[map_id].current_feature.getId(); var routing_speed = ''; - if (settings.routing_speed) - routing_speed = settings.routing_speed; + if (settings[map_id].routing_speed) + routing_speed = settings[map_id].routing_speed; var routing_transport = ''; - if (settings.routing_transport) - routing_transport = settings.routing_transport; + if (settings[map_id].routing_transport) + routing_transport = settings[map_id].routing_transport; var routing_start = ''; - if (settings.routing_start){ + if (settings[map_id].routing_start){ var geom = ol.proj.transform( - settings.routing_start.getGeometry().getCoordinates(), + settings[map_id].routing_start.getGeometry().getCoordinates(), EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); routing_start = geom[0].toFixed(5) + ':' + geom[1].toFixed(5); } var routing_end = ''; - if (settings.routing_end){ + if (settings[map_id].routing_end){ var geom = ol.proj.transform( - settings.routing_end.getGeometry().getCoordinates(), + settings[map_id].routing_end.getGeometry().getCoordinates(), EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); routing_end = geom[0].toFixed(5) + ':' + geom[1].toFixed(5); } var steps = ''; - if (settings.routing_steps){ - for (var i = 0; i < settings.routing_steps.length; i++){ + if (settings[map_id].routing_steps){ + for (var i = 0; i < settings[map_id].routing_steps.length; i++){ var geom = ol.proj.transform( - settings.routing_steps[i].getGeometry().getCoordinates(), + settings[map_id].routing_steps[i].getGeometry().getCoordinates(), EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); if (i > 0) steps += ';'; steps += geom[0].toFixed(5) + ':' + geom[1].toFixed(5); } } - settings.permalink = view.getZoom() + ';' + settings[map_id].permalink = view.getZoom() + ';' + center[0].toFixed(5) + ':' + center[1].toFixed(5) + ';' + layers + ';' - + settings.checked_categories.join('-')+ ';' + + settings[map_id].checked_categories.join('-')+ ';' + current_feature + ';' + routing_speed + ';' + routing_transport + ';' @@ -843,14 +851,14 @@ function transformCoordToLonLat(coord) { + routing_end + ';' + steps; var uri = extra_url - if (settings.area_id) uri += settings.area_id + "/"; - $("#permalink").attr('href', uri + "#" + settings.permalink); - return settings.permalink + if (settings[map_id].area_id) uri += settings[map_id].area_id + "/"; + $("#permalink").attr('href', uri + "#" + settings[map_id].permalink); + return settings[map_id].permalink }, _param_map_from_permalink: function(){ - var items = settings.permalink.split(';'); + var items = settings[map_id].permalink.split(';'); - var view = settings.map.getView(); + var view = settings[map_id].map.getView(); /* zoom & center */ if (items[1]){ @@ -871,7 +879,7 @@ function transformCoordToLonLat(coord) { /* layers */ if (items[2]){ var layers = items[2].split(':'); - $.each(settings.map.getLayers().getArray(), function(i, l){ + $.each(settings[map_id].map.getLayers().getArray(), function(i, l){ var idx = l.getProperties()['base-layer-idx']; if (typeof idx != 'undefined' && String(idx) != '0'){ if (layers.indexOf(String(idx)) != -1){ @@ -899,10 +907,10 @@ function transformCoordToLonLat(coord) { var routing_speed = items[5]; if (routing_speed) - settings.routing_speed = routing_speed; + settings[map_id].routing_speed = routing_speed; var routing_transport = items[6]; if (routing_transport) - settings.routing_transport = routing_transport; + settings[map_id].routing_transport = routing_transport; var steps = items[9]; if (steps){ @@ -944,9 +952,9 @@ function transformCoordToLonLat(coord) { if (current_feature){ methods.showPopup(current_feature); } - settings.layerDbFeatures.dispatchEvent('change'); - settings.clusterLayer.dispatchEvent('change'); - settings.map.render(); + settings[map_id].layerDbFeatures.dispatchEvent('change'); + settings[map_id].clusterLayer.dispatchEvent('change'); + settings[map_id].map.render(); } if (current_feature != "" || routing_start != "" @@ -955,45 +963,45 @@ function transformCoordToLonLat(coord) { } return post_load_helper; }, - _register_popuphovering: function(){ + _register_popuphovering: function(map_id){ $(document).on({ mouseenter: function(evt) { - for (idx in settings.deactivate_on_hover){ - settings.deactivate_on_hover[idx].setActive(false); + for (idx in settings[map_id].deactivate_on_hover){ + settings[map_id].deactivate_on_hover[idx].setActive(false); } }, mouseleave: function(evt) { - for (idx in settings.deactivate_on_hover){ - settings.deactivate_on_hover[idx].setActive(true); + for (idx in settings[map_id].deactivate_on_hover){ + settings[map_id].deactivate_on_hover[idx].setActive(true); } } }, '.popover-content'); - methods._is_popuphovering(); + methods._is_popuphovering(map_id); }, - _unregister_popuphovering: function(){ - for (idx in settings.deactivate_on_hover){ - settings.deactivate_on_hover[idx].setActive(true); + _unregister_popuphovering: function(map_id){ + for (idx in settings[map_id].deactivate_on_hover){ + settings[map_id].deactivate_on_hover[idx].setActive(true); } }, - register_reload_on_move: function(){ - settings._reload_on_move = function(evnt){ - settings._revision += 1; - var map = settings.map; + register_reload_on_move: function(map_id){ + settings[map_id]._reload_on_move = function(evnt){ + settings[map_id]._revision += 1; + var map = settings[map_id].map; var current_extent = ol.proj.transformExtent( map.getView().calculateExtent(map.getSize()), EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION ); - var current_zoom = settings.map.getView().getZoom(); + var current_zoom = settings[map_id].map.getView().getZoom(); var init; - if (!settings._cache_boundingbox) init = true; + if (!settings[map_id]._cache_boundingbox) init = true; if (init || - !ol.extent.containsCoordinate(settings._cache_boundingbox, + !ol.extent.containsCoordinate(settings[map_id]._cache_boundingbox, current_extent) || - (settings._zoom_need_reload && - current_zoom >= settings._zoom_need_reload) + (settings[map_id]._zoom_need_reload && + current_zoom >= settings[map_id]._zoom_need_reload) ){ // enlarge current extent to cache values x_extent = Math.abs(current_extent[2] - current_extent[0]); @@ -1004,46 +1012,46 @@ function transformCoordToLonLat(coord) { current_extent[3] = current_extent[3] + y_extent; if (!isNaN(current_extent[0]) && !isNaN(current_extent[1]) && !isNaN(current_extent[2]) && !isNaN(current_extent[3])){ - settings._cache_boundingbox = current_extent; - settings._cache_zoom = current_zoom; + settings[map_id]._cache_boundingbox = current_extent; + settings[map_id]._cache_zoom = current_zoom; } - if(!init) methods.loadGeoObjects(); + if(!init) methods.loadGeoObjects(map_id); } }; - settings._reload_on_move(); + settings[map_id]._reload_on_move(); }, - deactivateEdition: function(){ - settings.edition = false; - if (typeof settings.features != 'undefined'){ - settings.map.removeInteraction(settings.draw); - settings.map.removeInteraction(settings.modify); - settings.editionSource.clear(); + deactivateEdition: function(map_id){ + settings[map_id].edition = false; + if (typeof settings[map_id].features != 'undefined'){ + settings[map_id].map.removeInteraction(settings[map_id].draw); + settings[map_id].map.removeInteraction(settings[map_id].modify); + settings[map_id].editionSource.clear(); } }, - activateEdition: function(new_edition_type){ - settings.edition = true; - if (new_edition_type) settings.edition_type = new_edition_type; + activateEdition: function(map_id, new_edition_type){ + settings[map_id].edition = true; + if (new_edition_type) settings[map_id].edition_type = new_edition_type; - if (typeof settings.features == 'undefined'){ - settings.features = new ol.Collection(); + if (typeof settings[map_id].features == 'undefined'){ + settings[map_id].features = new ol.Collection(); - settings.editionSource = new ol.source.Vector( - {features: settings.features}); + settings[map_id].editionSource = new ol.source.Vector( + {features: settings[map_id].features}); - settings.editionSource.on( + settings[map_id].editionSource.on( 'changefeature', function(changed) { - if (changed) methods.updateInput(); + if (changed) methods.updateInput(map_id); }); - settings.editionSource.on( + settings[map_id].editionSource.on( 'addfeature', function(changed) { - if (changed) methods.updateInput(); + if (changed) methods.updateInput(map_id); }); - settings.editionVector = new ol.layer.Vector({ - source: settings.editionSource, + settings[map_id].editionVector = new ol.layer.Vector({ + source: settings[map_id].editionSource, style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(180, 180, 180, 0.3)' @@ -1060,54 +1068,54 @@ function transformCoordToLonLat(coord) { }) }) }); - settings.map.addLayer(settings.editionVector); + settings[map_id].map.addLayer(settings[map_id].editionVector); } else { - settings.map.removeInteraction(settings.draw); - settings.map.removeInteraction(settings.modify); - settings.editionSource.clear(); + settings[map_id].map.removeInteraction(settings[map_id].draw); + settings[map_id].map.removeInteraction(settings[map_id].modify); + settings[map_id].editionSource.clear(); } var edition_type = 'Point'; - if (settings.edition_type == 'route') edition_type = 'LineString'; - if (settings.edition_type == 'polygon') edition_type = 'Polygon'; + if (settings[map_id].edition_type == 'route') edition_type = 'LineString'; + if (settings[map_id].edition_type == 'polygon') edition_type = 'Polygon'; - settings.draw = new ol.interaction.Draw({ - source: settings.editionSource, + settings[map_id].draw = new ol.interaction.Draw({ + source: settings[map_id].editionSource, type: (edition_type), }); - settings.draw_activated = false; + settings[map_id].draw_activated = false; - settings.draw.on("drawend", function() { - settings.map.removeInteraction(settings.draw); - settings.draw_activated = false; + settings[map_id].draw.on("drawend", function() { + settings[map_id].map.removeInteraction(settings[map_id].draw); + settings[map_id].draw_activated = false; }); - settings.modify = new ol.interaction.Modify({ - features: settings.features, + settings[map_id].modify = new ol.interaction.Modify({ + features: settings[map_id].features, deleteCondition: function(event) { return ol.events.condition.shiftKeyOnly(event) && ol.events.condition.singleClick(event); } }); - settings.modify_activated = false; + settings[map_id].modify_activated = false; }, - enableClustering: function(){ + enableClustering: function(map_id){ // Style clusters and hide items inside clusters - settings._styleCache = {}; - settings._remindOldStyle = {}; - settings._remindUpdated = {}; - settings._currentRemind = -1; + settings[map_id]._styleCache = {}; + settings[map_id]._remindOldStyle = {}; + settings[map_id]._remindUpdated = {}; + settings[map_id]._currentRemind = -1; function clusterGetStyle (feature, resolution){ var key = feature.set('key', 'cluster'); var features = feature.get('features'); var size = features.length; feature.set('size', size); - var style = settings._styleCache[size]; + var style = settings[map_id]._styleCache[size]; // no cluster for lonely marker if (!style && size > 1){ var color = size>25 ? "192,0,0" : size>8 ? "255,128,0" : "0,128,0"; var radius = Math.max(8, Math.min(size*0.75, 20)); var lbl = size.toString(); - style = settings._styleCache[size] = [ + style = settings[map_id]._styleCache[size] = [ new ol.style.Style({ image: new ol.style.Circle({ radius: radius, @@ -1129,54 +1137,54 @@ function transformCoordToLonLat(coord) { ]; } // don't reapply the style when no modif have been opered - if (settings._currentRemind != settings._revision){ - settings._remindUpdated = []; - settings._currentRemind = settings._revision; + if (settings[map_id]._currentRemind != settings[map_id]._revision){ + settings[map_id]._remindUpdated = []; + settings[map_id]._currentRemind = settings[map_id]._revision; } if (size > 1){ // marker himself disappear for (idx in features){ var feat = features[idx]; - if (!settings._remindUpdated[feat.getId()]){ - if (!settings._remindOldStyle[feat.getId()]){ - settings._remindOldStyle[feat.getId()] = feat.getStyle(); + if (!settings[map_id]._remindUpdated[feat.getId()]){ + if (!settings[map_id]._remindOldStyle[feat.getId()]){ + settings[map_id]._remindOldStyle[feat.getId()] = feat.getStyle(); } - feat.setStyle(settings.invisibleStyleIcon); - settings._remindUpdated[feat.getId()] = 1; + feat.setStyle(settings[map_id].invisibleStyleIcon); + settings[map_id]._remindUpdated[feat.getId()] = 1; } } } else { // or re-appear var feat = features[0]; - if (!settings._remindUpdated[feat.getId()] && - settings._remindOldStyle[feat.getId()]){ - feat.setStyle(settings._remindOldStyle[feat.getId()]); - settings._remindUpdated[feat.getId()] = 1; + if (!settings[map_id]._remindUpdated[feat.getId()] && + settings[map_id]._remindOldStyle[feat.getId()]){ + feat.setStyle(settings[map_id]._remindOldStyle[feat.getId()]); + settings[map_id]._remindUpdated[feat.getId()] = 1; } } return style; } // Cluster Source - settings.clusterSource = new ol.source.Cluster({ + settings[map_id].clusterSource = new ol.source.Cluster({ distance: 40, source: new ol.source.Vector() }); // Animated cluster layer - settings.clusterLayer = new ol.layer.Vector({ + settings[map_id].clusterLayer = new ol.layer.Vector({ name: 'Cluster', - source: settings.clusterSource, + source: settings[map_id].clusterSource, // Cluster style style: clusterGetStyle }); - settings.map.addLayer(settings.clusterLayer); + settings[map_id].map.addLayer(settings[map_id].clusterLayer); }, - clickOnCluster: function(feature, zoom_level, duration, nb_zoom, + clickOnCluster: function(map_id, feature, zoom_level, duration, nb_zoom, current_nb_items){ if (!duration){ // zoom animation must be slower - duration = settings.animation_duration * 2; + duration = settings[map_id].animation_duration * 2; } if (!nb_zoom) nb_zoom = 0; @@ -1189,7 +1197,7 @@ function transformCoordToLonLat(coord) { return feature; } - var v = settings.map.getView(); + var v = settings[map_id].map.getView(); if (!zoom_level) zoom_level = v.getZoom() + 1; methods._set_animation(duration); @@ -1197,7 +1205,7 @@ function transformCoordToLonLat(coord) { if ($("#panel").is(":visible")){ var delta_x = $("#panel").width() / 2; // paning before zoom base delta divided by 2 - if (zoom_level < settings.maxZoom){ + if (zoom_level < settings[map_id].maxZoom){ delta_x = delta_x / 2; } v.centerOn( @@ -1208,7 +1216,7 @@ function transformCoordToLonLat(coord) { v.setCenter(feature.getGeometry().getCoordinates()); } // max zoom reached - if (zoom_level >= settings.maxZoom){ + if (zoom_level >= settings[map_id].maxZoom){ return methods.displayClusterDetail(feature); } @@ -1217,19 +1225,19 @@ function transformCoordToLonLat(coord) { nb_zoom += 1; // something wrong stop zoom! - if (nb_zoom > settings.maxZoom) return feature; + if (nb_zoom > settings[map_id].maxZoom) return feature; // wait for the animation to finish before rezoom return setTimeout( function(){ // our cluster must be at the center (if it exists after zoom) - var pixel = settings.map.getPixelFromCoordinate(v.getCenter()); + var pixel = settings[map_id].map.getPixelFromCoordinate(v.getCenter()); if ($("#panel").is(":visible")){ pixel[0] = pixel[0] + $("#panel").width() / 2; } var new_feature; - settings.map.forEachFeatureAtPixel( + settings[map_id].map.forEachFeatureAtPixel( pixel, function(feat, layer){ - if (layer == settings.clusterLayer){ + if (layer == settings[map_id].clusterLayer){ new_feature = feat; return true } @@ -1237,6 +1245,7 @@ function transformCoordToLonLat(coord) { ); if (new_feature){ return methods.clickOnCluster( + map_id, new_feature, zoom_level + 1, duration, nb_zoom, current_nb_items); } @@ -1259,10 +1268,10 @@ function transformCoordToLonLat(coord) { /* $('#cluster_list').dialog('open'); $("#cluster_list").on("dialogclose", methods.cleanCluster); - settings.map.setCenter( + settings[map_id].map.setCenter( feature.geometry.getBounds().getCenterLonLat()); // register after the display - settings.clustered_feature = feature.cluster; + settings[map_id].clustered_feature = feature.cluster; */ jQuery(".cluster_list").click( @@ -1277,14 +1286,14 @@ function transformCoordToLonLat(coord) { var offset_x = 0.1; var offset_y = -(radius + radius / 2); var geom = feat.getGeometry(); - methods.openPopup(feat, offset_x, offset_y, geom.getCoordinates()); + methods.openPopup(map_id, feat, offset_x, offset_y, geom.getCoordinates()); e.stopPropagation(); return false; }); return feature; }, - openPopup: function(feature, offset_x, offset_y, alt_coordinates){ - settings.current_feature = feature; + openPopup: function(map_id, feature, offset_x, offset_y, alt_coordinates){ + settings[map_id].current_feature = feature; if (!offset_x){ offset_x = feature.get('popup_offset_x'); if (!offset_x) offset_x = 0; @@ -1294,41 +1303,41 @@ function transformCoordToLonLat(coord) { if (!offset_y) offset_y = 0; } if (alt_coordinates){ - settings.popup.setPosition(alt_coordinates); + settings[map_id].popup.setPosition(alt_coordinates); } else { var geom = feature.getGeometry(); if (geom.getType() == 'Point'){ - settings.popup.setPosition(geom.getCoordinates()); + settings[map_id].popup.setPosition(geom.getCoordinates()); } else if (geom.getType() == 'Polygon'){ - settings.popup.setPosition(geom.getInteriorPoint().getCoordinates()); + settings[map_id].popup.setPosition(geom.getInteriorPoint().getCoordinates()); } else if (geom.getType() == 'LineString'){ - settings.popup.setPosition(geom.getCoordinateAt(0.5)); + settings[map_id].popup.setPosition(geom.getCoordinateAt(0.5)); } else if (geom.getType() == 'MultipleLineString'){ - settings.popup.setPosition(geom.getLineString(0).getCoordinatesAt(0.5)); + settings[map_id].popup.setPosition(geom.getLineString(0).getCoordinatesAt(0.5)); } } - settings.popup.setOffset([offset_x, offset_y]); - $(settings.popup_item).popover({ + settings[map_id].popup.setOffset([offset_x, offset_y]); + $(settings[map_id].popup_item).popover({ 'placement': 'top', 'html': true, 'content': feature.get('name') }); // when the popup is closed - $(settings.popup_item).on('hidden.bs.popover', function () { - settings.current_feature = null; - methods._unregister_popuphovering(); + $(settings[map_id].popup_item).on('hidden.bs.popover', function () { + settings[map_id].current_feature = null; + methods._unregister_popuphovering(map_id); }) - $(settings.popup_item).popover('show'); - methods.display_feature_detail(feature.get('key'), feature.get('name')); + $(settings[map_id].popup_item).popover('show'); + methods.display_feature_detail(map_id, feature.get('key'), feature.get('name')); }, /* end of new ol3 */ - update_permalink_activation:function(){ - if (settings.checked_categories.length || - settings.current_feature || - settings.routing_speed || - settings.routing_transport || - settings.routing_start || - settings.routing_end){ + update_permalink_activation:function(map_id){ + if (settings[map_id].checked_categories.length || + settings[map_id].current_feature || + settings[map_id].routing_speed || + settings[map_id].routing_transport || + settings[map_id].routing_start || + settings[map_id].routing_end){ $("#permalink").removeAttr("disabled"); } else { $("#permalink").attr("disabled", "disabled"); @@ -1357,61 +1366,78 @@ function transformCoordToLonLat(coord) { }, activateContextMenu: function(){ - settings.edition_type_is_route = false; - // settings.map.events.unregister('click', settings.map, + settings[map_id].edition_type_is_route = false; + // settings[map_id].map.events.unregister('click', settings[map_id].map, // methods.setMarker); - // settings.map.events.register('click', settings.map, + // settings[map_id].map.events.register('click', settings[map_id].map, // methods.displayMapMenu); }, - activatePolygonEdit: function(){ + activatePolygonEdit: function(map_id){ // TODO OL3 return; }, - activateRouteEdit: function(){ + activateRouteEdit: function(map_id){ // TODO OL3 return; /* - settings.edition_type_is_route = true; + settings[map_id].edition_type_is_route = true; methods.cleanMarker(); - // settings.map.events.unregister('click', settings.map, + // settings[map_id].map.events.unregister('click', settings[map_id].map, // methods.setMarker); - if (settings.routing){ - settings.map.events.register('click', settings.map, + if (settings[map_id].routing){ + settings[map_id].map.events.register('click', settings[map_id].map, methods.displayMapMenu); } else { - settings.layerVectors.events.register('featuremodified', - settings.layerVectors, helpers.updateRouteForm); - settings.layerVectors.events.register('featureadded', - settings.layerVectors, helpers.featureRouteCreated); + settings[map_id].layerVectors.events.register('featuremodified', + settings[map_id].layerVectors, helpers.updateRouteForm); + settings[map_id].layerVectors.events.register('featureadded', + settings[map_id].layerVectors, helpers.featureRouteCreated); } */ }, - activateMarkerEdit: function(){ - settings.edition_type_is_route = false; + activateMarkerEdit: function(map_id){ + settings[map_id].edition_type_is_route = false; if ($('#chimere_map_menu').length){ $('#chimere_map_menu').hide(); } /* - if (settings.current_popup != null) { - settings.current_popup.hide(); + if (settings[map_id].current_popup != null) { + settings[map_id].current_popup.hide(); }*/ - // settings.map.events.unregister('click', settings.map, + // settings[map_id].map.events.unregister('click', settings[map_id].map, // methods.displayMapMenu); - //settings.map.events.register('click', settings.map, + //settings[map_id].map.events.register('click', settings[map_id].map, // methods.setMarker); }, // change map_layer changeMapLayer: function(map_idx){ - settings.map.setBaseLayer(settings.map_layers[map_idx]); + settings[map_id].map.setBaseLayer(settings[map_id].map_layers[map_idx]); }, - // init the context menu + // zoom in from the map menu + _getZoomIn: function(map_id){ + zoomIn = function(){ + v = settings[map_id].map.getView(); + var zoom_level = v.getZoom() + 1; + if (zoom_level >= settings[map_id].maxZoom){ + return; + } + methods._set_animation(map_id); + v.setZoom(zoom_level); + } + return zoomIn; + }, zoomIn: function(){ - v = settings.map.getView(); + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + v = settings[map_id].map.getView(); var zoom_level = v.getZoom() + 1; - if (zoom_level >= settings.maxZoom){ + if (zoom_level >= settings[map_id].maxZoom){ return; } methods._set_animation(); @@ -1419,10 +1445,27 @@ function transformCoordToLonLat(coord) { }, // zoom out from the map menu + _getZoomOut: function(map_id){ + zoomOut = function(){ + v = settings[map_id].map.getView(); + var zoom_level = v.getZoom() - 1; + if (zoom_level <= settings[map_id].minZoom){ + return; + } + methods._set_animation(map_id); + v.setZoom(zoom_level); + } + return zoomOut; + }, zoomOut: function(){ - v = settings.map.getView(); + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + v = settings[map_id].map.getView(); var zoom_level = v.getZoom() - 1; - if (zoom_level <= settings.minZoom){ + if (zoom_level <= settings[map_id].minZoom){ return; } methods._set_animation(); @@ -1430,33 +1473,36 @@ function transformCoordToLonLat(coord) { }, // center from the map menu - mapCenter: function(obj){ - methods._set_animation(); - if ($("#panel").is(":visible")){ - var delta_x = $("#panel").width() / 2; - settings.view.centerOn( - obj.coordinate, - [0, 0], - [delta_x, 0]); - } else { - settings.view.setCenter(obj.coordinate); + _getMapCenter: function(map_id){ + mapCenter = function(obj){ + methods._set_animation(map_id); + if ($("#panel").is(":visible")){ + var delta_x = $("#panel").width() / 2; + settings[map_id].view.centerOn( + obj.coordinate, + [0, 0], + [delta_x, 0]); + } else { + settings[map_id].view.setCenter(obj.coordinate); + } } + return mapCenter }, // center from the lon lat mapCenterOnLonLat: function(options){ - settings.current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); - settings.current_position = settings.current_position.transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.map.setCenter(settings.current_position); + settings[map_id].current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); + settings[map_id].current_position = settings[map_id].current_position.transform(EPSG_DISPLAY_PROJECTION, + settings[map_id].map.getProjectionObject()); + settings[map_id].map.setCenter(settings[map_id].current_position); }, // set current position setCurrentPosition: function(lonlat){ - settings.current_position = lonlat; + settings[map_id].current_position = lonlat; }, addLayer: function(layer){ - settings.map.addLayer(layer); + settings[map_id].map.addLayer(layer); }, /* zoomOnCluster: function(feature){ @@ -1478,16 +1524,16 @@ function transformCoordToLonLat(coord) { $('#cluster_list').html(content); $('#cluster_list').dialog('open'); $("#cluster_list").on("dialogclose", methods.cleanCluster); - settings.map.setCenter( + settings[map_id].map.setCenter( feature.geometry.getBounds().getCenterLonLat()); // register after the display - settings.clustered_feature = feature.cluster; + settings[map_id].clustered_feature = feature.cluster; jQuery(".cluster_list").click( function(e){ $('#cluster_list').dialog('close'); var splitted = $(this).attr('id').split('_'); var index = splitted[splitted.length-1]; - m = settings.clustered_feature[parseInt(index)].attributes.marker; + m = settings[map_id].clustered_feature[parseInt(index)].attributes.marker; m.events.triggerEvent('click'); e.stopPropagation(); }); @@ -1501,38 +1547,38 @@ function transformCoordToLonLat(coord) { success: function (data) { var c_feat = null; for (idx in data){ - c_feat = methods.addMarker(data[idx]); + c_feat = methods.addMarker(map_id, data[idx]); } if (c_feat && open_popup != 'undefined' && open_popup) - methods.openPopup(c_feat); + methods.openPopup(map_id, c_feat); } }); }, /* * Load markers and route from DB */ - loadGeoObjects: function (post_load_helper) { + loadGeoObjects: function (map_id, post_load_helper) { if($('#waiting').length){$('#waiting').show();} - if (!settings._map_loaded){ - settings._load_geoobjects_requested = true; + if (!settings[map_id]._map_loaded){ + settings[map_id]._load_geoobjects_requested = true; return; } - settings._load_geoobjects_requested = false; + settings[map_id]._load_geoobjects_requested = false; - helpers.retrieve_checked_categories(); - var ids = settings.checked_categories.join('_'); + helpers.retrieve_checked_categories(map_id); + var ids = settings[map_id].checked_categories.join('_'); if (!ids) ids = '0'; var uri = extra_url + "getGeoObjects/" + ids; - if (settings.display_submited) uri += "/A_S"; + if (settings[map_id].display_submited) uri += "/A_S"; var data = {}; - if (settings._cache_boundingbox){ + if (settings[map_id]._cache_boundingbox){ data = { - 'min_lon': settings._cache_boundingbox[0], - 'min_lat': settings._cache_boundingbox[1], - 'max_lon': settings._cache_boundingbox[2], - 'max_lat': settings._cache_boundingbox[3], - 'zoom_level': settings._cache_zoom + 'min_lon': settings[map_id]._cache_boundingbox[0], + 'min_lat': settings[map_id]._cache_boundingbox[1], + 'max_lon': settings[map_id]._cache_boundingbox[2], + 'max_lat': settings[map_id]._cache_boundingbox[3], + 'zoom_level': settings[map_id]._cache_zoom }; } $.ajax({url: uri, @@ -1540,69 +1586,69 @@ function transformCoordToLonLat(coord) { data: data, success: function (data) { //var start = new Date().getTime(); - settings.dbFeatures.clear(); - settings.vectors.clear(); - if (settings.enable_clustering){ - settings.clusterSource.getSource().clear(); + settings[map_id].dbFeatures.clear(); + settings[map_id].vectors.clear(); + if (settings[map_id].enable_clustering){ + settings[map_id].clusterSource.getSource().clear(); } if (!data.features) data.features = []; if (data.zoom_need_reload){ - settings._zoom_need_reload = data.zoom_need_reload; + settings[map_id]._zoom_need_reload = data.zoom_need_reload; } - settings._revision += 1; + settings[map_id]._revision += 1; for (var i = 0; i < data.features.length; i++) { var feature = data.features[i]; if (feature.geometry.type == 'Point'){ - var iconFeature = methods.addMarker(feature); + var iconFeature = methods.addMarker(map_id, feature); } else if (feature.geometry.type == 'Polygon') { - methods.addPolygon(feature); + methods.addPolygon(map_id, feature); } else if (feature.geometry.type == 'MultiPolygon') { - methods.addPolygon(feature); + methods.addPolygon(map_id, feature); } else if (feature.geometry.type == 'LineString') { - methods.addRoute(feature); + methods.addRoute(map_id, feature); } else if (feature.geometry.type == 'MultiLineString') { //OL3 methods.addMultiLine(feature); } } if (typeof post_load_helper != 'undefined') post_load_helper(); - // var extent = settings.sourceDbFeatures.getExtent(); - // settings.map.getView().fit(extent, settings.map.getSize()); - // settings.map.resetLayersZIndex(); + // var extent = settings[map_id].sourceDbFeatures.getExtent(); + // settings[map_id].map.getView().fit(extent, settings[map_id].map.getSize()); + // settings[map_id].map.resetLayersZIndex(); // var end = new Date().getTime(); // var time = end - start; //alert('Execution time: ' + time); }, error: function (data, textStatus, errorThrown) { - settings.dbFeatures.clear(); - settings.vectors.clear(); + settings[map_id].dbFeatures.clear(); + settings[map_id].vectors.clear(); /// OL3-TODO - //settings.layerVectors.removeAllFeatures(); - //if (settings.enable_clustering){ - // settings.layerCluster.removeAllFeatures(); + //settings[map_id].layerVectors.removeAllFeatures(); + //if (settings[map_id].enable_clustering){ + // settings[map_id].layerCluster.removeAllFeatures(); //} }, complete: function () { if($('#waiting').length){$('#waiting').hide();} - methods.update_permalink_activation(); + methods.update_permalink_activation(map_id); } }); }, razMap: function() { methods.hidePopup(); methods.uncheckCategories(); - settings.dbFeatures.clear(); - settings.vectors.clear(); - if (settings.enable_clustering){ - settings.clusterSource.getSource().clear(); + settings[map_id].dbFeatures.clear(); + settings[map_id].vectors.clear(); + if (settings[map_id].enable_clustering){ + settings[map_id].clusterSource.getSource().clear(); } }, /* * Update the categories div in ajax */ - loadCategories: function (helper) { - var current_extent = settings.view.calculateExtent( - settings.map.getSize()); + loadCategories: function (map_id, helper) { + var current_extent = settings[map_id].view.calculateExtent( + settings[map_id].map.getSize()); current_extent = ol.proj.transformExtent( current_extent, EPSG_PROJECTION, @@ -1611,22 +1657,22 @@ function transformCoordToLonLat(coord) { current_extent = current_extent.replace(/\./g, 'D'); current_extent = current_extent.replace(/-/g, 'M'); var uri = extra_url - if (settings.area_id) uri += settings.area_id + "/"; + if (settings[map_id].area_id) uri += settings[map_id].area_id + "/"; uri += "getAvailableCategories/"; var params = {"current_extent": current_extent} - if (settings.display_submited) params["status"] = "A_S"; + if (settings[map_id].display_submited) params["status"] = "A_S"; $.ajax({url: uri, data: params, cache: false, success: function (data) { $('#categories').empty(); $('#categories').html(data); - _init_categories(); - _reCheckCategories(); - if (settings.current_category) { + _init_categories(map_id); + _reCheckCategories(map_id); + if (settings[map_id].current_category) { // TODO : add a force mode // (in case the category is yet visible in HTML...) - methods.toggle_category(); + methods.toggle_category(map_id); } if (helper) helper(); } @@ -1672,15 +1718,15 @@ function transformCoordToLonLat(coord) { }); return master_check; }; - var _init_categories = function () { + var _init_categories = function (map_id) { /* * Add event listener in categories DOM elements */ $('#categories #ul_categories > li > input').bind("click", function (e) { - methods.hidePopup(e); + methods._hidePopup(map_id, e); _toggle_subcategories($(this)); - methods.loadGeoObjects(); + methods.loadGeoObjects(map_id); }); $('.subcategories li input').bind("click", function (e) { $('#search-result').html(''); @@ -1695,13 +1741,13 @@ function transformCoordToLonLat(coord) { } else { par.removeClass('selected'); } - if (!settings.suspend_load) methods.loadGeoObjects(); + if (!settings[map_id].suspend_load) methods.loadGeoObjects(map_id); _toggle_categories($(this)); if ($('#layer_cat_'+c_name).length){ $('#layer_cat_'+c_name).prop("checked", this.checked); } - methods.hidePopup(e); + methods._hidePopup(map_id, e); }); $(".main-category-tick").bind("click", function(event){ event.stopPropagation(); @@ -1709,56 +1755,56 @@ function transformCoordToLonLat(coord) { var main_item = $(this).parent().parent().parent(); if (main_item.hasClass('full')){ main_item.removeClass('full'); - methods.uncheck_category(category_id); + methods.uncheck_category(map_id, category_id); } else { main_item.addClass('full'); - methods.check_category(category_id); + methods.check_category(map_id, category_id); } }); $('#display_submited_check').bind("click", function () { - methods.loadGeoObjects(); + methods.loadGeoObjects(map_id); }); // Zoom to category $(".zoom_to_category").bind("click", function (e) { var id = this.id.substr(this.id.lastIndexOf("_")+1); - helpers.zoom_to_category(id); + helpers.zoom_to_category(map_id, id); }); $(".zoom_to_subcategory").bind("click", function (e) { var id = this.id.substr(this.id.lastIndexOf("_")+1); - helpers.zoom_to_subcategories([id]); + helpers.zoom_to_subcategories(map_id, [id]); }); $(".toggle_category").parent().bind("click", function (e) { var item = $(this).children('.toggle_category'); var id = item.attr('id').substr(item.attr('id').lastIndexOf("_")+1); - methods.toggle_category(id); + methods.toggle_category(map_id, id); }); } - var _reCheckCategories = function (){ + var _reCheckCategories = function (map_id){ /* recheck categories on init or when a redraw occurs */ - if (!settings.checked_categories){ + if (!settings[map_id].checked_categories){ return; } $('#frm_categories .subcategories input:checkbox').each(function(index){ cat_id = $(this).attr('id').split('_').pop(); - if (settings.checked_categories.indexOf(parseInt(cat_id)) != -1) { + if (settings[map_id].checked_categories.indexOf(parseInt(cat_id)) != -1) { $(this).parent().addClass('selected'); $(this).attr("checked", "checked"); _toggle_categories($(this)); - methods.toggle_category(); + methods.toggle_category(map_id); } else { $(this).attr("checked", false); } }); - if (settings.display_submited == true){ + if (settings[map_id].display_submited == true){ $('#display_submited_check').attr("checked", "checked"); } } }, - check_category: function (cat_id) { + check_category: function (map_id, cat_id) { /* * Check all subcategory of a category */ - settings.suspend_load = true; + settings[map_id].suspend_load = true; $('#maincategory_' + cat_id + '.subcategories li input').each( function(){ if(!$(this).is(':checked')){ @@ -1769,14 +1815,14 @@ function transformCoordToLonLat(coord) { } } ); - settings.suspend_load = false; - methods.loadGeoObjects(); + settings[map_id].suspend_load = false; + methods.loadGeoObjects(map_id); }, - uncheck_category: function (cat_id) { + uncheck_category: function (map_id, cat_id) { /* * Uncheck all subcategory of a category */ - settings.suspend_load = true; + settings[map_id].suspend_load = true; $('#maincategory_' + cat_id + '.subcategories li input').each( function(){ if($(this).is(':checked')){ @@ -1786,14 +1832,14 @@ function transformCoordToLonLat(coord) { } } ); - settings.suspend_load = false; - methods.loadGeoObjects(); + settings[map_id].suspend_load = false; + methods.loadGeoObjects(map_id); }, check_subcategories: function (cat_ids) { /* * Check subcategory list */ - settings.suspend_load = true; + settings[map_id].suspend_load = true; for (idx in cat_ids){ $('#category_' + cat_ids[idx]).each( function(){ @@ -1803,8 +1849,8 @@ function transformCoordToLonLat(coord) { } ); } - settings.suspend_load = false; - methods.loadGeoObjects(); + settings[map_id].suspend_load = false; + methods.loadGeoObjects(map_id); }, /* * @@ -1822,57 +1868,72 @@ function transformCoordToLonLat(coord) { * Hide clusterized markers */ cleanCluster: function (){ - if (settings.map.getZoom() === 18) { + if (settings[map_id].map.getZoom() === 18) { // Don't cluster at this level. No matter what. - settings.clustering.threshold = 1000; + settings[map_id].clustering.threshold = 1000; } else { - settings.clustering.threshold = 2; + settings[map_id].clustering.threshold = 2; } - //settings.layerCluster.refresh({force:true}); - settings.clustering.recluster(); + //settings[map_id].layerCluster.refresh({force:true}); + settings[map_id].clustering.recluster(); var hidden_feature_idx = []; - if (settings.map.getZoom() != 18) { - for(var idx=0; idx<settings.layerCluster.features.length; idx++){ - if(settings.layerCluster.features[idx].cluster){ - for(var c=0;c < settings.layerCluster.features[idx].cluster.length; c++) { + if (settings[map_id].map.getZoom() != 18) { + for(var idx=0; idx<settings[map_id].layerCluster.features.length; idx++){ + if(settings[map_id].layerCluster.features[idx].cluster){ + for(var c=0;c < settings[map_id].layerCluster.features[idx].cluster.length; c++) { hidden_feature_idx.push( - settings.layerCluster.features[idx].cluster[c].attributes.pk); + settings[map_id].layerCluster.features[idx].cluster[c].attributes.pk); } } } } - for(j=0; j<settings.layerDbFeatures.markers.length;j++){ - if(hidden_feature_idx.indexOf(settings.layerDbFeatures.markers[j].pk) > -1){ - settings.layerDbFeatures.markers[j].display(false); + for(j=0; j<settings[map_id].layerDbFeatures.markers.length;j++){ + if(hidden_feature_idx.indexOf(settings[map_id].layerDbFeatures.markers[j].pk) > -1){ + settings[map_id].layerDbFeatures.markers[j].display(false); } else { - settings.layerDbFeatures.markers[j].display(true); + settings[map_id].layerDbFeatures.markers[j].display(true); } } }, activateDraw: function (){ - settings.map.addInteraction(settings.draw); - settings.map.addInteraction(settings.modify); - settings.draw_activated = true; - settings.modify_activated = true; + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + settings[map_id].map.addInteraction(settings[map_id].draw); + settings[map_id].map.addInteraction(settings[map_id].modify); + settings[map_id].draw_activated = true; + settings[map_id].modify_activated = true; }, activateModify: function (){ - settings.map.addInteraction(settings.modify); - settings.modify_activated = true; + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + settings[map_id].map.addInteraction(settings[map_id].modify); + settings[map_id].modify_activated = true; }, deactivateDraw: function (){ - if (settings.draw_activated){ - settings.map.removeInteraction(settings.draw); - settings.draw_activated = false; + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + if (settings[map_id].draw_activated){ + settings[map_id].map.removeInteraction(settings[map_id].draw); + settings[map_id].draw_activated = false; } - if (settings.modify_activated){ - settings.map.removeInteraction(settings.modify); - settings.modify_activated = false; + if (settings[map_id].modify_activated){ + settings[map_id].map.removeInteraction(settings[map_id].modify); + settings[map_id].modify_activated = false; } }, - _getIconStyle: function(properties){ - for (var i in settings.iconStyles){ + _getIconStyle: function(map_id, properties){ + for (var i in settings[map_id].iconStyles){ if (i == properties.icon_path){ - return settings.iconStyles[i]; + return settings[map_id].iconStyles[i]; } } if (!iconStyle){ @@ -1889,17 +1950,17 @@ function transformCoordToLonLat(coord) { size: size }) }); - settings.iconStyles[properties.icon_path] = iconStyle; + settings[map_id].iconStyles[properties.icon_path] = iconStyle; return iconStyle; } }, /* * Put a marker on the map */ - addMarker: function (mark) { + addMarker: function (map_id, mark) { /* * Default Feature configuration - * This can be overrided in on_marker_click, using settings.current_feature + * This can be overrided in on_marker_click, using settings[map_id].current_feature */ var lat = mark.geometry.coordinates[1]; var lon = mark.geometry.coordinates[0]; @@ -1914,13 +1975,13 @@ function transformCoordToLonLat(coord) { popup_offset_y: mark.properties.icon_popup_offset_y }); - var iconStyle = methods._getIconStyle(mark.properties, MEDIA_URL); + var iconStyle = methods._getIconStyle(map_id, mark.properties, MEDIA_URL); iconFeature.setStyle(iconStyle); iconFeature.setId(mark.properties.key); - settings.dbFeatures.push(iconFeature); - if (settings.enable_clustering){ - settings.clusterSource.getSource().addFeature(iconFeature); + settings[map_id].dbFeatures.push(iconFeature); + if (settings[map_id].enable_clustering){ + settings[map_id].clusterSource.getSource().addFeature(iconFeature); } return iconFeature; @@ -1933,9 +1994,9 @@ function transformCoordToLonLat(coord) { } feature.pk = mark.properties.pk; - feature.popupClass = settings.popupClass; + feature.popupClass = settings[map_id].popupClass; feature.data.popupContentHTML = "<div class='cloud'>"; - if (!settings.popupContentFull) { + if (!settings[map_id].popupContentFull) { feature.data.popupContentHTML += mark.properties.name; } feature.data.popupContentHTML += "</div>"; @@ -1952,19 +2013,19 @@ function transformCoordToLonLat(coord) { return; } // show the popup - if (settings.current_popup != null) { - settings.current_popup.hide(); + if (settings[map_id].current_popup != null) { + settings[map_id].current_popup.hide(); } if (feature.popup == null) { feature.popup = feature.createPopup(); - settings.map.addPopup(feature.popup); + settings[map_id].map.addPopup(feature.popup); } else { feature.popup.toggle(); } - settings.current_popup = feature.popup; + settings[map_id].current_popup = feature.popup; // hide on click on the cloud - if (!settings.explicit_popup_hide){ - settings.current_popup.groupDiv.onclick = methods.hidePopup; + if (!settings[map_id].explicit_popup_hide){ + settings[map_id].current_popup.groupDiv.onclick = methods.hidePopup; } methods.update_permalink_activation(); } @@ -1975,15 +2036,15 @@ function transformCoordToLonLat(coord) { // lack of better... setTimeout( function(){ - settings.current_popup.panIntoView(); + settings[map_id].current_popup.panIntoView(); }, 1000); } var markerClick = function (evt) { - settings.current_feature = feature; + settings[map_id].current_feature = feature; methods.setCurrentPosition(feature.lonlat); - if ( settings.on_marker_click ) { - settings.on_marker_click(evt, mark, settings); + if ( settings[map_id].on_marker_click ) { + settings[map_id].on_marker_click(evt, mark, settings[map_id]); } else { @@ -1995,13 +2056,13 @@ function transformCoordToLonLat(coord) { } // Default popup if (feature.popup && feature.popup.visible()) { - if (settings.current_popup == feature.popup) { + if (settings[map_id].current_popup == feature.popup) { feature.popup.hide(); - if (!settings.simple){ + if (!settings[map_id].simple){ $('#detail').fadeOut(); } } else { - settings.current_popup.hide(); + settings[map_id].current_popup.hide(); _popup(); methods.display_feature_detail(feature.pk); _repan_popup(); @@ -2016,17 +2077,17 @@ function transformCoordToLonLat(coord) { }; var markerOver = function (evt) { document.body.style.cursor='pointer'; - if (settings.current_feature && settings.current_feature.popup - && settings.current_feature.popup.visible()) return; + if (settings[map_id].current_feature && settings[map_id].current_feature.popup + && settings[map_id].current_feature.popup.visible()) return; var marker = evt.object; if (marker.icon_hover_url){ marker.setUrl(marker.icon_hover_url); } - px = settings.map.getPixelFromLonLat(marker.lonlat); - marker_hover = $('#'+settings.marker_hover_id); - marker_hover_content = $('#'+settings.marker_hover_content_id); + px = settings[map_id].map.getPixelFromLonLat(marker.lonlat); + marker_hover = $('#'+settings[map_id].marker_hover_id); + marker_hover_content = $('#'+settings[map_id].marker_hover_content_id); marker_hover_content.html(marker.category_name); - var map_position = $(settings.map.div).offset(); + var map_position = $(settings[map_id].map.div).offset(); var width = marker_hover.width(); width += parseInt(marker_hover.css("padding-left"), 10) @@ -2037,9 +2098,9 @@ function transformCoordToLonLat(coord) { + parseInt(marker_hover.css("borderRightWidth"), 10); var pos_x = px.x + map_position.left - width/2 + 1; - if (settings.marker_hover_offset) - pos_x += settings.marker_hover_offset.x; - $('#'+settings.marker_hover_id).css('left', pos_x); + if (settings[map_id].marker_hover_offset) + pos_x += settings[map_id].marker_hover_offset.x; + $('#'+settings[map_id].marker_hover_id).css('left', pos_x); var height = marker_hover.height(); height += parseInt(marker_hover.css("padding-top"), 10) + parseInt(marker_hover.css("padding-bottom"), 10) @@ -2049,10 +2110,10 @@ function transformCoordToLonLat(coord) { + parseInt(marker_hover.css("borderTopWidth"), 10); var pos_y = px.y + map_position.top - height - marker.icon.size.h; - if (settings.marker_hover_offset) - pos_y += settings.marker_hover_offset.y; - $('#'+settings.marker_hover_id).css('top', pos_y); - $('#'+settings.marker_hover_id).show(); + if (settings[map_id].marker_hover_offset) + pos_y += settings[map_id].marker_hover_offset.y; + $('#'+settings[map_id].marker_hover_id).css('top', pos_y); + $('#'+settings[map_id].marker_hover_id).show(); OpenLayers.Event.stop(evt); }; var markerOut = function (evt) { @@ -2061,28 +2122,28 @@ function transformCoordToLonLat(coord) { if (marker.icon_hover_url){ marker.setUrl(marker.icon_url); } - $('#'+settings.marker_hover_id).hide(); + $('#'+settings[map_id].marker_hover_id).hide(); OpenLayers.Event.stop(evt); }; marker.events.register('click', feature, markerClick); marker.events.register('touchstart', feature, markerClick); marker.events.register('mouseover', feature, markerOver); marker.events.register('mouseout', feature, markerOut); - settings.layerDbFeatures.addMarker(marker); + settings[map_id].layerDbFeatures.addMarker(marker); // show the item when designed in the permalink - if (settings.display_feature == feature.pk){ - settings.current_feature = feature; + if (settings[map_id].display_feature == feature.pk){ + settings[map_id].current_feature = feature; _popup(feature); methods.display_feature_detail(feature.pk); - if (!settings.display_route){ - settings.map.setCenter(feature.lonlat, 16); + if (!settings[map_id].display_route){ + settings[map_id].map.setCenter(feature.lonlat, 16); _repan_popup(); } - settings.display_feature = null; + settings[map_id].display_feature = null; //methods.loadCategories(); } - if (settings.enable_clustering){ + if (settings[map_id].enable_clustering){ // manage cluster layer var point = new OpenLayers.Geometry.Point(lon, lat).transform( EPSG_DISPLAY_PROJECTION, @@ -2091,7 +2152,7 @@ function transformCoordToLonLat(coord) { feat.attributes = { icon: MEDIA_URL + mark.properties.icon_path, name: mark.properties.name, label:"", pk:mark.properties.pk, marker:marker}; - settings.cluster_array.push(feat); + settings[map_id].cluster_array.push(feat); } return feature; @@ -2111,11 +2172,17 @@ function transformCoordToLonLat(coord) { //fin lib ios cleanRoute: function(){ - if (typeof settings.editionSource != 'undefined') - settings.editionSource.clear(); + if (typeof settings[map_id].editionSource != 'undefined') + settings[map_id].editionSource.clear(); }, // add json layer addJSON: function(json_url, title, projection, style){ + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + if (typeof projection == 'undefined' || !projection) projection = EPSG_DISPLAY_PROJECTION; if (projection.substring(0, 5) != "EPSG:") @@ -2130,10 +2197,10 @@ function transformCoordToLonLat(coord) { style: style }); - var current_layers = settings.map.getLayers(); + var current_layers = settings[map_id].map.getLayers(); index = 0; // insert just after the base layers - $.each(settings.map.getLayers().getArray(), function(i, layer){ + $.each(settings[map_id].map.getLayers().getArray(), function(i, layer){ if (layer.getProperties().type != 'base' && i != 0 && index == 0){ index = i; @@ -2167,7 +2234,7 @@ function transformCoordToLonLat(coord) { }); var jsonStyleMap = new OpenLayers.StyleMap({'default': jsonStyle}); - settings.layerJson = new OpenLayers.Layer.Vector("GeoJSON", { + settings[map_id].layerJson = new OpenLayers.Layer.Vector("GeoJSON", { projection: EPSG_DISPLAY_PROJECTION, strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.HTTP({ @@ -2176,13 +2243,13 @@ function transformCoordToLonLat(coord) { }), styleMap: jsonStyleMap }); - settings.map.addLayer(settings.layerJson); - settings.map.setLayerIndex(settings.layerJson, 0); - settings.layerJson.setOpacity(0.4); + settings[map_id].map.addLayer(settings[map_id].layerJson); + settings[map_id].map.setLayerIndex(settings[map_id].layerJson, 0); + settings[map_id].layerJson.setOpacity(0.4); */ }, // Put a route on the map - addRoute: function(feature) { + addRoute: function(map_id, feature) { var feat = new ol.format.GeoJSON().readFeatures(feature)[0]; feat.setGeometry(transform(feat.getGeometry())); feat.setStyle(new ol.style.Style({ @@ -2190,7 +2257,7 @@ function transformCoordToLonLat(coord) { color: feature.properties.color, width: 2 }) })); - settings.dbFeatures.push(feat); + settings[map_id].dbFeatures.push(feat); return; /* var polyline = route.geometry; @@ -2201,18 +2268,18 @@ function transformCoordToLonLat(coord) { point_array.push(point); } var linestring = new OpenLayers.Geometry.LineString(point_array); - linestring.transform(EPSG_DISPLAY_PROJECTION, settings.map.getProjectionObject()); - settings.current_feature = new OpenLayers.Feature.Vector(); + linestring.transform(EPSG_DISPLAY_PROJECTION, settings[map_id].map.getProjectionObject()); + settings[map_id].current_feature = new OpenLayers.Feature.Vector(); var style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); style.strokeColor = route.properties.color; style.strokeWidth = 3; - settings.current_feature.style = style; - settings.current_feature.geometry = linestring; - settings.layerVectors.addFeatures([settings.current_feature]); - if (settings.display_route && settings.display_route == route.properties.pk){ - var dataExtent = settings.current_feature.geometry.getBounds(); + settings[map_id].current_feature.style = style; + settings[map_id].current_feature.geometry = linestring; + settings[map_id].layerVectors.addFeatures([settings[map_id].current_feature]); + if (settings[map_id].display_route && settings[map_id].display_route == route.properties.pk){ + var dataExtent = settings[map_id].current_feature.geometry.getBounds(); map.zoomToExtent(dataExtent, closest=true); methods.loadCategories(); } @@ -2231,11 +2298,11 @@ function transformCoordToLonLat(coord) { feats[0].style = style; feats[0].geometry = feats[0].geometry.transform( EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.layerVectors.addFeatures(feats); + settings[map_id].map.getProjectionObject()); + settings[map_id].layerVectors.addFeatures(feats); }, // Put a polygon on the map - addPolygon: function(feature) { + addPolygon: function(map_id, feature) { var feat = new ol.format.GeoJSON().readFeatures(feature)[0]; feat.setGeometry(transform(feat.getGeometry())); feat.setStyle(new ol.style.Style({ @@ -2244,7 +2311,7 @@ function transformCoordToLonLat(coord) { color: feature.properties.color, width: 2 }) })); - settings.dbFeatures.push(feat); + settings[map_id].dbFeatures.push(feat); return; /* var gformat = new OpenLayers.Format.GeoJSON(); @@ -2256,8 +2323,8 @@ function transformCoordToLonLat(coord) { feats[0].style = style; feats[0].geometry = feats[0].geometry.transform( EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.layerVectors.addFeatures(feats); + settings[map_id].map.getProjectionObject()); + settings[map_id].layerVectors.addFeatures(feats); */ }, routingInputChange: function(nominatim_id){ @@ -2278,35 +2345,35 @@ function transformCoordToLonLat(coord) { methods.routingAddStep(geom, false); break; } - if (settings.routing_end && settings.routing_start + if (settings[map_id].routing_end && settings[map_id].routing_start && $('#search_routing').length) { $('#search_routing').button('enable'); } }, redrawRoutingIcons: function(){ - settings.routingFeatures.clear(); - settings.routingFeatures.push(settings.routing_start); - settings.routingFeatures.push(settings.routing_end); - for (var k=0;k<settings.routing_steps.length;k++){ - settings.routingFeatures.push(settings.routing_steps[k]); + settings[map_id].routingFeatures.clear(); + settings[map_id].routingFeatures.push(settings[map_id].routing_start); + settings[map_id].routingFeatures.push(settings[map_id].routing_end); + for (var k=0;k<settings[map_id].routing_steps.length;k++){ + settings[map_id].routingFeatures.push(settings[map_id].routing_steps[k]); } }, // set the start point for routing routingFrom: function(obj, auto){ $('#chimere_map_menu').hide(); - if (!settings.mobile){ - settings.routing_panel_open(); + if (!settings[map_id].mobile){ + settings[map_id].routing_panel_open(); $('.map_menu_clear').show(); } - if (settings.routing_start){ - settings.sourceRoutingFeatures.removeFeature(settings.routing_start); + if (settings[map_id].routing_start){ + settings[map_id].sourceRoutingFeatures.removeFeature(settings[map_id].routing_start); } var coordinates; if (typeof obj == 'undefined') { - coordinates = settings.popup.getPosition(); + coordinates = settings[map_id].popup.getPosition(); } else { if (typeof obj.coordinate != 'undefined') { coordinates = obj.coordinate; @@ -2316,11 +2383,11 @@ function transformCoordToLonLat(coord) { } if (typeof coordinates == 'undefined') return; - settings.routing_start = new ol.Feature({ + settings[map_id].routing_start = new ol.Feature({ geometry: new ol.geom.Point(coordinates) }); - if (!settings.icon_start_style){ - settings.icon_start_style = new ol.style.Style({ + if (!settings[map_id].icon_start_style){ + settings[map_id].icon_start_style = new ol.style.Style({ image: new ol.style.Icon({ anchor: [18, 36], anchorXUnits: 'pixels', @@ -2330,15 +2397,15 @@ function transformCoordToLonLat(coord) { }) }); } - settings.routing_start.setStyle(settings.icon_start_style); - settings.routingFeatures.push(settings.routing_start); + settings[map_id].routing_start.setStyle(settings[map_id].icon_start_style); + settings[map_id].routingFeatures.push(settings[map_id].routing_start); if (nominatim_url){ helpers.updateNominatimName( transformCoordToLonLat(coordinates), 'start_label'); } - if (settings.routing_end && auto) methods.route(); + if (settings[map_id].routing_end && auto) methods.route(); // Added for mobile - START // //iOS methods.connectWebViewJavascriptBridge( @@ -2360,18 +2427,18 @@ function transformCoordToLonLat(coord) { // set the start point for current Position routingFromMyPosition: function(options){ $('#chimere_map_menu').hide(); - settings.current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); - settings.current_position = settings.current_position.transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.routing_start = new OpenLayers.Marker( - settings.current_position.clone(), - settings.icon_start); - settings.layerRouteMarker.addMarker(settings.routing_start); + settings[map_id].current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); + settings[map_id].current_position = settings[map_id].current_position.transform(EPSG_DISPLAY_PROJECTION, + settings[map_id].map.getProjectionObject()); + settings[map_id].routing_start = new OpenLayers.Marker( + settings[map_id].current_position.clone(), + settings[map_id].icon_start); + settings[map_id].layerRouteMarker.addMarker(settings[map_id].routing_start); if (nominatim_url){ helpers.updateNominatimName( transform(obj).coordinate,'start_label'); } - if (settings.routing_end) methods.route(); + if (settings[map_id].routing_end) methods.route(); // Added for mobile - START // //iOS @@ -2393,31 +2460,31 @@ function transformCoordToLonLat(coord) { updateMyCurrentPosition: function(options){ - if (settings.current_position_marker) { - settings.layerMarkers.removeMarker(settings.current_position_marker) + if (settings[map_id].current_position_marker) { + settings[map_id].layerMarkers.removeMarker(settings[map_id].current_position_marker) } var tmp_position = new OpenLayers.LonLat(options["lon"], options["lat"]); tmp_position = tmp_position.transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.current_position_marker = new OpenLayers.Marker( + settings[map_id].map.getProjectionObject()); + settings[map_id].current_position_marker = new OpenLayers.Marker( tmp_position.clone(), - settings.icon_current_position); - settings.layerRouteMarker.addMarker(settings.current_position_marker); + settings[map_id].icon_current_position); + settings[map_id].layerRouteMarker.addMarker(settings[map_id].current_position_marker); }, // Added for mobile - END // // add a step point for routing routingAddStep: function(obj, auto){ - if (!settings.mobile){ - settings.routing_panel_open(); + if (!settings[map_id].mobile){ + settings[map_id].routing_panel_open(); $('.map_menu_clear').show(); } var coordinates; if (typeof obj == 'undefined') { - coordinates = settings.popup.getPosition(); + coordinates = settings[map_id].popup.getPosition(); } else { if (typeof obj.coordinate != 'undefined') { coordinates = obj.coordinate; @@ -2430,8 +2497,8 @@ function transformCoordToLonLat(coord) { var feat = new ol.Feature({ geometry: new ol.geom.Point(coordinates) }); - if (!settings.icon_step_style){ - settings.icon_step_style = new ol.style.Style({ + if (!settings[map_id].icon_step_style){ + settings[map_id].icon_step_style = new ol.style.Style({ image: new ol.style.Icon({ anchor: [18, 36], anchorXUnits: 'pixels', @@ -2441,9 +2508,9 @@ function transformCoordToLonLat(coord) { }) }); } - feat.setStyle(settings.icon_step_style); - settings.routing_steps.push(feat); - settings.routingFeatures.push(feat); + feat.setStyle(settings[map_id].icon_step_style); + settings[map_id].routing_steps.push(feat); + settings[map_id].routingFeatures.push(feat); if (nominatim_url){ var current_itinerary_number = methods.add_step_fx(); @@ -2451,21 +2518,21 @@ function transformCoordToLonLat(coord) { transformCoordToLonLat(coordinates), 'step_'+current_itinerary_number+'_label'); } - if (settings.routing_end && settings.routing_start && auto) methods.route(); + if (settings[map_id].routing_end && settings[map_id].routing_start && auto) methods.route(); }, // change routing speed routingChangeSpeed: function(speed){ - settings.routing_speed = speed; + settings[map_id].routing_speed = speed; }, // change routing transport routingChangeTransport: function(transport){ - settings.routing_transport = transport; + settings[map_id].routing_transport = transport; }, // add a step on the interface add_step_fx: function (){ - settings.itinerary_step_number += 1; + settings[map_id].itinerary_step_number += 1; var cloned = $("#id_start_div").clone(); - var c_id = 'step_' + settings.itinerary_step_number; + var c_id = 'step_' + settings[map_id].itinerary_step_number; cloned.attr('id', 'id_'+c_id+'_div'); cloned.children('label').html(step_label).addClass('step_label'); cloned.children("#nominatim_start_label").attr('id', c_id+'_label' @@ -2479,10 +2546,10 @@ function transformCoordToLonLat(coord) { cloned.children("#nominatim_start"+suffix).attr('id', val ).attr('name', val); } - if (settings.itinerary_step_number == 1){ + if (settings[map_id].itinerary_step_number == 1){ $("#nominatim_end_label").after(cloned); } else { - $("#step_"+(settings.itinerary_step_number-1)+"_label" + $("#step_"+(settings[map_id].itinerary_step_number-1)+"_label" ).after(cloned); } $('#' + c_id).val(default_nominatim_lbl); @@ -2490,23 +2557,23 @@ function transformCoordToLonLat(coord) { $('#'+c_id).val(''); }); $(".nominatim-widget").autocomplete(nominatim_widget_options); - return settings.itinerary_step_number; + return settings[map_id].itinerary_step_number; }, // set the finish point for routing routingTo: function(obj, auto){ - if (!settings.mobile){ - settings.routing_panel_open(); + if (!settings[map_id].mobile){ + settings[map_id].routing_panel_open(); $('.map_menu_clear').show(); } - if (settings.routing_end){ - settings.sourceRoutingFeatures.removeFeature(settings.routing_end); + if (settings[map_id].routing_end){ + settings[map_id].sourceRoutingFeatures.removeFeature(settings[map_id].routing_end); } var coordinates; if (typeof obj == 'undefined') { - coordinates = settings.popup.getPosition(); + coordinates = settings[map_id].popup.getPosition(); } else { if (typeof obj.coordinate != 'undefined') { coordinates = obj.coordinate; @@ -2516,11 +2583,11 @@ function transformCoordToLonLat(coord) { } if (typeof coordinates == 'undefined') return; - settings.routing_end = new ol.Feature({ + settings[map_id].routing_end = new ol.Feature({ geometry: new ol.geom.Point(coordinates) }); - if (!settings.icon_end_style){ - settings.icon_end_style = new ol.style.Style({ + if (!settings[map_id].icon_end_style){ + settings[map_id].icon_end_style = new ol.style.Style({ image: new ol.style.Icon({ anchor: [18, 36], anchorXUnits: 'pixels', @@ -2530,8 +2597,8 @@ function transformCoordToLonLat(coord) { }) }); } - settings.routing_end.setStyle(settings.icon_end_style); - settings.routingFeatures.push(settings.routing_end); + settings[map_id].routing_end.setStyle(settings[map_id].icon_end_style); + settings[map_id].routingFeatures.push(settings[map_id].routing_end); if (nominatim_url){ helpers.updateNominatimName( @@ -2539,7 +2606,7 @@ function transformCoordToLonLat(coord) { 'end_label'); } - if (settings.routing_start && auto) methods.route(); + if (settings[map_id].routing_start && auto) methods.route(); // Added for mobile - START // // iOS @@ -2564,24 +2631,24 @@ function transformCoordToLonLat(coord) { // set the finish point for current Position routingToPosition: function(options){ $('#chimere_map_menu').hide(); - if (!settings.mobile){ - settings.routing_panel_open(); + if (!settings[map_id].mobile){ + settings[map_id].routing_panel_open(); $('#map_menu_clear').show(); } - settings.current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); - settings.current_position = settings.current_position.transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()); - settings.routing_end = new OpenLayers.Marker( - settings.current_position.clone(), - settings.icon_end); - settings.layerRouteMarker.addMarker(settings.routing_end); + settings[map_id].current_position = new OpenLayers.LonLat(options["lon"], options["lat"]); + settings[map_id].current_position = settings[map_id].current_position.transform(EPSG_DISPLAY_PROJECTION, + settings[map_id].map.getProjectionObject()); + settings[map_id].routing_end = new OpenLayers.Marker( + settings[map_id].current_position.clone(), + settings[map_id].icon_end); + settings[map_id].layerRouteMarker.addMarker(settings[map_id].routing_end); if (nominatim_url){ - helpers.updateNominatimName(settings.current_position.clone() - .transform(settings.map.getProjectionObject(), + helpers.updateNominatimName(settings[map_id].current_position.clone() + .transform(settings[map_id].map.getProjectionObject(), EPSG_DISPLAY_PROJECTION), 'end_label'); } - if (settings.routing_start) methods.route(); + if (settings[map_id].routing_start) methods.route(); // Added for mobile - START // //iOS methods.connectWebViewJavascriptBridge( @@ -2616,39 +2683,39 @@ function transformCoordToLonLat(coord) { $('#chimere_itinerary_form').show(); $('div[id^="id_step_"]').remove(); if($('#search_routing').length) $('#search_routing').button('disable'); - settings.routing_start = null; - settings.routing_end = null; - settings.routing_steps = new Array(); - settings.current_itinerary_number = 0; - settings.current_routes_features = []; - settings.routingFeatures.clear(); + settings[map_id].routing_start = null; + settings[map_id].routing_end = null; + settings[map_id].routing_steps = new Array(); + settings[map_id].current_itinerary_number = 0; + settings[map_id].current_routes_features = []; + settings[map_id].routingFeatures.clear(); }, // display a route route: function(){ if($('#search_routing').length) $('#search_routing').button('enable'); - if (!settings.routing_start || !settings.routing_end){ + if (!settings[map_id].routing_start || !settings[map_id].routing_end){ return; } var steps = [ transformCoordToLonLat( - settings.routing_start.getGeometry().getCoordinates())]; - for (var i = 0; i < settings.routing_steps.length; i++) { + settings[map_id].routing_start.getGeometry().getCoordinates())]; + for (var i = 0; i < settings[map_id].routing_steps.length; i++) { steps.push( transformCoordToLonLat( - settings.routing_steps[i].getGeometry().getCoordinates() + settings[map_id].routing_steps[i].getGeometry().getCoordinates() ) ); } steps.push( transformCoordToLonLat( - settings.routing_end.getGeometry().getCoordinates())); + settings[map_id].routing_end.getGeometry().getCoordinates())); // create the appropriate URL var uri = extra_url + "route/" - if(settings.routing_transport){ - uri += settings.routing_transport + "/" + if(settings[map_id].routing_transport){ + uri += settings[map_id].routing_transport + "/" } - if(settings.routing_speed){ - uri += settings.routing_speed + "/" + if(settings[map_id].routing_speed){ + uri += settings[map_id].routing_speed + "/" } for (var i = 0; i < steps.length; i++) { var step = steps[i]; @@ -2666,11 +2733,11 @@ function transformCoordToLonLat(coord) { methods.displayMessage(routing_fail_message); return; } - settings.current_routes_features = []; + settings[map_id].current_routes_features = []; for (var i = 0; i < data.features.length; i++) { var feat = data.features[i]; if(feat.geometry.type == 'LineString'){ - settings.current_routes_features.push( + settings[map_id].current_routes_features.push( methods.putRouting(feat)); } else { var point = new ol.geom.Point([ @@ -2696,18 +2763,18 @@ function transformCoordToLonLat(coord) { }) ); - settings.routingFeatures.push(feature); + settings[map_id].routingFeatures.push(feature); } } if (data.message) methods.displayMessage(data.message); - var v = settings.map.getView(); + var v = settings[map_id].map.getView(); methods._set_animation(); options = {}; if ($("#panel").is(":visible")){ options = {"padding": [0, 0, 0, $("#panel").width()]}; } - v.fit(settings.sourceRoutingFeatures.getExtent(), - settings.map.getSize(), options); + v.fit(settings[map_id].sourceRoutingFeatures.getExtent(), + settings[map_id].map.getSize(), options); $('#id_transport_it').find('span' ).removeClass('selected'); $('#id_transport_it_'+data.properties.transport @@ -2719,13 +2786,13 @@ function transformCoordToLonLat(coord) { $('#chimere_itinerary').show(); /* TODO - if(settings.edition_type_is_route){ + if(settings[map_id].edition_type_is_route){ methods.updateRoutingInput(); } else { */ - if (!settings.mobile){ + if (!settings[map_id].mobile){ $('#chimere_itinerary_form').hide(); - settings.routing_panel_open(); + settings[map_id].routing_panel_open(); } // } // Added for mobile - START // @@ -2778,7 +2845,7 @@ function transformCoordToLonLat(coord) { lineDash: [.9, 10] })}) ]); - settings.routingFeatures.push(feat); + settings[map_id].routingFeatures.push(feat); return feat; /* @@ -2789,47 +2856,47 @@ function transformCoordToLonLat(coord) { point_array.push(point); } var linestring = new OpenLayers.Geometry.LineString(point_array); - linestring.transform(EPSG_DISPLAY_PROJECTION, settings.map.getProjectionObject()); + linestring.transform(EPSG_DISPLAY_PROJECTION, settings[map_id].map.getProjectionObject()); current_route = new OpenLayers.Feature.Vector(); var style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); style.strokeWidth = 3; current_route.style = style; current_route.geometry = linestring; - settings.layerRoute.addFeatures([current_route]); + settings[map_id].layerRoute.addFeatures([current_route]); */ }, - display_feature_detail: function (key, name) { + display_feature_detail: function (map_id, key, name) { /* * update current detail panel with an AJAX request */ if (key == undefined){ - if (!settings.popupContentFull) { + if (!settings[map_id].popupContentFull) { $('#detail').fadeOut(); } else { - methods.hidePopup(); + methods._hidePopup(map_id); } return; } var uri = extra_url - if (settings.area_id) uri += settings.area_id + "/" + if (settings[map_id].area_id) uri += settings[map_id].area_id + "/" uri += "getDetail/"; - if (settings.popupContentFull){ + if (settings[map_id].popupContentFull){ // only display when fully loaded $(".popover").addClass('transparent'); uri += "popup/"; } uri += key; var params = {} - if (settings.simple) { params["simple"] = 1; } + if (settings[map_id].simple) { params["simple"] = 1; } $.ajax({url: uri, data: params, dataType: "html", success: function (data) { - if (!settings.popupContentFull) { + if (!settings[map_id].popupContentFull) { $('#detail').html(data).fadeIn(); - if (settings.display_feature_detail_callback){ - settings.display_feature_detail_callback(settings); + if (settings[map_id].display_feature_detail_callback){ + settings[map_id].display_feature_detail_callback(settings[map_id]); } } else { @@ -2842,40 +2909,40 @@ function transformCoordToLonLat(coord) { $(".popover-title").show(); $(".popover-content").html(data); - if (settings.display_feature_detail_callback){ - settings.display_feature_detail_callback(settings); + if (settings[map_id].display_feature_detail_callback){ + settings[map_id].display_feature_detail_callback(settings[map_id]); } - var offset = settings.popup.getOffset(); + var offset = settings[map_id].popup.getOffset(); offset[0] = offset[0] - $('.popover').width()/2 + w/2; offset[1] = offset[1] - $('.popover').height() + h; - settings.popup.setOffset(offset); - settings.popup.dispatchEvent('change:offset'); + settings[map_id].popup.setOffset(offset); + settings[map_id].popup.dispatchEvent('change:offset'); // pan toward the popup + margin to display pop height - var center_position = settings.popup.getPosition(); + var center_position = settings[map_id].popup.getPosition(); var doc_height = $(document).height(); if (doc_height / 2 < - offset[1]*2){ - var pixel = settings.map.getPixelFromCoordinate(center_position); + var pixel = settings[map_id].map.getPixelFromCoordinate(center_position); pixel[1] += offset[1] + doc_height / 4; - center_position = settings.map.getCoordinateFromPixel(pixel); + center_position = settings[map_id].map.getCoordinateFromPixel(pixel); } - methods._set_animation(); + methods._set_animation(map_id); if ($("#panel").is(":visible")){ var delta_x = $("#panel").width() / 2; - settings.view.centerOn( + settings[map_id].view.centerOn( center_position, [0, 0], [delta_x, 0]); } else { - settings.view.setCenter(center_position); + settings[map_id].view.setCenter(center_position); } // waiting for the pan to finish setTimeout(function(){ // to trigger autopan - settings.popup.dispatchEvent('change:position'); + settings[map_id].popup.dispatchEvent('change:position'); $(".popover").removeClass('transparent'); - methods._register_popuphovering(); - }, settings.animation_duration + 10 + methods._register_popuphovering(map_id); + }, settings[map_id].animation_duration + 10 ); } } @@ -2891,24 +2958,31 @@ function transformCoordToLonLat(coord) { $('#modal-chimere-message').modal("show"); }, center_on_feature: function(feature) { - var f = get_or_set(feature, settings.current_feature); + var f = get_or_set(feature, settings[map_id].current_feature); if (f) { - settings.map.setCenter(f.lonlat); + settings[map_id].map.setCenter(f.lonlat); } }, zoom: function (options) { + + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + if ($.hasattr("category", options)) { - helpers.zoom_to_category(options["category"]); + helpers.zoom_to_category(map_id, options["category"]); } else if ($.hasattr("subcategories", options)) { - helpers.zoom_to_subcategories(options["subcategories"]); + helpers.zoom_to_subcategories(map_id, options["subcategories"]); } else if ($.hasattr("area", options)) { - helpers.zoom_to_area(options["area"]); + helpers.zoom_to_area(map_id, options["area"]); } }, open_dialog: function(title, content){ - if(settings.open_dialog_fx){ - settings.open_dialog_fx(title, content); + if(settings[map_id].open_dialog_fx){ + settings[map_id].open_dialog_fx(title, content); } else { $('#category_description .modal-body').html(message); $('#category_description .modal-title').html(title); @@ -2942,14 +3016,14 @@ function transformCoordToLonLat(coord) { } }); }, - toggle_category: function (id) { + toggle_category: function (map_id, id) { // TODO make this id DOM element customisable // Check if element is currently visible or not var was_visible = $("#maincategory_" + id).is(":visible"); // Close all categories var category_plus = STATIC_URL + "chimere/img/plus.png"; var category_minus = STATIC_URL + "chimere/img/minus.png"; - if (settings.category_accordion){ + if (settings[map_id].category_accordion){ $("#categories ul.subcategories").hide(); $("#categories img.toggle_category").attr("src", category_plus); $("#categories .main_category").addClass("toggle_plus"); @@ -2964,9 +3038,9 @@ function transformCoordToLonLat(coord) { $("#maincategory_" + id).parent().removeClass("toggle_plus"); // Put a plus image $("#maincategory_img_" + id).attr("src", category_minus); - settings.current_category = id; + settings[map_id].current_category = id; } - if (!settings.category_accordion && was_visible) + if (!settings[map_id].category_accordion && was_visible) { $("#maincategory_" + id).toggle(); $("#maincategory_" + id).parent().addClass("toggle_plus"); @@ -2995,29 +3069,34 @@ function transformCoordToLonLat(coord) { return; } extent.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); - settings.map.zoomToExtent(extent, true); + settings[map_id].map.zoomToExtent(extent, true); return true; */ }, zoomToMarkerExtent: function(){ - methods._set_animation(); + methods._set_animation(map_id); options = {}; if ($("#panel").is(":visible")){ options = {"padding": [0, 0, 0, $("#panel").width()]}; } - settings.map.getView().fit( - settings.sourceDbFeatures.getExtent(), - settings.map.getSize(), options); + settings[map_id].map.getView().fit( + settings[map_id].sourceDbFeatures.getExtent(), + settings[map_id].map.getSize(), options); }, // methods for edition cleanMarker: function(){ - if (settings.current_edit_feature) { - settings.layerDbFeatures.removeMarker(settings.current_edit_feature); + if (settings[map_id].current_edit_feature) { + settings[map_id].layerDbFeatures.removeMarker(settings[map_id].current_edit_feature); } }, /* put the marker on the map and update latitude and longitude fields */ putEditMarker: function (latlon, zoom){ - if (settings.features.getLength()) settings.features.pop(); + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + if (settings[map_id].features.getLength()) settings[map_id].features.pop(); // console.log(latlon); var point = new ol.geom.Point(latlon); point.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); @@ -3025,37 +3104,37 @@ function transformCoordToLonLat(coord) { geometry: point }); - settings.features.push(feature); - methods.updateGenInput(); + settings[map_id].features.push(feature); + methods.updateGenInput(map_id); /* zoom to the point */ if (zoom){ - var view = settings.map.getView(); - view.fit(settings.editionSource.getExtent(), settings.map.getSize()); + var view = settings[map_id].map.getView(); + view.fit(settings[map_id].editionSource.getExtent(), settings[map_id].map.getSize()); view.setZoom(view.getZoom() - 11); } return; }, - updateInput: function(){ - if (settings.edition_type == 'route'){ + updateInput: function(map_id){ + if (settings[map_id].edition_type == 'route'){ // methods.updateRoutingInput(); - methods.updateGenInput('route'); + methods.updateGenInput(map_id, 'route'); } - if (settings.edition_type == 'polygon'){ - methods.updateGenInput('polygon'); + if (settings[map_id].edition_type == 'polygon'){ + methods.updateGenInput(map_id, 'polygon'); } - if (settings.edition_type == 'marker'){ - methods.updateGenInput('marker'); + if (settings[map_id].edition_type == 'marker'){ + methods.updateGenInput(map_id, 'marker'); }; }, updateMarkerInput: function(){ // ol3 TODO - if (!settings.current_edit_feature) { + if (!settings[map_id].current_edit_feature) { return; } - lonlat = settings.current_edit_feature.lonlat.clone().transform( - settings.map.getProjectionObject(), + lonlat = settings[map_id].current_edit_feature.lonlat.clone().transform( + settings[map_id].map.getProjectionObject(), EPSG_DISPLAY_PROJECTION); - $('#'+settings.input_id).val( + $('#'+settings[map_id].input_id).val( 'POINT(' + lonlat.lon + ' ' + lonlat.lat + ')'); if($('#live_latitude').length){ $('#live_latitude').val(lonlat.lat); @@ -3065,26 +3144,26 @@ function transformCoordToLonLat(coord) { }, updateRoutingInput: function(){ - if (!settings.current_routes_features) { + if (!settings[map_id].current_routes_features) { return; } var wkt = new ol.format.WKT(); var point_array = []; // not very effective... - for (idx in settings.current_routes_features){ - var coords = settings.current_routes_features[idx].getGeometry().getCoordinates(); + for (idx in settings[map_id].current_routes_features){ + var coords = settings[map_id].current_routes_features[idx].getGeometry().getCoordinates(); for (j in coords){ point_array.push(transformCoordToLonLat(coords[j])); } } jQuery('#id_route').val(String(point_array)); }, - updateGenInput: function(){ - var features = settings.editionSource.getFeatures(); + updateGenInput: function(map_id){ + var features = settings[map_id].editionSource.getFeatures(); var input_id = '#'; - if (settings.edition_type == 'marker') input_id += settings.input_id; - if (settings.edition_type == 'polygon') input_id += 'id_polygon'; - if (settings.edition_type == 'route') input_id += 'id_route'; + if (settings[map_id].edition_type == 'marker') input_id += settings[map_id].input_id; + if (settings[map_id].edition_type == 'polygon') input_id += 'id_polygon'; + if (settings[map_id].edition_type == 'route') input_id += 'id_route'; if (!features.length) { jQuery(input_id).val(''); @@ -3096,7 +3175,7 @@ function transformCoordToLonLat(coord) { dataProjection: EPSG_DISPLAY_PROJECTION, featureProjection: EPSG_PROJECTION}); jQuery(input_id).val(String(wkt)); - if(settings.edition_type == 'marker' && $('#live_latitude').length){ + if(settings[map_id].edition_type == 'marker' && $('#live_latitude').length){ coords = features[0].getGeometry().clone().transform( EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION).getCoordinates(); $('#live_latitude').val(coords[1]); @@ -3104,24 +3183,24 @@ function transformCoordToLonLat(coord) { } }, activateCurrentControl: function(){ - if (settings.current_control){ - settings.current_control.activate(); + if (settings[map_id].current_control){ + settings[map_id].current_control.activate(); } else { - var pathCreate = settings.map.getControlsByClass( + var pathCreate = settings[map_id].map.getControlsByClass( 'OpenLayers.Control.DrawFeature'); if (pathCreate){ pathCreate[0].activate(); } } - var pathModify = settings.map.getControlsByClass( + var pathModify = settings[map_id].map.getControlsByClass( 'OpenLayers.Control.ModifyFeature'); - if (settings.current_feature && pathModify){ - pathModify[0].selectFeature(settings.current_feature); + if (settings[map_id].current_feature && pathModify){ + pathModify[0].selectFeature(settings[map_id].current_feature); } }, deactivateCurrentControl: function(){ - if (settings.current_control){ - settings.current_control.deactivate(); + if (settings[map_id].current_control){ + settings[map_id].current_control.deactivate(); } }, initFeature: function(wkt_geometry){ @@ -3134,14 +3213,14 @@ function transformCoordToLonLat(coord) { feature = WKT.readFeature(wkt_geometry, { dataProjection: EPSG_DISPLAY_PROJECTION, featureProjection: EPSG_PROJECTION}); - if (settings.draw_activated){ - settings.map.removeInteraction(settings.draw); - settings.draw_activated = false; + if (settings[map_id].draw_activated){ + settings[map_id].map.removeInteraction(settings[map_id].draw); + settings[map_id].draw_activated = false; } - settings.map.getView().fit(feature.getGeometry(), - settings.map.getSize()); - settings.editionSource.addFeature(feature); - methods.updateInput(); + settings[map_id].map.getView().fit(feature.getGeometry(), + settings[map_id].map.getSize()); + settings[map_id].editionSource.addFeature(feature); + methods.updateInput(map_id); }, initFeatureFromWkt: function(wkt_geometry){ var linestring = OpenLayers.Geometry.fromWKT(wkt_geometry); @@ -3152,25 +3231,25 @@ function transformCoordToLonLat(coord) { EPSG_PROJECTION); currentFeature = new OpenLayers.Feature.Vector(); currentFeature.geometry = linestring; - settings.layerVectors.removeFeatures(); - settings.layerVectors.addFeatures([currentFeature]); - var pathModify = settings.map.getControlsByClass( + settings[map_id].layerVectors.removeFeatures(); + settings[map_id].layerVectors.addFeatures([currentFeature]); + var pathModify = settings[map_id].map.getControlsByClass( 'OpenLayers.Control.ModifyFeature'); if (pathModify){ - settings.current_control = pathModify[0]; + settings[map_id].current_control = pathModify[0]; } /*zoom to the route*/ - var bounds = settings.layerVectors.getDataExtent(); - if (bounds) settings.map.zoomToExtent(bounds); + var bounds = settings[map_id].layerVectors.getDataExtent(); + if (bounds) settings[map_id].map.zoomToExtent(bounds); }, showPopup: function (feature_pk) { - var feats = settings.dbFeatures.getArray(); + var feats = settings[map_id].dbFeatures.getArray(); for (j in feats){ var c_marker = feats[j]; if (c_marker.getProperties()['key'] == feature_pk){ //for (j in c_marker) console.log(j + ": "+ c_marker[j]); //c_marker.events.triggerEvent('click'); - methods.openPopup(c_marker); + methods.openPopup(map_id, c_marker); return true } } @@ -3182,34 +3261,48 @@ function transformCoordToLonLat(coord) { //feature.markerClick(); //OpenLayers.Popup.popupSelect.clickFeature(feature); /* - settings.current_popup = feature.marker._popup(); - if (!settings.current_popup.visible()){ - settings.current_popup.show(); + settings[map_id].current_popup = feature.marker._popup(); + if (!settings[map_id].current_popup.visible()){ + settings[map_id].current_popup.show(); methods.display_feature_detail(feature.pk); }*/ }, - hidePopup: function (evt) { - $(settings.popup_item).popover('destroy'); - methods.update_permalink_activation(); + hidePopup: function () { + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + methods._hidePopup(map_id); + return false; + }, + _hidePopup: function (map_id, evt) { + $(settings[map_id].popup_item).popover('destroy'); + methods.update_permalink_activation(map_id); return false; }, saveExtent: function(){ var extent_key = 'MAP_EXTENT'; //if (area_name){ extent_key = extent_key + '_' + area_name; } - if (!settings.map) return; - var extent = settings.map.getExtent().transform(EPSG_PROJECTION, + if (!settings[map_id].map) return; + var extent = settings[map_id].map.getExtent().transform(EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); document.cookie = extent_key + '=' + extent.toArray().join('_') + ';path=/'; }, refresh: function(){ - settings.map.updateSize(); + var map_id = methods.map_id(this); + if (!map_id){ + alert("Public method only"); + return; + } + settings[map_id].map.updateSize(); } }; // End of public methods var helpers = { getSubcategories: function (category_id) { - if(settings.get_subcategories_fx) { - return settings.get_subcategories_fx(category_id, settings); + if(settings[map_id].get_subcategories_fx) { + return settings[map_id].get_subcategories_fx(category_id, settings[map_id]); } else { var ul = document.getElementById('maincategory_'+category_id); @@ -3223,36 +3316,36 @@ function transformCoordToLonLat(coord) { return subcats; } }, - retrieve_checked_categories: function () { + retrieve_checked_categories: function (map_id) { /* - * Retrieve checked_categories, and store it in settings + * Retrieve checked_categories, and store it in settings[map_id] */ var initialized = false; $('#frm_categories .subcategories input:checkbox').each( function(index){ if (!initialized){ initialized = true; - settings.checked_categories = []; - settings.display_submited = false; + settings[map_id].checked_categories = []; + settings[map_id].display_submited = false; } if ($(this).prop('checked') == 'checked' || $(this).prop('checked') == true){ cat_id = $(this).attr('id').split('_').pop(); - settings.checked_categories.push(parseInt(cat_id)); + settings[map_id].checked_categories.push(parseInt(cat_id)); } }); if(initialized && ($('#display_submited_check').attr("checked") == "checked" || $('#display_submited_check').attr("checked") == true)){ - settings.display_submited = true; + settings[map_id].display_submited = true; } }, zoom_to: function (bounds) { - settings.map.zoomToExtent(bounds) + settings[map_id].map.zoomToExtent(bounds) }, - zoom_to_subcategories: function (ids) { + zoom_to_subcategories: function (map_id, ids) { // TODO add markers and check the subcategory, if not yet checked/displayed var ids = ids.join('_'); if (!ids) ids = '0'; var uri = extra_url + "getGeoObjects/" + ids; - if (settings.display_submited) uri += "/A_S"; + if (settings[map_id].display_submited) uri += "/A_S"; $.ajax({url: uri, dataType: "json", success: function (data) { @@ -3273,24 +3366,24 @@ function transformCoordToLonLat(coord) { } }); }, - zoom_to_category: function (id) { - helpers.zoom_to_subcategories(helpers.getSubcategories(id)); + zoom_to_category: function (map_id, id) { + helpers.zoom_to_subcategories(map_id, helpers.getSubcategories(id)); }, - zoom_to_area: function (coords) { + zoom_to_area: function (map_id, coords) { /* zoom to an area */ var left = Math.round(coords[0] * 1000) / 1000; var bottom = Math.round(coords[1] * 1000) / 1000; var right = Math.round(coords[2] * 1000) / 1000; var top = Math.round(coords[3] * 1000) / 1000; - settings.view.fit(transformExtent([left, top, right, bottom]), - settings.map.getSize()); - if (settings.dynamic_categories) { - methods.loadCategories(); + settings[map_id].view.fit(transformExtent([left, top, right, bottom]), + settings[map_id].map.getSize()); + if (settings[map_id].dynamic_categories) { + methods.loadCategories(map_id); } }, zoom_to_latlon: function (){ var lonlat = new OpenLayers.LonLat(lon, lat); - settings.map.setCenter(f.lonlat); + settings[map_id].map.setCenter(f.lonlat); }, getSavedExtent: function() { /* get the current extent from a cookie */ @@ -3309,12 +3402,12 @@ function transformCoordToLonLat(coord) { }, featureRouteCreated: function(event) { /* toggle to edition mode */ - var pathModify = settings.map.getControlsByClass( + var pathModify = settings[map_id].map.getControlsByClass( 'OpenLayers.Control.ModifyFeature')[0]; - var pathCreate = settings.map.getControlsByClass( + var pathCreate = settings[map_id].map.getControlsByClass( 'OpenLayers.Control.DrawFeature')[0]; pathCreate.deactivate(); - settings.current_control = pathModify; + settings[map_id].current_control = pathModify; jQuery('#help-route-create').hide(); jQuery('#help-route-modify').show(); pathModify.activate(); @@ -3324,14 +3417,14 @@ function transformCoordToLonLat(coord) { updateRouteForm: function(event) { /* update the form */ if (event){ - settings.current_feature = event.feature; + settings[map_id].current_feature = event.feature; } - var current_geo = settings.current_feature.geometry.clone(); + var current_geo = settings[map_id].current_feature.geometry.clone(); current_geo.transform(EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION); jQuery('#id_route').val(current_geo); var vertices = current_geo.getVertices(); if (vertices){ - jQuery("#"+settings.input_id).val(vertices); + jQuery("#"+settings[map_id].input_id).val(vertices); } }, updateNominatimName:function(lonlat, response_id){ @@ -3399,17 +3492,17 @@ function transformCoordToLonLat(coord) { else if ( typeof thing === 'object' || ! thing ) { return methods.init.apply( this, arguments ); } - else if ( thing === 'settings' ) { - // Use $("#mydiv").chimere("settings", "key", "value") to change settings + else if ( thing === 'settings[map_id]' ) { + // Use $("#mydiv").chimere("settings[map_id]", "key", "value") to change settings[map_id] // from outside the plugin if (arguments.length == 3) { - settings[arguments[1]] = arguments[2]; + settings[map_id][arguments[1]] = arguments[2]; } else if (arguments.length == 2) { - return settings[arguments[1]]; + return settings[map_id][arguments[1]]; } - else { // Use $("#mydiv").chimere("settings") to know the current settings - return settings; + else { // Use $("#mydiv").chimere("settings[map_id]") to know the current settings[map_id] + return settings[map_id]; } } else { |