diff options
Diffstat (limited to 'static/main_map.js')
| -rw-r--r-- | static/main_map.js | 56 | 
1 files changed, 44 insertions, 12 deletions
diff --git a/static/main_map.js b/static/main_map.js index 4a9e684..3ccf2b0 100644 --- a/static/main_map.js +++ b/static/main_map.js @@ -44,6 +44,7 @@ var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);  /* define global variable */  var markers = new Array();  var layerMarkers; +var layerVectors;  var currentPopup;  var currentFeature; @@ -63,8 +64,8 @@ function showPop(feature) {      currentPopup = feature.popup;  } -/* load markers with an AJAX request */ -function loadMarkers(){ +/* load geo objects with an AJAX request */ +function loadGeoObjects(){      /* get checked categories */      inputs = window.document.forms["frm_categories"];      var categories = ''; @@ -79,28 +80,36 @@ function loadMarkers(){      }      /* 0 stand for all categories */      if (!categories) categories = '0'; -    var uri = "/chimere/getMarkers/" + categories; -    OpenLayers.loadURL(uri, '', this, setMarkers); +    var uri = "/chimere/getGeoObjects/" + categories; +    OpenLayers.loadURL(uri, '', this, setGeoObjects);  } -/* update the marker layers from an http response GeoJSON */ -function setMarkers(response){ +/* update the marker and vector layers from an http response GeoJSON */ +function setGeoObjects(response){      if(layerMarkers) layerMarkers.destroy(); +    if(layerVectors) layerVectors.destroy();      if (response.responseText.indexOf('no results') == -1) {          /* clean the marker layer */          if (currentPopup) {              currentPopup.hide();              hide('detail');          } +        layerVectors = new OpenLayers.Layer.Vector("Vector Layer"); +        map.addLayer(layerVectors); +        layerVectors.setOpacity(0.8);          layerMarkers = new OpenLayers.Layer.Markers('POIs');          map.addLayer(layerMarkers);          layerMarkers.setOpacity(0.8);          var json = new OpenLayers.Format.JSON(); -        var markers_pt = json.read(response.responseText); -        /* load every marker */ -        for (var i = 0; i < markers_pt.features.length; i++) { -            putMarker(markers_pt.features[i]); +        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); +            }          }          /*          var geojson = new OpenLayers.Format.GeoJSON(); @@ -111,9 +120,32 @@ function setMarkers(response){      }  } + +/* put a route on the map */ +function putRoute(route) { +    var polyline = route.geometry; +    var point_array = new Array(); +    for (i=0; i<polyline.coordinates.length; i++){ +        var point = new OpenLayers.Geometry.Point(polyline.coordinates[i][0], +                                                  polyline.coordinates[i][1]); +        point_array.push(point); +    } +    var linestring = new OpenLayers.Geometry.LineString(point_array); +    currentFeature = new OpenLayers.Feature.Vector(); + +    var style = OpenLayers.Util.extend({}, +                                OpenLayers.Feature.Vector.style['default']); +    style.strokeColor = route.properties.color; +    style.strokeWidth = 3; +    currentFeature.style = style; +    currentFeature.geometry = linestring; +    layerVectors.addFeatures([currentFeature]); +} + +  /* put a marker on the map */  function putMarker(mark) { -    /* initialise a new feature with appropriate attribute for setting a +    /* initialise a new marker with appropriate attribute for setting a      marker */      lat = mark.geometry.coordinates[1];      lon = mark.geometry.coordinates[0]; @@ -199,6 +231,6 @@ function init(){          /*projection: new OpenLayers.Projection('EPSG:900913'),          displayProjection: new OpenLayers.Projection('EPSG:4326')*/      map.addLayers([layerMapnik, cyclemap]); -    loadMarkers(); +    loadGeoObjects();      map.setCenter(centerLonLat, 12);  }  | 
