aboutsummaryrefslogtreecommitdiffstats
path: root/app/maps
diff options
context:
space:
mode:
authorAlban Peignier2012-06-29 09:16:46 +0200
committerAlban Peignier2012-06-29 09:16:46 +0200
commitcfa38b6c6593c46fe52f30455c7073e37da3ae97 (patch)
treec53a5684d85b8d85ead29bc652dd989a5bdcc4ac /app/maps
parente23bf6c2789b174d7ce847270f45d15b8633000c (diff)
downloadchouette-core-cfa38b6c6593c46fe52f30455c7073e37da3ae97.tar.bz2
Use controller as helpers in Map to create correct paths. Refs #4
Diffstat (limited to 'app/maps')
-rw-r--r--app/maps/application_map.rb51
-rw-r--r--app/maps/connection_link_map.rb15
-rw-r--r--app/maps/line_map.rb16
-rw-r--r--app/maps/network_map.rb13
-rw-r--r--app/maps/route_map.rb7
-rw-r--r--app/maps/stop_area_map.rb5
6 files changed, 71 insertions, 36 deletions
diff --git a/app/maps/application_map.rb b/app/maps/application_map.rb
index d7ee0b5a1..f1b1d103d 100644
--- a/app/maps/application_map.rb
+++ b/app/maps/application_map.rb
@@ -2,9 +2,27 @@ class ApplicationMap
include MapLayers
include MapLayers::ViewHelpers
- #delegate :url_helpers, :to => :'Rails.application.routes'
- include Rails.application.routes.url_helpers
-
+
+ attr_accessor :helpers
+
+ def helpers
+ @helper ||= Helpers.new
+ end
+
+ # For example, in a controller :
+ #
+ # @map = MyMap.new(...).with_helpers(self)
+ #
+ def with_helpers(helpers)
+ self.helpers = helpers
+ self
+ end
+
+ class Helpers
+ include ActionDispatch::Routing::UrlFor
+ include Rails.application.routes.url_helpers
+ end
+
def projection(name)
OpenLayers::Projection.new(name)
end
@@ -25,13 +43,10 @@ class ApplicationMap
@map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls)
end
- def default_class
- self.class.name.underscore.gsub(/_map$/, '')
- end
-
def name
self.class.name.underscore.gsub(/_map$/, '')
end
+ alias_method :default_class, :name
def to_html(options = {})
if not respond_to?(:ready?) or ready?
@@ -91,8 +106,26 @@ class ApplicationMap
} } )
end
- def kml_layer(url, options = {})
- url = polymorphic_path([url.referential, url], :format => :kml) unless String === url
+ def kml_layer(url_or_object, options_or_url_options = {}, options = nil)
+ unless options
+ url_options = {}
+ options = options_or_url_options
+ else
+ url_options = options_or_url_options
+ end
+
+ url_options = url_options.merge(:format => :kml)
+
+ url =
+ case url_or_object
+ when String
+ url_or_object
+ when Array
+ helpers.polymorphic_path(url_or_object, url_options)
+ else
+ helpers.polymorphic_path([url_or_object.referential, url_or_object], url_options)
+ end
+
protocol = OpenLayers::Protocol::HTTP.new :url => url, :format => kml
OpenLayers::Layer::Vector.new name, {:projection => projection("EPSG:4326"), :strategies => [strategy_fixed], :protocol => protocol, :displayInLayerSwitcher => false}.merge(options)
end
diff --git a/app/maps/connection_link_map.rb b/app/maps/connection_link_map.rb
index 897da8a5d..8071c5f0f 100644
--- a/app/maps/connection_link_map.rb
+++ b/app/maps/connection_link_map.rb
@@ -1,10 +1,9 @@
class ConnectionLinkMap < ApplicationMap
- attr_reader :referential, :connection_link, :connection_link_style
+ attr_reader :connection_link, :connection_link_style
- def initialize(referential, connection_link, connection_link_style = nil)
- @referential = referential
+ def initialize(connection_link, connection_link_style = nil)
@connection_link = connection_link
@connection_link_style = connection_link_style
end
@@ -17,7 +16,7 @@ class ConnectionLinkMap < ApplicationMap
page << map.add_layer(google_hybrid)
page << map.add_layer(google_satellite)
- page.assign "stop_areas_layer", kml_layer(polymorphic_path([referential, connection_link, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
+ page.assign "stop_areas_layer", kml_layer([connection_link.referential, connection_link, :stop_areas], :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
page << map.add_layer(:stop_areas_layer)
page << map.add_control( hover_control_display_name(:stop_areas_layer) )
#page << map.add_layer(kml_layer(connection_link, :styleMap => StyleMap::ConnectionLinkStyleMap.new( :style => connection_link_style).style_map))
@@ -31,9 +30,11 @@ class ConnectionLinkMap < ApplicationMap
end
def bounds
- wgs84_bounds = Chouette::StopArea.bounds
- @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"))
-
+ @bounds ||=
+ begin
+ wgs84_bounds = Chouette::StopArea.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
end
diff --git a/app/maps/line_map.rb b/app/maps/line_map.rb
index 4d363b070..e451f452d 100644
--- a/app/maps/line_map.rb
+++ b/app/maps/line_map.rb
@@ -1,10 +1,9 @@
class LineMap < ApplicationMap
- attr_reader :referential, :line, :line_style
+ attr_reader :line, :line_style
- def initialize(referential, line, line_style = nil)
- @referential = referential
+ def initialize(line, line_style = nil)
@line = line
@line_style = line_style
end
@@ -18,7 +17,7 @@ class LineMap < ApplicationMap
page << map.add_layer(google_satellite)
#page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map))
- page.assign "stop_areas_layer", kml_layer(polymorphic_path([referential, line, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
+ page.assign "stop_areas_layer", kml_layer([line.referential, line, :stop_areas], :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
page << map.add_layer(:stop_areas_layer)
page << map.add_control( hover_control_display_name(:stop_areas_layer) )
@@ -28,13 +27,16 @@ class LineMap < ApplicationMap
end
def bounds
- wgs84_bounds = Chouette::StopArea.bounds
- @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"))
+ @bounds ||=
+ begin
+ wgs84_bounds = GeoRuby::SimpleFeatures::Point.bounds(line.stop_areas.map(&:geometry))
+ 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")) if wgs84_bounds
+ end
end
def ready?
- Chouette::StopArea.bounds.present?
+ bounds.present?
end
end
diff --git a/app/maps/network_map.rb b/app/maps/network_map.rb
index 760948a2a..cee54ed1b 100644
--- a/app/maps/network_map.rb
+++ b/app/maps/network_map.rb
@@ -2,8 +2,7 @@ class NetworkMap < ApplicationMap
attr_reader :referential, :network, :network_style
- def initialize(referential, network, network_style = nil)
- @referential = referential
+ def initialize(network, network_style = nil)
@network = network
@network_style = network_style
end
@@ -16,7 +15,7 @@ class NetworkMap < ApplicationMap
page << map.add_layer(google_hybrid)
page << map.add_layer(google_satellite)
- page.assign "stop_areas_layer", kml_layer(polymorphic_path([referential, network, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
+ page.assign "stop_areas_layer", kml_layer([network.referential, network, :stop_areas], :styleMap => StyleMap::StopAreasStyleMap.new.style_map)
page << map.add_layer(:stop_areas_layer)
page << map.add_control( hover_control_display_name(:stop_areas_layer) )
@@ -27,9 +26,11 @@ class NetworkMap < ApplicationMap
end
def bounds
- wgs84_bounds = Chouette::StopArea.bounds
- @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"))
-
+ @bounds ||=
+ begin
+ wgs84_bounds = Chouette::StopArea.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")) if wgs84_bounds
+ end
end
def ready?
diff --git a/app/maps/route_map.rb b/app/maps/route_map.rb
index 7cc525dde..c28c22e62 100644
--- a/app/maps/route_map.rb
+++ b/app/maps/route_map.rb
@@ -1,9 +1,8 @@
class RouteMap < ApplicationMap
- attr_reader :referential, :route, :style
+ attr_reader :route, :style
- def initialize(referential, route, style = nil)
- @referential = referential
+ def initialize(route, style = nil)
@route = route
@style = style
end
@@ -17,7 +16,7 @@ class RouteMap < ApplicationMap
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.add_layer(kml_layer([route.referential, route.line, route], :styleMap => StyleMap::RouteStyleMap.new.style_map))
page << map.zoom_to_extent(bounds) if bounds
end
end
diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb
index b7c060dce..0e02654e9 100644
--- a/app/maps/stop_area_map.rb
+++ b/app/maps/stop_area_map.rb
@@ -5,8 +5,7 @@ class StopAreaMap < ApplicationMap
attr_accessor :editable
alias_method :editable?, :editable
- def initialize(referential, stop_area)
- @referential = referential
+ def initialize(stop_area)
@stop_area = stop_area
end
@@ -18,7 +17,7 @@ class StopAreaMap < ApplicationMap
page << map.add_layer(google_hybrid)
page << map.add_layer(google_satellite)
- page.assign "edit_stop_area_layer", kml_layer( polymorphic_path( [referential, stop_area], :format => :kml, :default => editable?), :style_map => StyleMap::EditStopAreaStyleMap.new.style_map)
+ page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => StyleMap::EditStopAreaStyleMap.new.style_map)
page << map.add_layer(:edit_stop_area_layer)
if editable?