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.
121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/decidim/map/static_map.rb', line 121 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.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/decidim/map/static_map.rb', line 24 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.
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 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/decidim/map/static_map.rb', line 59 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.
105 106 107 108 109 110 111 112 113 |
# File 'lib/decidim/map/static_map.rb', line 105 def url_params(latitude:, longitude:, options: {}) { latitude:, longitude:, zoom: .fetch(:zoom, DEFAULT_ZOOM), width: .fetch(:width, DEFAULT_SIZE), height: .fetch(:height, DEFAULT_SIZE) } end |