diff options
| author | Marc Florisson | 2012-05-04 14:07:12 +0200 | 
|---|---|---|
| committer | Marc Florisson | 2012-05-04 14:07:12 +0200 | 
| commit | 09c55792e887dea709df29cae2e4fb8fbd86901c (patch) | |
| tree | 5ef824a3144995bd1ab552eea4c852b23f99c35f /app/maps | |
| parent | ac3a3153fa18da97cc120703f9a62061a211b581 (diff) | |
| download | chouette-core-09c55792e887dea709df29cae2e4fb8fbd86901c.tar.bz2 | |
add map on route view
Diffstat (limited to 'app/maps')
| -rw-r--r-- | app/maps/route_map.rb | 35 | ||||
| -rw-r--r-- | app/maps/style_map/route_style_map.rb | 44 | 
2 files changed, 79 insertions, 0 deletions
diff --git a/app/maps/route_map.rb b/app/maps/route_map.rb new file mode 100644 index 000000000..417b6037a --- /dev/null +++ b/app/maps/route_map.rb @@ -0,0 +1,35 @@ +class RouteMap < ApplicationMap + +  attr_reader :referential, :route, :style + +  def initialize(referential, route, style = nil) +    @referential = referential +    @route = route +    @style = style +  end + +  def map +    @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page| +      page << map.add_layer(MapLayers::OSM_MAPNIK) +      page << map.add_layer(google_physical)  +      page << map.add_layer(google_streets)  +      page << map.add_layer(google_hybrid)  +      page << map.add_layer(google_satellite)  + +      #page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map)) +      page << map.add_layer(kml_layer(polymorphic_path([referential, route.line, route], :format => :kml), :styleMap => StyleMap::RouteStyleMap.new.style_map)) +      page << map.zoom_to_extent(bounds) if bounds +    end +  end + +  def bounds +    wgs84_bounds = ( route.geometry.empty?) ? Chouette::StopArea.bounds : route.geometry.envelope +     +    @bounds ||= OpenLayers::Bounds.new( +        wgs84_bounds.lower_corner.x, wgs84_bounds.lower_corner.y,  +        wgs84_bounds.upper_corner.x, wgs84_bounds.upper_corner.y). +      transform(OpenLayers::Projection.new("EPSG:4326"), OpenLayers::Projection.new("EPSG:900913")) +  end + +end + diff --git a/app/maps/style_map/route_style_map.rb b/app/maps/style_map/route_style_map.rb new file mode 100644 index 000000000..136cecba5 --- /dev/null +++ b/app/maps/style_map/route_style_map.rb @@ -0,0 +1,44 @@ +class StyleMap::RouteStyleMap < StyleMap::GenericStyleMap +  attr_accessor :style + +  def initialize(options = {}) +    @style = options[:style].present? ? default_style.merge(options[:style]) : default_style +  end + +  def default_style +    { +      :label => "${label}", +      :fontColor => "black",  +      :fontSize => "11px", +      :fontWeight => "bold", +      :labelAlign => "ct", +      :labelXOffset => 0, +      :labelYOffset => -15, +      :strokeColor => "#000000", +      :strokeOpacity => 1, +      :strokeWidth => 3, +      :strokeLineCap => "round", +      :strokeDashstyle => "solid", +      :externalGraphic => "/assets/map/${positionType}.png", +      :graphicWidth => 12, +      :graphicHeight => 12,  +      :graphicOpacity => 1,	 +      :graphicXOffset => -6, +      :graphicYOffset => -6, +      :display => true +    } +  end + +  def context +    context = {  +      :label => :" function(feature) {if(feature.layer.map.getZoom() > 13) { return feature.attributes.name;} else {return '';}} ",  +      :positionType => :" function(feature) { if (feature.attributes.departure != undefined) { return 'departure'; } else if (feature.attributes.arrival != undefined) { return 'arrival'; } else { return 'interstop'; }} "  +    } +  end + +  def style_map +    OpenLayers::StyleMap.new(:default => OpenLayers::Style.new(style, { :context => context})) +  end + +end +  | 
