diff options
Diffstat (limited to 'static/main_map.js')
| -rw-r--r-- | static/main_map.js | 96 | 
1 files changed, 64 insertions, 32 deletions
| diff --git a/static/main_map.js b/static/main_map.js index 6370117..bd149a1 100644 --- a/static/main_map.js +++ b/static/main_map.js @@ -30,16 +30,6 @@ function checkAll(item, ids){      }  } -/* show a block panel */ -function show(id){ -    document.getElementById(id).style.display = 'block'; -} - -/* hide a panel */ -function hide(id){ -    document.getElementById(id).style.display = 'None'; -} -  var map;  /* availaible map layers */ @@ -75,27 +65,78 @@ function showPop(feature) {      currentPopup = feature.popup;  } -/* load geo objects with an AJAX request */ -function loadGeoObjects(){ +/* check checked categories */ +var checked_categories; +var display_submited = false; + +function updateCheckedCategories(){      /* get checked categories */      inputs = window.document.forms["frm_categories"]; -    var categories = ''; -    var display_submited = false; +    checked_categories = ''; +    display_submited = false;      for (var i = 0; i < inputs.length; i++) {          input = inputs[i];          if (input.checked               && input.name.substring('category_'.length, 0) == 'category_'){              id = input.name.substring('category_'.length, input.name.length); -            if(categories) categories += '_'; -            categories += id; +            if(checked_categories) checked_categories += '_'; +            checked_categories += id;          }          if (input.checked && input.name == 'display_submited'){              display_submited = true;          }      } +} + +/* load marker and route layer from a JSON feature string */ +function loadLayersFromJSON(layer_markers, layer_vectors, geo_objects){ +    for (var i = 0; i < geo_objects.features.length; i++) { +        var feature = geo_objects.features[i]; +        if (feature.geometry.type == 'Point'){ +            putMarker(layer_markers, feature); +        } else if (feature.geometry.type == 'LineString') { +            putRoute(layer_vectors, feature); +        } +    } +} + +/* zoom to a desired category */ +function zoomToCategory(categorie_ids){ +    updateCheckedCategories();      /* 0 stand for all categories */ -    if (!categories) categories = '0'; -    var uri = "/chimere/getGeoObjects/" + categories; +    var uri = "/chimere/getGeoObjects/" + categorie_ids; +    if (display_submited) uri += "/A_S"; +    OpenLayers.loadURL(uri, '', this, zoomToCategoryExtent); +} + +/* zoom to a selected category from an http response GeoJSON */ +function zoomToCategoryExtent(response){ +    if (response.responseText.indexOf('no results') != -1) return; +    var fakeLayerVectors = new OpenLayers.Layer.Vector("Fake vector layer"); +    var fakeLayerMarkers = new OpenLayers.Layer.Markers('Fake POIs layer'); +    var json = new OpenLayers.Format.JSON(); +    var geo_objects = json.read(response.responseText); +    /* load every geo object */ +    loadLayersFromJSON(fakeLayerMarkers, fakeLayerVectors, geo_objects); +    var bounds = fakeLayerMarkers.getDataExtent(); +    if (bounds){ +        bounds.extend(fakeLayerVectors.getDataExtent()); +    } else { +        bounds = fakeLayerVectors.getDataExtent(); +    } +    if(bounds){ +        map.zoomToExtent(bounds); +    } +    fakeLayerMarkers.destroy(); +    fakeLayerVectors.destroy(); +} + +/* load geo objects with an AJAX request */ +function loadGeoObjects(){ +    updateCheckedCategories(); +    /* 0 stand for all categories */ +    if (!checked_categories) checked_categories = '0'; +    var uri = "/chimere/getGeoObjects/" + checked_categories;      if (display_submited) uri += "/A_S";      OpenLayers.loadURL(uri, '', this, setGeoObjects);  } @@ -120,13 +161,7 @@ function setGeoObjects(response){          var json = new OpenLayers.Format.JSON();          var geo_objects = json.read(response.responseText);          /* load every geo object */ -        for (var i = 0; i < geo_objects.features.length; i++) { -            var feature = geo_objects.features[i]; -            if (feature.geometry.type == 'Point') putMarker(feature); -            if (feature.geometry.type == 'LineString') { -                putRoute(feature); -            } -        } +        loadLayersFromJSON(layerMarkers, layerVectors, geo_objects);          /*          var geojson = new OpenLayers.Format.GeoJSON();          var markers_pt = geojson.read(response.responseText); @@ -136,9 +171,8 @@ function setGeoObjects(response){      }  } -  /* put a route on the map */ -function putRoute(route) { +function putRoute(layer, route) {      var polyline = route.geometry;      var point_array = new Array();      for (i=0; i<polyline.coordinates.length; i++){ @@ -155,12 +189,12 @@ function putRoute(route) {      style.strokeWidth = 3;      currentFeature.style = style;      currentFeature.geometry = linestring; -    layerVectors.addFeatures([currentFeature]); +    layer.addFeatures([currentFeature]);  }  /* put a marker on the map */ -function putMarker(mark) { +function putMarker(layer, mark) {      /* initialise a new marker with appropriate attribute for setting a      marker */      lat = mark.geometry.coordinates[1]; @@ -212,7 +246,7 @@ function putMarker(mark) {      marker.events.register('mousedown', feature, markerClick);      marker.events.register('mouseover', feature, markerOver);      marker.events.register('mouseout', feature, markerOut); -    layerMarkers.addMarker(marker); +    layer.addMarker(marker);      return feature;  } @@ -230,8 +264,6 @@ function setDetail(response){      }  } - -  /* main initialisation function */  function init(){      /* set the main map */ | 
