summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-09-28 23:41:29 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-09-28 23:41:29 +0200
commit8c1c06e773bd71ded8a553af035859c897b40864 (patch)
tree7cdb73fbcd9de32922451c239357754a28557b01 /chimere
parent7f1a18283284729bfd5e4c438f0bc8675ba4e8bb (diff)
downloadChimère-8c1c06e773bd71ded8a553af035859c897b40864.tar.bz2
Chimère-8c1c06e773bd71ded8a553af035859c897b40864.zip
JS ol3: smooth pan and zoom when clicking on a cluster
Diffstat (limited to 'chimere')
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js56
1 files changed, 34 insertions, 22 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 87e22ea..7771b7f 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -513,7 +513,7 @@ var invisibleStyleIcon = new ol.style.Style({
// zoom on aggregated
var key = feature.get('key');
- if (key.length > 3 && key.substring(0, 3) == 'agg' &&
+ 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){
@@ -523,28 +523,39 @@ var invisibleStyleIcon = new ol.style.Style({
return
}
- var geom = feature.getGeometry();
- if (geom.getType() == 'Point'){
- settings.popup.setPosition(geom.getCoordinates());
- settings.popup.setOffset([feature.get('popup_offset_x'),
- -feature.get('popup_offset_y')]);
- } else if (geom.getType() == 'Polygon'){
- settings.popup.setPosition(geom.getInteriorPoint().getCoordinates());
- settings.popup.setOffset([0, 0]);
- } else if (geom.getType() == 'LineString'){
- settings.popup.setPosition(geom.getCoordinateAt(0.5));
- settings.popup.setOffset([0, 0]);
- } else if (geom.getType() == 'MultipleLineString'){
- settings.popup.setPosition(geom.getLineString(0).getCoordinatesAt(0.5));
- settings.popup.setOffset([0, 0]);
+ if (key && key.length > 6 && key.substring(0, 7) == 'cluster'){
+ var v = settings.map.getView();
+ var pan = ol.animation.pan(
+ {duration: 500, source: v.getCenter()})
+ var zoom = ol.animation.zoom(
+ {duration: 500, resolution: v.getResolution()})
+ settings.map.beforeRender(pan, zoom);
+ v.setZoom(v.getZoom() + 1);
+ v.setCenter(feature.getGeometry().getCoordinates());
+ } else {
+ var geom = feature.getGeometry();
+ if (geom.getType() == 'Point'){
+ settings.popup.setPosition(geom.getCoordinates());
+ settings.popup.setOffset([feature.get('popup_offset_x'),
+ -feature.get('popup_offset_y')]);
+ } else if (geom.getType() == 'Polygon'){
+ settings.popup.setPosition(geom.getInteriorPoint().getCoordinates());
+ settings.popup.setOffset([0, 0]);
+ } else if (geom.getType() == 'LineString'){
+ settings.popup.setPosition(geom.getCoordinateAt(0.5));
+ settings.popup.setOffset([0, 0]);
+ } else if (geom.getType() == 'MultipleLineString'){
+ settings.popup.setPosition(geom.getLineString(0).getCoordinatesAt(0.5));
+ settings.popup.setOffset([0, 0]);
+ }
+ $(settings.popup_item).popover({
+ 'placement': 'top',
+ 'html': true,
+ 'content': feature.get('name')
+ });
+ $(settings.popup_item).popover('show');
+ methods.display_feature_detail(key);
}
- $(settings.popup_item).popover({
- 'placement': 'top',
- 'html': true,
- 'content': feature.get('name')
- });
- $(settings.popup_item).popover('show');
- methods.display_feature_detail(key);
} else {
$(settings.popup_item).popover('destroy');
}
@@ -914,6 +925,7 @@ var invisibleStyleIcon = new ol.style.Style({
settings._remindUpdated = {};
settings._currentRemind = -1;
function clusterGetStyle (feature, resolution){
+ var key = feature.set('key', 'cluster');
var features = feature.get('features');
var size = features.length;
var style = settings._styleCache[size];