diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-01 17:36:19 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-01 17:36:19 +0200 |
commit | 7ddf224de3f1f751f00ebc883404f1424f018c3e (patch) | |
tree | f26138d1be9bc793e3ded53b569edc2d1192354f /chimere | |
parent | 9cd091b6a77953c83f5dc9a09682c758b9667300 (diff) | |
download | Chimère-7ddf224de3f1f751f00ebc883404f1424f018c3e.tar.bz2 Chimère-7ddf224de3f1f751f00ebc883404f1424f018c3e.zip |
JS: load only visible (+cache) items - reload on move
Diffstat (limited to 'chimere')
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index e180682..2fd94a4 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -159,6 +159,7 @@ function transform(obj) { map_layers: null, selected_map_layer: null, dynamic_categories: false, + reload_on_move: true, display_submited: false, display_feature: null, display_route: null, @@ -831,6 +832,35 @@ function transform(obj) { $("#permalink a").attr("disabled", "disabled"); } }, + register_reload_on_move: function(){ + var reload_on_move = function(evnt){ + var map = settings.map; + var current_extent = ol.proj.transformExtent( + map.getView().calculateExtent(map.getSize()), + EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION + ); + + var init; + if (!settings._cache_boundingbox) init = true; + + if (init || + !ol.extent.containsCoordinate(settings._cache_boundingbox, + current_extent)){ + // enlarge current extent to cache values + x_extent = Math.abs(current_extent[2] - current_extent[0]); + y_extent = Math.abs(current_extent[3] - current_extent[1]); + current_extent[0] = current_extent[0] - x_extent; + current_extent[1] = current_extent[1] - y_extent; + current_extent[2] = current_extent[2] + x_extent; + current_extent[3] = current_extent[3] + y_extent; + settings._cache_boundingbox = current_extent; + + if(!init) methods.loadGeoObjects(); + } + }; + settings.map.on('moveend', reload_on_move); + reload_on_move(); + }, /* Preload icons */ preload_images: function(){ if (typeof extra_url == 'undefined') return; @@ -1006,8 +1036,23 @@ function transform(obj) { if (!ids) ids = '0'; var uri = extra_url + "getGeoObjects/" + ids; if (settings.display_submited) uri += "/A_S"; + + if (settings.reload_on_move && !settings._cache_boundingbox){ + methods.register_reload_on_move(); + } + + var data = {}; + if (settings._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], + }; + } $.ajax({url: uri, dataType: "json", + data: data, success: function (data) { //var start = new Date().getTime(); settings.dbFeatures.clear(); |