Class: Decidim::Map::StaticMap
- Defined in:
- lib/decidim/map/static_map.rb
Overview
A base class for static mapping functionality, common to all static map services.
Direct Known Subclasses
Constant Summary collapse
- DEFAULT_SIZE =
300- DEFAULT_ZOOM =
15
Instance Attribute Summary
Attributes inherited from Utility
#configuration, #locale, #organization
Instance Method Summary collapse
-
#image_data(latitude:, longitude:, options: {}) ⇒ String
Creates a static map image data for the given map location with the given options.
-
#link(latitude:, longitude:, options: {}) ⇒ String
Creates a link for the static maps.
-
#url(latitude:, longitude:, options: {}) ⇒ String
Creates a URL that generates a static map image for the given map location with the given options.
-
#url_params(latitude:, longitude:, options: {}) ⇒ Hash
Prepares the URL params for the static map URL.
Methods inherited from Utility
Constructor Details
This class inherits a constructor from Decidim::Map::Utility
Instance Method Details
#image_data(latitude:, longitude:, options: {}) ⇒ String
Creates a static map image data for the given map location with the given options.
109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/decidim/map/static_map.rb', line 109 def image_data(latitude:, longitude:, options: {}) request_url = url( latitude:, longitude:, options: ) return "" unless request_url response = Faraday.get(request_url) do |req| req.headers["Referer"] = organization.host end response.body end |
#link(latitude:, longitude:, options: {}) ⇒ String
Creates a link for the static maps. This will point to an external map service where the user can further explore the given location.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/decidim/map/static_map.rb', line 20 def link(latitude:, longitude:, options: {}) zoom = .fetch(:zoom, 17) base_url = configuration.fetch( :link, "https://www.openstreetmap.org/" ) params = { mlat: latitude, mlon: longitude } fragment = "map=#{zoom}/#{latitude}/#{longitude}" URI.parse(base_url).tap do |uri| uri.query = URI.encode_www_form(params) uri.fragment = fragment end.to_s end |
#url(latitude:, longitude:, options: {}) ⇒ String
Creates a URL that generates a static map image for the given map location with the given options.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/decidim/map/static_map.rb', line 47 def url(latitude:, longitude:, options: {}) map_url = configuration.fetch(:url, nil) return unless map_url # If a lambda or proc is passed as the :static_map_url configuration. if map_url.respond_to?(:call) return map_url.call( latitude:, longitude:, options: ).to_s end # Fetch the "extra" parameters from the configured map URL configured_uri = URI.parse(map_url) configured_params = Rack::Utils.parse_nested_query( configured_uri.query ).symbolize_keys # Generate a base URL without the URL parameters configured_uri.query = nil configured_uri.fragment = nil base_url = configured_uri.to_s # Generate the actual parameters by combining the configured parameters # with the provider specific parameters, giving priority to the # dynamically set parameters. params = configured_params.merge( url_params( latitude:, longitude:, options: ) ) # Generate the actual URL to call with all the prepared parameters. URI.parse(base_url).tap do |uri| uri.query = URI.encode_www_form(params) end.to_s end |
#url_params(latitude:, longitude:, options: {}) ⇒ Hash
Prepares the URL params for the static map URL.
93 94 95 96 97 98 99 100 101 |
# File 'lib/decidim/map/static_map.rb', line 93 def url_params(latitude:, longitude:, options: {}) { latitude:, longitude:, zoom: .fetch(:zoom, DEFAULT_ZOOM), width: .fetch(:width, DEFAULT_SIZE), height: .fetch(:height, DEFAULT_SIZE) } end |