smappy 0.0.1 → 0.0.2

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.
@@ -0,0 +1,228 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://tile.openstreetmap.org:80/0/0/0.png
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-length:
14
+ - '8538'
15
+ access-control-allow-origin:
16
+ - ! '*'
17
+ content-type:
18
+ - image/png
19
+ date:
20
+ - Wed, 21 Dec 2011 14:26:01 GMT
21
+ server:
22
+ - Apache/2.2.14 (Ubuntu)
23
+ etag:
24
+ - ! '"4e886769086b171ca1bfe072ae9cc2d1"'
25
+ expires:
26
+ - Tue, 27 Dec 2011 16:29:59 GMT
27
+ cache-control:
28
+ - max-age=525838
29
+ age:
30
+ - '112'
31
+ x-cache:
32
+ - HIT from konqi.openstreetmap.org
33
+ x-cache-lookup:
34
+ - HIT from konqi.openstreetmap.org:3128
35
+ via:
36
+ - 1.1 konqi.openstreetmap.org:3128 (squid/2.7.STABLE9)
37
+ body: !binary |-
38
+ iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAkFBMVEW10NC5
39
+ 0dC80tG+1NK+1NTA09LA1NLB1dTF1dLE1tXG2NXI1tPI1tXJ2dbM2dbK2djM
40
+ 2tjO3NnQ2dTW2dfQ29jR3drS3tzU29nU3trV3tzY39rY39zd39vV4NrW4NzY
41
+ 4NvZ4d3c4t7d5N7d4+De5ODg4t/g5N/g4+Dh5eHk5uLl6OLm6OTo6OPq6uXs
42
+ 6uXt7OZLETx0AAAghUlEQVR4nO09C5urqJJgzsTRHTu6e+iNe/e4mPbOBUzh
43
+ //93y8P3W2PSfWe6Zr7TVlBEKOoNIPQN3/AN3/AN3/AN3/AN3/A8wCRmNP3s
44
+ Vnwa4ICBAskY/uymfAI41z9SXshCqv8L9tmteSYEJ5cEQf9Xwu5//knU+DP2
45
+ J6Vp+BktewU4jEJBCyE5PbV+xoGifBCiAM7zAgoZf1oLnwuRGuJUCv21FBo6
46
+ x945TBkB9e2aB4D6I7xPbObzgKmvM58oc/WPW/9+YhlIoUul7QAJ/BOb+SQI
47
+ pSZ0w+RA8zqQ1BZkl1MiUz36RV0Of0EKYGpYy/EHA5Igh3Lq5TlGVAhL+wo4
48
+ 45nz2a09Ghw1583Qakmn/tP/AKLq4sZYASG+VwVACMvCkCNy/uxGHwnMjnmb
49
+ Ahhm+lcqFGsUESsLBDEsMgUcIvfdXa65D3THM88HpeOZyS3tHJeFYGqSg5KH
50
+ UhS8pglVrhiBUoRSkKdzpKbEdeubsKIb+uUYiI+iD1kO/d38ySk4SChhUFOE
51
+ bF0IfQPTUkFsfRX9x1fUo9PMBXm3hG94nboO3NDIu1Lsmc9v4Vd7sYWeHaVb
52
+ Rf/8XQ2/OySBBKPw0wjjAxS/YzeuPohVHxi73FyU323/NDgX5k+05TUORmf2
53
+ Qd0MZ7T+saohRERuJqeDACstJ3KVCqj0XMItraeqV0Zov8Yt05w0ikakJI04
54
+ RV7KKeWspUf6dStUl94O/rKVcNIazhVH7I1qZqhZoERJi/MVBjq4ogTOyFSN
55
+ 2EWn3k8poeA7xH1TUmSUC2DFXQc22GsgMYPJSOLVsvANdUccYIgLmUxUiAPm
56
+ 0cR8ZvOtSeaiDy9gDI8rUUqwwKYZdRCcP1DKtXzjStll1t5XEwAlDErB1/nT
57
+ 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
228
+ http_version: '1.0'
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Smappy::Location do
4
+ let(:location) { Smappy::Location.new(50.9985099, 5.857652) }
5
+
6
+ describe '#to_tile' do
7
+ it 'returns a tile at the default zoomlevel' do
8
+ tile = location.to_tile
9
+ tile.zoomlevel.should == 0
10
+ end
11
+
12
+ it 'returns a tile at the specified zoomlevel' do
13
+ tile = location.to_tile zoomlevel: 15
14
+ tile.zoomlevel.should == 15
15
+ end
16
+
17
+ it 'returns a tile with the correct position at the specified zoomlevel' do
18
+ tile = location.to_tile zoomlevel: 15
19
+ [tile.x, tile.y].should == [16917, 10970]
20
+ end
21
+ end
22
+
23
+ describe '#position_on_map' do
24
+ it 'returns the coordinates of the position on the given map' do
25
+ map = Smappy::StaticMap.new(center: [50.9985099, 5.857652], zoomlevel: 15)
26
+ position = location.position_on_map(map)
27
+ position.should == [250, 175]
28
+ end
29
+ end
30
+
31
+ describe '#position_on_tile' do
32
+ it 'returns the coordinates of the position of the location within the given tile' do
33
+ tile = location.to_tile zoomlevel: 15
34
+ position = location.position_on_tile tile
35
+ position.should == [45, 52]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Smappy::Marker do
4
+ let(:marker) { Smappy::Marker.new(50.9985099, 5.857652) }
5
+
6
+ describe '#initialize' do
7
+ it 'sets a default image' do
8
+ marker.image.should == File.expand_path('../../../markers/information_marker.png', __FILE__)
9
+ end
10
+
11
+ it 'sets a default offset' do
12
+ marker.offset.should == [-16, -37]
13
+ end
14
+ end
15
+
16
+ describe '#width' do
17
+ it 'returns the width of the marker image' do
18
+ marker.width.should == 32
19
+ end
20
+ end
21
+
22
+ describe '#height' do
23
+ it 'returns the height of the marker image' do
24
+ marker.height.should == 37
25
+ end
26
+ end
27
+
28
+ describe '#position_on_map' do
29
+ let(:map) { Smappy::StaticMap.new(center: [50.9985099, 5.857652], zoomlevel: 15) }
30
+
31
+ it 'returns the coordinates of the marker on the given map' do
32
+ marker.position_on_map(map).should == [234, 138]
33
+ end
34
+
35
+ it 'returns the coordinates of the marker on the given map offset by the specified offset' do
36
+ marker.offset = [0, 0]
37
+ marker.position_on_map(map).should == [250, 175]
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+
3
+ describe Smappy::StaticMap do
4
+ let(:map) { Smappy::StaticMap.new center: [50.9985099, 5.857652], zoomlevel: 15 }
5
+
6
+ describe '#initialize' do
7
+ it 'sets a default width' do
8
+ Smappy::StaticMap.new.width.should == 500
9
+ end
10
+
11
+ it 'sets a default height' do
12
+ Smappy::StaticMap.new.height.should == 350
13
+ end
14
+
15
+ it 'sets a default zoomlevel' do
16
+ Smappy::StaticMap.new.zoomlevel.should == 0
17
+ end
18
+
19
+ it 'sets a default center' do
20
+ map = Smappy::StaticMap.new
21
+ center = map.center
22
+ center.latitude.should == 0.0
23
+ center.longitude.should == 0.0
24
+ end
25
+
26
+ it 'sets the width' do
27
+ Smappy::StaticMap.new(width: 200).width.should == 200
28
+ end
29
+
30
+ it 'sets the height' do
31
+ Smappy::StaticMap.new(height: 200).height.should == 200
32
+ end
33
+
34
+ it 'sets the zoomlevel' do
35
+ Smappy::StaticMap.new(zoomlevel: 1).zoomlevel.should == 1
36
+ end
37
+
38
+ it 'sets the center' do
39
+ map = Smappy::StaticMap.new(center: [50.9985099, 5.857652])
40
+ center = map.center
41
+ center.latitude.should == 50.9985099
42
+ center.longitude.should == 5.857652
43
+ end
44
+ end
45
+
46
+ describe '#center=' do
47
+ it 'sets the center' do
48
+ map.center = Smappy::Location.new(50.9985099, 5.857652)
49
+ center = map.center
50
+
51
+ center.latitude.should == 50.9985099
52
+ center.longitude.should == 5.857652
53
+ end
54
+
55
+ it 'accepts an array' do
56
+ map.center = [50.9985099, 5.857652]
57
+ center = map.center
58
+
59
+ center.latitude.should == 50.9985099
60
+ center.longitude.should == 5.857652
61
+ end
62
+ end
63
+
64
+ describe '#center_tile' do
65
+ it 'returns the tile that contains the center of the map' do
66
+ tile = map.center_tile
67
+ [tile.x, tile.y].should == [16917, 10970]
68
+ end
69
+ end
70
+
71
+ describe '#tile_offset' do
72
+ it 'returns the offset for the placement of tiles' do
73
+ map.tile_offset.should == [-83, -76]
74
+ end
75
+ end
76
+
77
+ describe '#tile_options' do
78
+ let(:options) { map.tile_options }
79
+
80
+ it 'returns a hash' do
81
+ options.should be_a Hash
82
+ end
83
+
84
+ it 'includes the zoomlevel' do
85
+ map.zoomlevel = 11
86
+ options[:zoomlevel].should == 11
87
+ end
88
+
89
+ it 'includes the url_template' do
90
+ map.tile_url_template = 'http://mt1.google.com/vt/x=%{x}&y=%{y}&z=%{zoomlevel}'
91
+ options[:url_template].should == 'http://mt1.google.com/vt/x=%{x}&y=%{y}&z=%{zoomlevel}'
92
+ end
93
+
94
+ it 'does not include nil values' do
95
+ map.tile_url_template = nil
96
+ options.should_not have_key(:url_template)
97
+ end
98
+ end
99
+
100
+ describe '#tiles' do
101
+ let(:small_map) { Smappy::StaticMap.new center: [50.9985099, 5.857652], zoomlevel: 15, width: 220, height: 170 }
102
+
103
+ it 'contains the tiles that are used by this map' do
104
+ map.tiles.should have(6).tiles
105
+ small_map.tiles.should have(4).tiles
106
+ end
107
+
108
+ it 'contains tiles that use the tile_options' do
109
+ map.stub(:tile_options).and_return({ zoomlevel: 10, url_template: 'http://mt1.google.com/vt/x=%{x}&y=%{y}&z=%{zoomlevel}' })
110
+ map.tiles.all? do |tile|
111
+ tile.zoomlevel.should == 10
112
+ tile.url_template.should == 'http://mt1.google.com/vt/x=%{x}&y=%{y}&z=%{zoomlevel}'
113
+ end
114
+ end
115
+ end
116
+
117
+ describe '#to_image' do
118
+ use_vcr_cassette 'StaticMap#to_image'
119
+
120
+ let(:map) { Smappy::StaticMap.new(center: [50.9985099, 5.857652], zoomlevel: 15) }
121
+
122
+ it 'returns an image of the specified size' do
123
+ img = map.to_image
124
+ [img.columns, img.rows].should == [500, 350]
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ describe Smappy::Tile do
4
+ let(:tile) { Smappy::Tile.new }
5
+
6
+ describe '#initialize' do
7
+ it 'sets a default zoomlevel' do
8
+ tile.zoomlevel.should == 0
9
+ end
10
+
11
+ it 'sets the zoomlevel' do
12
+ Smappy::Tile.new(zoomlevel: 1).zoomlevel.should == 1
13
+ end
14
+
15
+ it 'sets a default x-coordinate' do
16
+ tile.x.should == 0
17
+ end
18
+
19
+ it 'sets the x-coordinate' do
20
+ Smappy::Tile.new(x: 1).x.should == 1
21
+ end
22
+
23
+ it 'sets a default y-coordinate' do
24
+ tile.y.should == 0
25
+ end
26
+
27
+ it 'sets the y-coordinate' do
28
+ Smappy::Tile.new(y: 1).y.should == 1
29
+ end
30
+
31
+ it 'sets a default url_template' do
32
+ tile.url_template.should == 'http://tile.openstreetmap.org/%{zoomlevel}/%{x}/%{y}.png'
33
+ end
34
+
35
+ it 'sets the url_template' do
36
+ tile = Smappy::Tile.new(url_template: 'http://c.tah.openstreetmap.org/Tiles/tile/%{zoomlevel}/%{x}/%{y}.png')
37
+ tile.url_template.should == 'http://c.tah.openstreetmap.org/Tiles/tile/%{zoomlevel}/%{x}/%{y}.png'
38
+ end
39
+ end
40
+
41
+ describe '#position_on_map' do
42
+ let(:map) { Smappy::StaticMap.new center: [50.9985099, 5.857652], zoomlevel: 15 }
43
+
44
+ it 'returns the coordinates of the tile on the map' do
45
+ tile = Smappy::Tile.new x: 16917, y: 10970, zoomlevel: 15
46
+ tile.position_on_map(map).should == [205, 123]
47
+
48
+ tile = Smappy::Tile.new x: 16918, y: 10970, zoomlevel: 15
49
+ tile.position_on_map(map).should == [461, 123]
50
+ end
51
+ end
52
+
53
+ describe '#to_url' do
54
+ it 'returns the URL to the tile' do
55
+ tile.to_url.should == "http://tile.openstreetmap.org/0/0/0.png"
56
+ end
57
+
58
+ it 'replaces the zoomlevel in the URL' do
59
+ tile.stub(:zoomlevel).and_return(1)
60
+ tile.to_url.should == "http://tile.openstreetmap.org/1/0/0.png"
61
+ end
62
+
63
+ it 'replaces the x-coordinate in the URL' do
64
+ tile.stub(:x).and_return(1)
65
+ tile.to_url.should == "http://tile.openstreetmap.org/0/1/0.png"
66
+ end
67
+
68
+ it 'replaces the y-coordinate in the URL' do
69
+ tile.stub(:y).and_return(1)
70
+ tile.to_url.should == "http://tile.openstreetmap.org/0/0/1.png"
71
+ end
72
+
73
+ it 'parses the url_template' do
74
+ tile.url_template = 'http://c.tah.openstreetmap.org/Tiles/tile/%{zoomlevel}/%{x}/%{y}.png'
75
+ tile.to_url.should == 'http://c.tah.openstreetmap.org/Tiles/tile/0/0/0.png'
76
+ end
77
+ end
78
+
79
+ describe '#to_image' do
80
+ use_vcr_cassette 'Tile#to_image'
81
+
82
+ it 'returns the image at the url' do
83
+ img = tile.to_image
84
+ [img.columns, img.rows].should == [256, 256]
85
+ end
86
+ end
87
+
88
+ describe '#x' do
89
+ it 'returns the floored x-coordinate' do
90
+ Smappy::Tile.new(x: 1.6).x.should == 1
91
+ end
92
+ end
93
+
94
+ describe '#y' do
95
+ it 'returns the floored y-coordinate' do
96
+ Smappy::Tile.new(y: 1.6).y.should == 1
97
+ end
98
+ end
99
+ end