module Ropenlayer module Openlayer module Layer class Base attr_reader :config attr_reader :name attr_reader :js_id attr_reader :map def self.build_collection(map) map.layer_names.uniq.inject([]) do |layers, layer_name| layers << new(layer_name, map) layers end end def initialize(name, map) @name = name @map = map @js_id = "#{ map.js_id }_#{ name }" @config = self.class.layers_config[name] end def to_js %( // Adding #{ @name } layer #{ Ropenlayer::Openlayer::Js.new_var(@js_id, "#{ Ropenlayer::Openlayer::Js.new_method(@config[:method], @config) }").to_js } #{ Ropenlayer::Openlayer::Js.new("#{ map.js_id }.addLayer(#{ @js_id })").to_js } ) end private # return a hash with config options for Ropenlayer layers. # U can override this method as ur wish to get config from other places, for example, AR. def self.layers_config { :osm => { :method => "OpenLayers.Layer.OSM", :args => [ "'Usar Mapa OSM'" ], :propierties => { }, :description => 'Mapa Libre OSM' }, :wms => { :method => "OpenLayers.Layer.WMS", :args => [ "'OpenLayers WMS'", "'http://vmap0.tiles.osgeo.org/wms/vmap0'" ], :propierties => { :layers => "'basic'" }, :description => 'Mapa Libre WMS'}, :wms => { :method => "OpenLayers.Layer.WMS", :args => [ "'OpenLayers WMS'", "'http://vmap0.tiles.osgeo.org/wms/vmap0'" ], :propierties => { :layers => "'basic'" }, :description => 'Mapa Libre WMS' }, :google_streets => { :method => "OpenLayers.Layer.Google", :args => [ "'Google Streets'" ], :propierties => { :numZoomLevels => "20" }, :description => 'Mapa StreetsGoogle' }, :google_satellite => { :method => "OpenLayers.Layer.Google", :args => [ "'Google Satellite'" ], :propierties => { :type => "google.maps.MapTypeId.SATELLITE", :numZoomLevels => "22" }, :description => 'Mapa Satélite de Google' }, :google_physical => { :method => "OpenLayers.Layer.Google", :args => [ "'Google Physical'" ], :propierties => { :type => "google.maps.MapTypeId.TERRAIN" }, :description => 'Mapa Físico de Google' }, :google_hybrid => { :method => "OpenLayers.Layer.Google", :args => [ "'Google Hybrid'" ], :propierties => { :type => "google.maps.MapTypeId.HYBRID", :numZoomLevels => "22" }, :description => 'Mapa Híbrido de Google' }, :yahoo => { :method => "OpenLayers.Layer.Yahoo", :args => [ ], :propierties => { }, :description => 'Mapa Yahoo' }, :new_elements => { :method => "OpenLayers.Layer.Vector", :args => [ "'Vector Layer for create elements'" ], :propierties => { }, :description => 'New Vectors Layer' }, :vector_elements => { :method => "OpenLayers.Layer.Vector", :args => [ "'Capa de Marcadores''" ], :propierties => { }, :description => 'Capa para marcadores de elements' } } end end end end end