map_print 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/lib/map_print/core.rb +1 -0
- data/lib/map_print/exceptions.rb +3 -2
- data/lib/map_print/geo_json_handler.rb +21 -30
- data/lib/map_print/lat_lng.rb +2 -1
- data/lib/map_print/layer_handler.rb +1 -0
- data/lib/map_print/legend_handler.rb +40 -52
- data/lib/map_print/logger.rb +2 -0
- data/lib/map_print/png_handler.rb +2 -1
- data/lib/map_print/png_handlers/images.rb +1 -0
- data/lib/map_print/png_handlers/texts.rb +13 -5
- data/lib/map_print/providers/base.rb +1 -0
- data/lib/map_print/scalebar_handler.rb +7 -4
- data/lib/map_print/tiles/tile.rb +0 -42
- data/lib/map_print/tiles/tile_factory.rb +7 -9
- data/lib/map_print/validations/size.rb +10 -0
- data/lib/map_print/version.rb +1 -1
- data/map_print.gemspec +2 -2
- metadata +5 -5
- data/minimum_map.pdf +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b7f7ff077bdc65127a96cb126451677f4f8317f
|
4
|
+
data.tar.gz: 0fb0c8560df44020151c117670206c3593acc3a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4100a81072048511823a1ba2cd7b3e10779b24f0493cb7fe22cdf4d1455c255fc2ef767f3b079268e4a1dc0a845500d3c16752ecf37d4a8e4065f3b6ae02967
|
7
|
+
data.tar.gz: 75daabd87f3a99af524f38cd73806ad4c433efb39460d0e01f76992d4d4059131a6ba7f7141f96ad74103864d1547b03b810c9d78883d92f26ceecf502b141d6
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/lib/map_print/core.rb
CHANGED
@@ -58,6 +58,7 @@ module MapPrint
|
|
58
58
|
if @map[:geojson]
|
59
59
|
geojson_image = GeoJSONHandler.new(@map[:geojson], @map[:sw], @map[:ne], map_image.width, map_image.height).process
|
60
60
|
result = MiniMagick::Image.open(map_image.path).composite(geojson_image) do |c|
|
61
|
+
c.density 300
|
61
62
|
c.compose "atop"
|
62
63
|
end
|
63
64
|
result.write map_image.path
|
data/lib/map_print/exceptions.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module MapPrint
|
2
|
+
class FeatureNotImplemented < StandardError; end
|
3
|
+
|
2
4
|
class GeoJSONHandlerError < StandardError; end
|
3
5
|
class InvalidGeoJSON < GeoJSONHandlerError; end
|
4
6
|
class NoPointImage < GeoJSONHandlerError; end
|
5
7
|
class NoGeometryPresent < GeoJSONHandlerError; end
|
6
|
-
class FeatureNotImplemented < GeoJSONHandlerError; end
|
7
8
|
|
8
9
|
class LegendHandlerError < StandardError; end
|
9
10
|
class NoLegendData < LegendHandlerError; end
|
10
|
-
class
|
11
|
+
class InvalidLegendSize < LegendHandlerError; end
|
11
12
|
class MissingLayoutInformation < LegendHandlerError; end
|
12
13
|
|
13
14
|
class ScalebarHandlerError < StandardError; end
|
@@ -4,9 +4,9 @@ module MapPrint
|
|
4
4
|
class GeoJSONHandler
|
5
5
|
def initialize(geojson, sw, ne, width, height)
|
6
6
|
@top_lat = ne[:lat]
|
7
|
-
@total_lat = ne[:lat] - sw[:lat]
|
7
|
+
@total_lat = (ne[:lat] - sw[:lat])
|
8
8
|
@left_lng = sw[:lng]
|
9
|
-
@total_lng = ne[:lng] - sw[:lng]
|
9
|
+
@total_lng = (ne[:lng] - sw[:lng])
|
10
10
|
@height = height
|
11
11
|
@width = width
|
12
12
|
@geojson = JSON[geojson]
|
@@ -16,7 +16,7 @@ module MapPrint
|
|
16
16
|
|
17
17
|
def process
|
18
18
|
tempfile = Tempfile.new ['geojson', '.png']
|
19
|
-
`convert -size #{@width}x#{@height} xc:transparent #{tempfile.path}`
|
19
|
+
`convert -density 300 -size #{@width}x#{@height} xc:transparent #{tempfile.path}`
|
20
20
|
@image = MiniMagick::Image.new tempfile.path
|
21
21
|
|
22
22
|
draw_geojson
|
@@ -53,13 +53,13 @@ module MapPrint
|
|
53
53
|
when 'Polygon'
|
54
54
|
polygon(geometry, properties)
|
55
55
|
when 'MultiPoint'
|
56
|
-
|
56
|
+
raise FeatureNotImplemented.new("Please consider contributing!")
|
57
57
|
when 'MultiLineString'
|
58
|
-
|
58
|
+
raise FeatureNotImplemented.new("Please consider contributing!")
|
59
59
|
when 'MultiPolygon'
|
60
|
-
|
60
|
+
raise FeatureNotImplemented.new("Please consider contributing!")
|
61
61
|
when 'GeometryCollection'
|
62
|
-
|
62
|
+
raise FeatureNotImplemented.new("Please consider contributing!")
|
63
63
|
else
|
64
64
|
Logger.warn "Feature type '#{geometry['type']}' not implemented!"
|
65
65
|
end
|
@@ -74,22 +74,25 @@ module MapPrint
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def point(point, image_path)
|
77
|
-
x = get_x(point['coordinates'][
|
78
|
-
y = get_y(point['coordinates'][
|
77
|
+
x = get_x(point['coordinates'][0])
|
78
|
+
y = get_y(point['coordinates'][1])
|
79
79
|
|
80
80
|
point_image = MiniMagick::Image.open(image_path)
|
81
81
|
x -= point_image.width / 2
|
82
82
|
y -= point_image.height / 2
|
83
83
|
|
84
84
|
@image.composite(point_image) do |c|
|
85
|
+
c.density 300
|
85
86
|
c.geometry("+#{x}+#{y}")
|
86
87
|
end.write @image.path
|
87
88
|
end
|
88
89
|
|
89
90
|
def line_string(geometry, properties)
|
90
91
|
properties ||= {}
|
91
|
-
|
92
|
-
|
92
|
+
coords = geometry['coordinates']
|
93
|
+
coords = coords.first if coords.first.first.is_a?(Array)
|
94
|
+
points = coords.map do |coord|
|
95
|
+
"#{get_x(coord[0])},#{get_y(coord[1])}"
|
93
96
|
end
|
94
97
|
|
95
98
|
draw_command = (0..(points.length - 2)).map do |i|
|
@@ -97,37 +100,25 @@ module MapPrint
|
|
97
100
|
end.join(' ')
|
98
101
|
|
99
102
|
@image.combine_options do |c|
|
103
|
+
c.density 300
|
100
104
|
c.draw "#{draw_options(properties)} #{draw_command}"
|
101
105
|
end
|
102
106
|
end
|
103
107
|
|
104
108
|
def polygon(geometry, properties)
|
105
109
|
properties ||= {}
|
106
|
-
|
107
|
-
|
110
|
+
coords = geometry['coordinates']
|
111
|
+
coords = coords.first if coords.first.first.is_a?(Array)
|
112
|
+
points = coords.map do |coord|
|
113
|
+
"#{get_x(coord[0])},#{get_y(coord[1])}"
|
108
114
|
end
|
109
115
|
|
110
116
|
@image.combine_options do |c|
|
117
|
+
c.density 300
|
111
118
|
c.draw "#{draw_options(properties, false)} polygon #{points.join(' ')}"
|
112
119
|
end
|
113
120
|
end
|
114
121
|
|
115
|
-
def multi_point(geometry, properties)
|
116
|
-
raise FeatureNotImplemented.new("Please consider contributing!")
|
117
|
-
end
|
118
|
-
|
119
|
-
def multi_line_string(geometry, properties)
|
120
|
-
raise FeatureNotImplemented.new("Please consider contributing!")
|
121
|
-
end
|
122
|
-
|
123
|
-
def multi_polygon(geometry, properties)
|
124
|
-
raise FeatureNotImplemented.new("Please consider contributing!")
|
125
|
-
end
|
126
|
-
|
127
|
-
def geometry_collection(geometry, properties)
|
128
|
-
raise FeatureNotImplemented.new("Please consider contributing!")
|
129
|
-
end
|
130
|
-
|
131
122
|
def draw_options(properties, line=true)
|
132
123
|
options = ''
|
133
124
|
if properties['stroke'] || properties['stroke'].nil?
|
@@ -153,7 +144,7 @@ module MapPrint
|
|
153
144
|
end
|
154
145
|
|
155
146
|
def get_y(lat)
|
156
|
-
@height * (
|
147
|
+
@height * (@top_lat - lat) / @total_lat;
|
157
148
|
end
|
158
149
|
end
|
159
150
|
end
|
data/lib/map_print/lat_lng.rb
CHANGED
@@ -6,11 +6,12 @@ module MapPrint
|
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def distance_between(from, to)
|
9
|
-
return 0.0 if from == to
|
9
|
+
return 0.0 if from.lat == to.lat && from.lng == to.lng
|
10
10
|
|
11
11
|
distance_between_sphere(from, to)
|
12
12
|
end
|
13
13
|
|
14
|
+
private
|
14
15
|
def distance_between_sphere(from, to)
|
15
16
|
lat_sin = Math.sin(deg2rad(from.lat)) * Math.sin(deg2rad(to.lat))
|
16
17
|
lat_cos = Math.cos(deg2rad(from.lat)) * Math.cos(deg2rad(to.lat))
|
@@ -1,21 +1,32 @@
|
|
1
|
+
require_relative 'png_handlers/texts'
|
2
|
+
require_relative 'validations/size'
|
3
|
+
|
1
4
|
module MapPrint
|
2
5
|
class LegendHandler
|
6
|
+
include PngHandlers::Texts
|
7
|
+
include Validations::Size
|
8
|
+
|
3
9
|
def initialize(legend)
|
4
10
|
@legend = legend
|
5
11
|
validate_data!
|
12
|
+
@x_step = @legend[:size][:width] / @legend[:columns]
|
13
|
+
@y_step = @legend[:size][:height] / @legend[:rows]
|
14
|
+
@elements_in_block = @legend[:orientation] == 'vertical' ? @legend[:rows] : @legend[:columns]
|
15
|
+
@legend[:textbox_style] ||= {}
|
16
|
+
|
17
|
+
if @legend[:textbox_size]
|
18
|
+
@legend[:textbox_style][:size] = "#{@legend[:textbox_size][:width]}x#{@legend[:textbox_size][:height]}"
|
19
|
+
end
|
6
20
|
end
|
7
21
|
|
8
22
|
def process
|
9
23
|
size = @legend[:size]
|
10
24
|
tempfile = Tempfile.new ['legend', '.png']
|
11
|
-
`convert -size #{size[:width]}x#{size[:height]} xc:white #{tempfile.path}`
|
25
|
+
`convert -density 300 -size #{size[:width]}x#{size[:height]} xc:white #{tempfile.path}`
|
12
26
|
image = MiniMagick::Image.new tempfile.path
|
13
27
|
|
14
|
-
x_step = size[:width] / @legend[:columns]
|
15
|
-
y_step = size[:height] / @legend[:rows]
|
16
28
|
image_geometry = ''
|
17
29
|
textbox_offset = 0
|
18
|
-
text_size = "#{@legend[:textbox_size][:width]}x#{@legend[:textbox_size][:height]}" if @legend[:textbox_size]
|
19
30
|
|
20
31
|
if @legend[:image_size]
|
21
32
|
image_geometry += "#{@legend[:image_size][:width]}x#{@legend[:image_size][:height]}"
|
@@ -23,24 +34,23 @@ module MapPrint
|
|
23
34
|
end
|
24
35
|
textbox_offset += @legend[:textbox_offset] if @legend[:textbox_offset]
|
25
36
|
|
26
|
-
|
27
|
-
print_vertical(image, x_step, y_step, image_geometry, textbox_offset, text_size)
|
28
|
-
else
|
29
|
-
print_horizontal(image, x_step, y_step, image_geometry, textbox_offset, text_size)
|
30
|
-
end
|
37
|
+
print(image, image_geometry, textbox_offset)
|
31
38
|
image
|
32
39
|
end
|
33
40
|
|
34
41
|
private
|
35
42
|
def validate_data!
|
36
43
|
raise NoLegendData.new('No legend data present') if @legend.nil? || @legend.empty?
|
37
|
-
|
38
|
-
|
44
|
+
validate_size!(@legend[:size], InvalidLegendSize)
|
45
|
+
validate_layout!
|
46
|
+
end
|
47
|
+
|
48
|
+
def validate_layout!
|
39
49
|
raise MissingLayoutInformation.new('Missing column layout information') unless @legend[:columns]
|
40
50
|
raise MissingLayoutInformation.new('Missing rows layout information') unless @legend[:rows]
|
41
51
|
end
|
42
52
|
|
43
|
-
def
|
53
|
+
def print(legend_image, image_geometry, textbox_offset)
|
44
54
|
return unless @legend[:elements].is_a?(Array)
|
45
55
|
x = 0
|
46
56
|
y = 0
|
@@ -49,60 +59,38 @@ module MapPrint
|
|
49
59
|
@legend[:elements].each do |legend_item|
|
50
60
|
image_file = MiniMagick::Image.open(legend_item[:image])
|
51
61
|
result = legend_image.composite(image_file) do |c|
|
62
|
+
c.density 300
|
52
63
|
c.geometry image_geometry + "+#{x}+#{y}"
|
53
64
|
end
|
54
65
|
result.write legend_image.path
|
55
66
|
|
56
67
|
position = "#{x + textbox_offset},#{y}"
|
57
|
-
draw_text(legend_image, legend_item[:text], position,
|
68
|
+
draw_text(legend_image, legend_item[:text], position, @legend[:textbox_style])
|
58
69
|
|
59
|
-
|
60
|
-
x += x_step
|
61
|
-
y = 0
|
62
|
-
else
|
63
|
-
y += y_step
|
64
|
-
end
|
70
|
+
x, y = get_next_x_y(x, y, z)
|
65
71
|
z += 1
|
66
72
|
end
|
67
73
|
end
|
68
74
|
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
@legend[:elements].each do |legend_item|
|
76
|
-
image_file = MiniMagick::Image.open(legend_item[:image])
|
77
|
-
result = legend_image.composite(image_file) do |c|
|
78
|
-
c.geometry image_geometry + "+#{x}+#{y}"
|
79
|
-
end
|
80
|
-
result.write legend_image.path
|
81
|
-
|
82
|
-
position = "#{x + textbox_offset},#{y}"
|
83
|
-
draw_text(legend_image, legend_item[:text], position, text_size)
|
84
|
-
|
85
|
-
if z % @legend[:columns] == 0
|
86
|
-
y += y_step
|
87
|
-
x = 0
|
88
|
-
else
|
89
|
-
x += x_step
|
90
|
-
end
|
91
|
-
z += 1
|
75
|
+
def get_next_x_y(x, y, z)
|
76
|
+
if @legend[:orientation] == 'vertical'
|
77
|
+
y, x = next_step(y, x, @y_step, @x_step, z)
|
78
|
+
else
|
79
|
+
x, y = next_step(x, y, @x_step, @y_step, z)
|
92
80
|
end
|
81
|
+
|
82
|
+
return x, y
|
93
83
|
end
|
94
84
|
|
95
|
-
def
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
c.pointsize options[:pointsize] if options[:pointsize]
|
102
|
-
c.gravity options[:gravity] || 'NorthWest'
|
103
|
-
c.size text_size
|
104
|
-
c.draw "text #{position} '#{text}'"
|
85
|
+
def next_step(small_step_value, big_step_value, small_step, big_step, z)
|
86
|
+
if z % @elements_in_block == 0
|
87
|
+
big_step_value += big_step
|
88
|
+
small_step_value = 0
|
89
|
+
else
|
90
|
+
small_step_value += small_step
|
105
91
|
end
|
92
|
+
|
93
|
+
return small_step_value, big_step_value
|
106
94
|
end
|
107
95
|
end
|
108
96
|
end
|
data/lib/map_print/logger.rb
CHANGED
@@ -13,7 +13,7 @@ module MapPrint
|
|
13
13
|
def print
|
14
14
|
raise ParameterError.new('Missing png_options width attribute') unless @context.png_options && @context.png_options[:width]
|
15
15
|
raise ParameterError.new('Missing png_options height attribute') unless @context.png_options[:height]
|
16
|
-
`convert -size #{@context.png_options[:width]}x#{@context.png_options[:height]} xc:#{@context.png_options[:background_color] || 'transparent'} #{@context.output_path}`
|
16
|
+
`convert -density 300 -size #{@context.png_options[:width]}x#{@context.png_options[:height]} xc:#{@context.png_options[:background_color] || 'transparent'} #{@context.output_path}`
|
17
17
|
@png = MiniMagick::Image.new @context.output_path
|
18
18
|
|
19
19
|
print_map
|
@@ -53,6 +53,7 @@ module MapPrint
|
|
53
53
|
geometry += "+#{position[:x] || 0}+#{position[:y] || 0}" if position
|
54
54
|
|
55
55
|
result = @png.composite(image) do |c|
|
56
|
+
c.density 300
|
56
57
|
c.geometry geometry unless geometry.nil? || geometry.empty?
|
57
58
|
end
|
58
59
|
result.write @context.output_path
|
@@ -11,14 +11,22 @@ module MapPrint
|
|
11
11
|
|
12
12
|
def draw_text(png, text, position, options)
|
13
13
|
png.combine_options do |c|
|
14
|
-
c.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
c.gravity options[:gravity] || 'NorthWest'
|
14
|
+
c.density 300
|
15
|
+
sanitize_options(options).each do |option, value|
|
16
|
+
c.send option, value
|
17
|
+
end
|
19
18
|
c.draw "text #{position} '#{text}'"
|
20
19
|
end
|
21
20
|
end
|
21
|
+
|
22
|
+
def sanitize_options(options)
|
23
|
+
return {} unless options.is_a?(Hash)
|
24
|
+
options[:stroke] = options.delete :color if options[:color]
|
25
|
+
options[:fill] = options.delete :fill_color if options[:fill_color]
|
26
|
+
options[:gravity] ||= 'NorthWest'
|
27
|
+
options[:font] ||= 'Arial'
|
28
|
+
options
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
24
32
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
require_relative 'png_handlers/texts'
|
2
|
+
require_relative 'validations/size'
|
3
|
+
|
2
4
|
module MapPrint
|
3
5
|
class ScalebarHandler
|
4
|
-
include
|
6
|
+
include PngHandlers::Texts
|
7
|
+
include Validations::Size
|
5
8
|
|
6
9
|
ZOOM_METERS_PER_PIXEL = {
|
7
10
|
0 => 156543.03,
|
@@ -52,6 +55,7 @@ module MapPrint
|
|
52
55
|
|
53
56
|
y_position = size[:height] - (@scalebar[:bar_height] || 10) - @padding_bottom
|
54
57
|
image.combine_options do |c|
|
58
|
+
c.density 300
|
55
59
|
c.stroke 'black'
|
56
60
|
c.fill 'white'
|
57
61
|
c.draw "rectangle #{@padding_left},#{size[:height] - @padding_bottom} #{@padding_left + quarter},#{y_position}"
|
@@ -63,7 +67,7 @@ module MapPrint
|
|
63
67
|
c.draw "rectangle #{@padding_left + 3*quarter},#{size[:height] - @padding_bottom} #{@padding_left + 4*quarter},#{y_position}"
|
64
68
|
end
|
65
69
|
|
66
|
-
text_options = { pointsize:
|
70
|
+
text_options = { pointsize: 4, gravity: 'NorthWest' }
|
67
71
|
draw_text(image, "0", "#{@padding_left},#{@padding_top}", text_options)
|
68
72
|
draw_text(image, (pixels_for_distance/4).round(-2).to_s, "#{-quarter + @padding_left - @padding_right},#{@padding_top}", text_options.merge(gravity: 'North'))
|
69
73
|
draw_text(image, (pixels_for_distance/2).round(-2).to_s, "#{@padding_left - @padding_right},#{@padding_top}", text_options.merge(gravity: 'North'))
|
@@ -75,9 +79,8 @@ module MapPrint
|
|
75
79
|
private
|
76
80
|
def validate_data!
|
77
81
|
raise NoScalebarData.new('No scalebar data present') if @scalebar.nil? || @scalebar.empty?
|
78
|
-
raise InvalidScalebarSize.new('No scalebar width present') unless @scalebar[:size] && @scalebar[:size][:width]
|
79
|
-
raise InvalidScalebarSize.new('No scalebar height present') unless @scalebar[:size][:height]
|
80
82
|
raise InvalidScalebarZoom.new('Zoom must be between 0..18') unless (0..18).include?(@zoom)
|
83
|
+
validate_size!(@scalebar[:size], InvalidScalebarSize)
|
81
84
|
end
|
82
85
|
|
83
86
|
def get_distance_in_units
|
data/lib/map_print/tiles/tile.rb
CHANGED
@@ -3,37 +3,6 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
module MapPrint
|
5
5
|
class Tile
|
6
|
-
|
7
|
-
METERS_PER_PIXELS = {
|
8
|
-
0 => 26862156543.031,
|
9
|
-
1 => 8078271.521,
|
10
|
-
2 => 7739135.761,
|
11
|
-
3 => 6919567.881,
|
12
|
-
4 => 889783.941,
|
13
|
-
5 => 214891.9771,
|
14
|
-
6 => 222445.9801721,
|
15
|
-
7 => 161731222.991,
|
16
|
-
8 => 11611.5001,
|
17
|
-
9 => 52305.751,
|
18
|
-
10 => 152.871,
|
19
|
-
11 => 76.4371,
|
20
|
-
12 => 38.2191,
|
21
|
-
13 => 519.1091,
|
22
|
-
14 => 9.55461,
|
23
|
-
15 => 4.77731,
|
24
|
-
16 => 2.38871,
|
25
|
-
17 => 1.19431,
|
26
|
-
18 => 0.5972
|
27
|
-
}
|
28
|
-
|
29
|
-
class << self
|
30
|
-
|
31
|
-
def meters_per_pixel(zoom)
|
32
|
-
METERS_PER_PIXELS[zoom]
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
6
|
def initialize(x, y, z, base_url)
|
38
7
|
@base_url = base_url
|
39
8
|
@x = x
|
@@ -52,15 +21,6 @@ module MapPrint
|
|
52
21
|
end
|
53
22
|
end
|
54
23
|
|
55
|
-
def get_pixel_difference(lat_lng)
|
56
|
-
tile_lat_lng = tile_number_to_lat_lng
|
57
|
-
|
58
|
-
x_pixels = lat_lng.distance_to(LatLng.new(lat_lng.lat, tile_lat_lng[:lng])) / METERS_PER_PIXELS[@z]
|
59
|
-
y_pixels = lat_lng.distance_to(LatLng.new(tile_lat_lng[:lat], lat_lng.lng)) / METERS_PER_PIXELS[@z]
|
60
|
-
|
61
|
-
{ x: x_pixels, y: y_pixels }
|
62
|
-
end
|
63
|
-
|
64
24
|
def tile_number_to_lat_lng
|
65
25
|
n = 2.0 ** @z
|
66
26
|
lon_deg = @x / n * 360.0 - 180.0
|
@@ -99,7 +59,5 @@ module MapPrint
|
|
99
59
|
def folder_name
|
100
60
|
"cache/#{cache_name}/#{@z}/#{@x}"
|
101
61
|
end
|
102
|
-
|
103
62
|
end
|
104
|
-
|
105
63
|
end
|
@@ -61,19 +61,17 @@ module MapPrint
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def x_array
|
64
|
-
|
65
|
-
|
66
|
-
x1 = @sw_lat_lng.get_slippy_map_tile_number(@zoom)[:x]
|
67
|
-
x2 = @ne_lat_lng.get_slippy_map_tile_number(@zoom)[:x]
|
68
|
-
@x_array ||= x1 < x2 ? x1..x2 : (x2..x1).to_a
|
64
|
+
@x_array ||= get_tile_coord_array(:x)
|
69
65
|
end
|
70
66
|
|
71
67
|
def y_array
|
72
|
-
|
68
|
+
@y_array ||= get_tile_coord_array(:y)
|
69
|
+
end
|
73
70
|
|
74
|
-
|
75
|
-
|
76
|
-
|
71
|
+
def get_tile_coord_array(coord)
|
72
|
+
coord1 = @sw_lat_lng.get_slippy_map_tile_number(@zoom)[coord]
|
73
|
+
coord2 = @ne_lat_lng.get_slippy_map_tile_number(@zoom)[coord]
|
74
|
+
coord1 < coord2 ? coord1..coord2 : coord2..coord1
|
77
75
|
end
|
78
76
|
|
79
77
|
def tile_class
|
data/lib/map_print/version.rb
CHANGED
data/map_print.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ['Andreas Fast']
|
10
10
|
spec.email = ['andis.machine@gmail.com']
|
11
11
|
|
12
|
-
spec.summary = %q{Easily export maps to pdf}
|
13
|
-
spec.description = %q{MapPrint allows to export many map sources and GeoJSON objects to a pdf file, along with legend and text elements to create rich maps.}
|
12
|
+
spec.summary = %q{Easily export maps to pdf or png}
|
13
|
+
spec.description = %q{MapPrint allows to export many map sources and GeoJSON objects to a pdf/png file, along with legend and text elements to create rich maps.}
|
14
14
|
spec.homepage = 'http://github.com/afast/map_print'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: map_print
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Fast
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0.19'
|
139
|
-
description: MapPrint allows to export many map sources and GeoJSON objects to a pdf
|
139
|
+
description: MapPrint allows to export many map sources and GeoJSON objects to a pdf/png
|
140
140
|
file, along with legend and text elements to create rich maps.
|
141
141
|
email:
|
142
142
|
- andis.machine@gmail.com
|
@@ -182,9 +182,9 @@ files:
|
|
182
182
|
- lib/map_print/tiles/osm_tile.rb
|
183
183
|
- lib/map_print/tiles/tile.rb
|
184
184
|
- lib/map_print/tiles/tile_factory.rb
|
185
|
+
- lib/map_print/validations/size.rb
|
185
186
|
- lib/map_print/version.rb
|
186
187
|
- map_print.gemspec
|
187
|
-
- minimum_map.pdf
|
188
188
|
homepage: http://github.com/afast/map_print
|
189
189
|
licenses:
|
190
190
|
- MIT
|
@@ -209,5 +209,5 @@ rubyforge_project:
|
|
209
209
|
rubygems_version: 2.4.8
|
210
210
|
signing_key:
|
211
211
|
specification_version: 4
|
212
|
-
summary: Easily export maps to pdf
|
212
|
+
summary: Easily export maps to pdf or png
|
213
213
|
test_files: []
|
data/minimum_map.pdf
DELETED
Binary file
|