Class: Ropenlayer::Openlayer::Map
- Inherits:
-
Object
- Object
- Ropenlayer::Openlayer::Map
- Defined in:
- lib/ropenlayer/openlayer/map.rb
Constant Summary collapse
- MAP_JS_PREFIX =
used to scope js variables created with the map. Js name will be created with this prefix + plus dom_id argument
'olObject'
- DEFAULT_ADD_FEATURE_CALLBACK =
'addFeatureToMap'
Instance Attribute Summary collapse
-
#control_names ⇒ Object
Returns the value of attribute control_names.
-
#controls ⇒ Object
Returns the value of attribute controls.
-
#div_id ⇒ Object
readonly
Returns the value of attribute div_id.
-
#draw_features ⇒ Object
Returns the value of attribute draw_features.
-
#form_localizations_fields ⇒ Object
Returns the value of attribute form_localizations_fields.
-
#js_helper ⇒ Object
readonly
Returns the value of attribute js_helper.
-
#js_id ⇒ Object
readonly
Returns the value of attribute js_id.
-
#js_notification_area ⇒ Object
Returns the value of attribute js_notification_area.
-
#js_propierties ⇒ Object
readonly
Returns the value of attribute js_propierties.
-
#layer_names ⇒ Object
readonly
Returns the value of attribute layer_names.
-
#layers ⇒ Object
readonly
Returns the value of attribute layers.
-
#layers_select ⇒ Object
Returns the value of attribute layers_select.
-
#markers_layer ⇒ Object
Returns the value of attribute markers_layer.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#vectors_layer ⇒ Object
Returns the value of attribute vectors_layer.
Class Method Summary collapse
- .default_controls ⇒ Object
- .default_latitude ⇒ Object
- .default_layers ⇒ Object
- .default_longitude ⇒ Object
- .default_zoom ⇒ Object
Instance Method Summary collapse
- #add_notification_area ⇒ Object
-
#initialize(dom_id, options = {}) ⇒ Map
constructor
Initialize.
- #map_js_propierties(map_js_options = {}) ⇒ Object
- #set_center ⇒ Object
-
#to_js ⇒ Object
Map to JS OpenLayer construtor.
Constructor Details
#initialize(dom_id, options = {}) ⇒ Map
Initialize
Create a map object with parsed attributes. Ropenlayer manage two ids for each map.
-
js_div, use to scope all the variables names to draw js output.
-
div_id, the dom_id passed as argument to construtor. For example
For example
m = Ropenlayer::Openlayer::Map.new('group_map')
=> <Ropenlayer::Openlayer::Map:0xf7344fe8>
m.js_id
=> "olObject_group_map"
n.div_id
=> "group_map"
To draw map, just call to_js method. For example, in a rails 3.x application
<%= raw javascript_tag(Ropenlayer::Openlayer::Map.new('group_map').to_js) %>
Ropenlayer::Openlayer::Map use this options
-
layers: Select which layers are used in map. For a list of available layers see
Ropenlayer::Openlayer::Laye::Baser
-
default_layer: Default layer at render. Default layers.first
-
layer_select: If true, map will render a control for change between differents layers
-
controls: Select which controls are used in map. For a list of available controlse see
Ropenlayer::Openlayer::Control
-
latitude: Specify default latitude for map. Map will be pointed at this latitude at render.
-
longitude: Specify default longitude for map. Map will be pointed at this longitude at render.
-
zoom: Specify default zoom for map. Map will be render with this zoom enable.
-
edit_map: If true, map will display a custom control what enable edit capabilities with map
Map object accepts other options scoped in :map_js_options key.
-
theme: CSS theme used to display. By default none is used
-
projection: Specify projection. Argument must be a valid OpenLayers.Projection JS object. See more on
-
units: Units for measure. By default: “‘m’”
-
maxResolution: maxResolution of the map, by default word length: “156543.0339”
-
meaxExtentd: Bound for projection. Must be valid OpenLayers.Bounds object. By default world length bound. See for more info.
After display objects, you can, ofc, call methods from openlayers api to instace js variable. For example
<% map = Ropenlayer::Openlayer::Map.new('group_map') %>
<%= raw javascript_tag map.to_js %>
<%= raw javascript_tag "#{ map.js_id }.setCenter(new OpenLayers.LonLat(0,0), 10);" %>
Will call the setCenter OpenLayer.Map JS method to map.js_id js instace object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/ropenlayer/openlayer/map.rb', line 80 def initialize(dom_id, = {}) @js_id = "#{ MAP_JS_PREFIX }_#{ dom_id }" @div_id = "#{ dom_id }" [:add_feature_callback] ||= DEFAULT_ADD_FEATURE_CALLBACK @options = @js_propierties = map_js_propierties([:map_js_options]) @layer_names = @options[:layers] || self.class.default_layers if [:default_layer] def_layer = @layer_names.delete([:default_layer]) @layer_names = @layer_names.push(def_layer).reverse if def_layer end @layers = Ropenlayer::Openlayer::Layer::Base.build_collection(self) @control_names = @options[:controls] || self.class.default_controls @controls = Ropenlayer::Openlayer::Control.build_collection(self) @latitude = @options[:latitude] || self.class.default_latitude @longitude = @options[:longitude] || self.class.default_longitude @zoom = @options[:zoom] || self.class.default_zoom @layers_select = @options[:layer_select].nil? or @options[:layer_select] @edit_map = @options[:edit_map] @markers_layer = Ropenlayer::Openlayer::Layer::ElementsMarker.new(self) @vectors_layer = Ropenlayer::Openlayer::Layer::ElementsVector.new(self) @draw_features = [:draw_features] || [] @js_notification_area = "#{ @js_id }_notification_area" @form_localizations_fields = {} @js_helper = Ropenlayer.js_helper end |
Instance Attribute Details
#control_names ⇒ Object
Returns the value of attribute control_names.
17 18 19 |
# File 'lib/ropenlayer/openlayer/map.rb', line 17 def control_names @control_names end |
#controls ⇒ Object
Returns the value of attribute controls.
18 19 20 |
# File 'lib/ropenlayer/openlayer/map.rb', line 18 def controls @controls end |
#div_id ⇒ Object (readonly)
Returns the value of attribute div_id.
6 7 8 |
# File 'lib/ropenlayer/openlayer/map.rb', line 6 def div_id @div_id end |
#draw_features ⇒ Object
Returns the value of attribute draw_features.
26 27 28 |
# File 'lib/ropenlayer/openlayer/map.rb', line 26 def draw_features @draw_features end |
#form_localizations_fields ⇒ Object
Returns the value of attribute form_localizations_fields.
24 25 26 |
# File 'lib/ropenlayer/openlayer/map.rb', line 24 def form_localizations_fields @form_localizations_fields end |
#js_helper ⇒ Object (readonly)
Returns the value of attribute js_helper.
13 14 15 |
# File 'lib/ropenlayer/openlayer/map.rb', line 13 def js_helper @js_helper end |
#js_id ⇒ Object (readonly)
Returns the value of attribute js_id.
5 6 7 |
# File 'lib/ropenlayer/openlayer/map.rb', line 5 def js_id @js_id end |
#js_notification_area ⇒ Object
Returns the value of attribute js_notification_area.
22 23 24 |
# File 'lib/ropenlayer/openlayer/map.rb', line 22 def js_notification_area @js_notification_area end |
#js_propierties ⇒ Object (readonly)
Returns the value of attribute js_propierties.
7 8 9 |
# File 'lib/ropenlayer/openlayer/map.rb', line 7 def js_propierties @js_propierties end |
#layer_names ⇒ Object (readonly)
Returns the value of attribute layer_names.
10 11 12 |
# File 'lib/ropenlayer/openlayer/map.rb', line 10 def layer_names @layer_names end |
#layers ⇒ Object (readonly)
Returns the value of attribute layers.
11 12 13 |
# File 'lib/ropenlayer/openlayer/map.rb', line 11 def layers @layers end |
#layers_select ⇒ Object
Returns the value of attribute layers_select.
15 16 17 |
# File 'lib/ropenlayer/openlayer/map.rb', line 15 def layers_select @layers_select end |
#markers_layer ⇒ Object
Returns the value of attribute markers_layer.
20 21 22 |
# File 'lib/ropenlayer/openlayer/map.rb', line 20 def markers_layer @markers_layer end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
8 9 10 |
# File 'lib/ropenlayer/openlayer/map.rb', line 8 def @options end |
#vectors_layer ⇒ Object
Returns the value of attribute vectors_layer.
21 22 23 |
# File 'lib/ropenlayer/openlayer/map.rb', line 21 def vectors_layer @vectors_layer end |
Class Method Details
.default_controls ⇒ Object
164 165 166 |
# File 'lib/ropenlayer/openlayer/map.rb', line 164 def self.default_controls [ :scale_line, :mouse_position, :pan_panel, :navigation, :zoom_panel ] end |
.default_latitude ⇒ Object
152 153 154 |
# File 'lib/ropenlayer/openlayer/map.rb', line 152 def self.default_latitude 4580313.35287 end |
.default_layers ⇒ Object
148 149 150 |
# File 'lib/ropenlayer/openlayer/map.rb', line 148 def self.default_layers [ :google_hybrid, :google_streets, :wms, :google_satellite, :google_physical, :osm ] end |
.default_longitude ⇒ Object
156 157 158 |
# File 'lib/ropenlayer/openlayer/map.rb', line 156 def self.default_longitude 263274.20626803 end |
.default_zoom ⇒ Object
160 161 162 |
# File 'lib/ropenlayer/openlayer/map.rb', line 160 def self.default_zoom 4 end |
Instance Method Details
#add_notification_area ⇒ Object
139 140 141 142 143 144 145 |
# File 'lib/ropenlayer/openlayer/map.rb', line 139 def add_notification_area %(// Notification area #{ Ropenlayer::Openlayer::Js.new_var(@js_notification_area, Ropenlayer::Openlayer::Js.new(@js_helper.create_xhtml_element('div', { :class => "'olMapNotificationArea'", :style => "'display: none;'", :id => "'#{ @js_notification_area }'" })).to_js) } ) end |
#map_js_propierties(map_js_options = {}) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/ropenlayer/openlayer/map.rb', line 118 def map_js_propierties( = {}) ||= {} propierties = {} propierties[:div] = "'#{ div_id }'" propierties[:controls] = "[]" propierties[:theme] = [:theme] || "'/stylesheets/ropenlayer.css'" propierties[:projection] = [:projection] || "#{ Ropenlayer::Openlayer::Js.new_method("OpenLayers.Projection", :args => ["'EPSG:900913'"]) }" propierties[:units] = [:units] || "'m'" propierties[:maxResolution] = [:units] || "156543.0339" propierties[:maxExtent] = [:maxExtent] || "#{ Ropenlayer::Openlayer::Js.new_method("OpenLayers.Bounds", :args => ["-20037508", "-20037508", "20037508", "20037508.34"]) }" propierties end |
#set_center ⇒ Object
134 135 136 137 |
# File 'lib/ropenlayer/openlayer/map.rb', line 134 def set_center %(// Setting center #{ Ropenlayer::Openlayer::Js.new("#{ @js_id }.setCenter(#{ Ropenlayer::Openlayer::Js.new_method("OpenLayers.LonLat", :args => [ @longitude, @latitude ]) }, #{ @zoom })").to_js } ) end |
#to_js ⇒ Object
Map to JS OpenLayer construtor
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/ropenlayer/openlayer/map.rb', line 169 def to_js %( // Ropenlayer::Openlayer::Map.to_s OpenLayers Cartographic JS project licensed under BSD~style license. More information can be found at http://openlayers.org/ #{ Ropenlayer::Openlayer::Js.new_var(@js_id, Ropenlayer::Openlayer::Js.new_method("OpenLayers.Map", :propierties => @js_propierties)).to_js } #{ add_notification_area } #{ @layers.map(&:to_js) } #{ @controls.map(&:to_js) } #{ set_center } #{ Ropenlayer::Openlayer::BoxControl::LayersSelect.new(self).to_js if @layers_select } #{ Ropenlayer::Openlayer::BoxControl::EditMap.new(self).to_js if @edit_map } #{ @vectors_layer.to_js } #{ @markers_layer.to_js } #{ Ropenlayer::Openlayer::Feature.draw_collection(self) if @draw_features.any? } ) end |