smappy 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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