diff options
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 84 | ||||
| -rw-r--r-- | chimere/views.py | 4 | 
2 files changed, 53 insertions, 35 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index d944561..fa85637 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -739,6 +739,13 @@ function transformCoordToLonLat(coord) {              }          },          _move_end: function(e){ +            // prevent too fast reloading when UI is inconsistent +            var d = new Date(); +            var n = d.getTime(); +            if (typeof settings._move_end_time != 'undefined'){ +                if ((n - settings._move_end_time) < 500) return; +            } +            settings._move_end_time = n;              settings._reload_on_move(e);          },          update_permalink: function(e){ @@ -817,41 +824,48 @@ function transformCoordToLonLat(coord) {              /* zoom & center */              var zoom = items[0]; -            var center = items[1].split(':'); -            center = [Math.round(center[0] * 1000) / 1000, -                      Math.round(center[1] * 1000) / 1000]; -            center = ol.proj.transform( -                        center, -                        EPSG_DISPLAY_PROJECTION, -                        EPSG_PROJECTION); -            //methods._set_animation(); -            view.setZoom(zoom); -            view.setCenter(center); - +            if (zoom){ +                view.setZoom(zoom); +            } +            if (items[1]){ +                var center = items[1].split(':'); +                center = [Math.round(center[0] * 1000) / 1000, +                          Math.round(center[1] * 1000) / 1000]; +                center = ol.proj.transform( +                            center, +                            EPSG_DISPLAY_PROJECTION, +                            EPSG_PROJECTION); +                //methods._set_animation(); +                view.setCenter(center); +            }              /* layers */ -            var layers = items[2].split(':'); -            $.each(settings.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){ -                        if (!l.getVisible()) l.setVisible(true); -                    } else { -                        if (l.getVisible()) l.setVisible(false); +            if (items[2]){ +                var layers = items[2].split(':'); +                $.each(settings.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){ +                            if (!l.getVisible()) l.setVisible(true); +                        } else { +                            if (l.getVisible()) l.setVisible(false); +                        }                      } -                } -            }); +                }); +            }              /* categories */ -            var checked_categories = items[3].split('-'); -            $('#frm_categories .subcategories input:checkbox').each( -                function(index){ -                    var cat_id = $(this).attr('id').split('_').pop(); -                    if (checked_categories.indexOf(cat_id) != -1){ -                        $(this).click(); -                    } else { -                        $(this).attr('checked', ''); -                    } -            }); +            if (items[3]){ +                var checked_categories = items[3].split('-'); +                $('#frm_categories .subcategories input:checkbox').each( +                    function(index){ +                        var cat_id = $(this).attr('id').split('_').pop(); +                        if (checked_categories.indexOf(cat_id) != -1){ +                            $(this).click(); +                        } else { +                            $(this).attr('checked', ''); +                        } +                }); +            }              var routing_speed = items[5];              if (routing_speed) @@ -955,9 +969,11 @@ function transformCoordToLonLat(coord) {                      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; -                    settings._cache_zoom = current_zoom; - +                    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; +                    }                      if(!init) methods.loadGeoObjects();                  }              }; diff --git a/chimere/views.py b/chimere/views.py index 520cfee..c063038 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -789,13 +789,15 @@ def getGeoObjects(request, area_name, category_ids, status):      bounding_box = []      for attr in ['min_lon', 'min_lat', 'max_lon', 'max_lat']:          value = request.GET.get(attr, None) -        if not value: +        if not value or value == 'NaN':              bounding_box = None              break          bounding_box.append(value)      if bounding_box:          bounding_box = GEOSPolygon.from_bbox(bounding_box)      zoom_level = request.GET.get('zoom_level', None) +    if zoom_level == '0': +        zoom_level = None      jsons, zoom_need_reload = _getGeoObjects(          area_name, category_ids, status, bounding_box=bounding_box,  | 
