map-kit-wrapper 0.0.4 → 0.0.5
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.
- data/README.md +8 -11
- data/lib/map-kit-wrapper/core_location_data_types.rb +53 -6
- data/lib/map-kit-wrapper/map_kit_data_types.rb +264 -33
- data/lib/map-kit-wrapper/map_type.rb +26 -0
- data/lib/map-kit-wrapper/map_view.rb +72 -18
- data/lib/map-kit-wrapper/test_suite_delegate.rb +9 -0
- data/lib/map-kit-wrapper/version.rb +5 -1
- data/lib/map-kit-wrapper/zoom_level.rb +102 -9
- data/spec/lib/core_location_data_types_spec.rb +1 -1
- data/spec/lib/map_kit_data_types_spec.rb +6 -6
- data/spec/lib/map_view_spec.rb +5 -5
- metadata +2 -2
data/README.md
CHANGED
@@ -29,11 +29,8 @@ class FooViewController < UIViewController
|
|
29
29
|
map = MapView.new
|
30
30
|
map.frame = self.view.frame
|
31
31
|
map.delegate = self
|
32
|
-
region = CoordinateRegion.new([56, 10.6], [3.1, 3.1])
|
33
|
-
map.
|
34
|
-
# Alternatively use set_region
|
35
|
-
# map.set_region(region, :animated => true)
|
36
|
-
map.showsUserLocation = true
|
32
|
+
map.region = CoordinateRegion.new([56, 10.6], [3.1, 3.1])
|
33
|
+
map.shows_user_location = true
|
37
34
|
view.addSubview(map)
|
38
35
|
end
|
39
36
|
|
@@ -150,7 +147,7 @@ Methods on `LocationCoordinate`
|
|
150
147
|
=> [10, 15]
|
151
148
|
>> lc.to_h
|
152
149
|
=> {:latitude => 10, :longitude => 15}
|
153
|
-
>> lc.
|
150
|
+
>> lc.api
|
154
151
|
=> CLLocationCoordinate2D
|
155
152
|
```
|
156
153
|
|
@@ -187,7 +184,7 @@ Methods on `CoordinateSpan`
|
|
187
184
|
=> [1, 2]
|
188
185
|
>> cs.to_h
|
189
186
|
=> {:latitude_delta => 1, :longitude_delta => 2}
|
190
|
-
>> cs.
|
187
|
+
>> cs.api
|
191
188
|
=> MKCoordinateSpan
|
192
189
|
```
|
193
190
|
|
@@ -215,7 +212,7 @@ Methods on `CoordinateRegion`
|
|
215
212
|
=> CoordinateSpan([3.1, 5.1])
|
216
213
|
>> cs.to_h
|
217
214
|
=> {:center => {:latitude => 56, :longitude => 10.6}, :span => {:latitude_delta => 3.1, :longitude_delta => 5.1}}
|
218
|
-
>> cs.
|
215
|
+
>> cs.api
|
219
216
|
=> MKCoordinateRegion
|
220
217
|
```
|
221
218
|
|
@@ -244,7 +241,7 @@ Methods on `MapPoint`
|
|
244
241
|
=> [50, 45]
|
245
242
|
>> mp.to_h
|
246
243
|
=> {:x => 50, :y => 45}
|
247
|
-
>> mp.
|
244
|
+
>> mp.api
|
248
245
|
=> MKMapPoint
|
249
246
|
```
|
250
247
|
|
@@ -273,7 +270,7 @@ Methods on `MapSize`
|
|
273
270
|
=> [50, 45]
|
274
271
|
>> ms.to_h
|
275
272
|
=> {:width => 50, :height => 45}
|
276
|
-
>> ms.
|
273
|
+
>> ms.api
|
277
274
|
=> MKMapSize
|
278
275
|
```
|
279
276
|
|
@@ -302,7 +299,7 @@ Methods on `MapRect`
|
|
302
299
|
=> MapSize([10, 12])
|
303
300
|
>> mr.to_h
|
304
301
|
=> {:origin => {:x => 2, :y => 3}, :size => {:width => 10, :height => 12}}
|
305
|
-
>> mr.
|
302
|
+
>> mr.api
|
306
303
|
=> MKMapRect
|
307
304
|
```
|
308
305
|
|
@@ -1,19 +1,34 @@
|
|
1
|
+
##
|
2
|
+
# Wrappers for Core Location
|
3
|
+
#
|
1
4
|
module CoreLocation
|
5
|
+
|
2
6
|
##
|
3
7
|
# Wrappers for the Core Location Data Types
|
4
8
|
# http://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CoreLocationDataTypesRef/Reference/reference.html
|
5
9
|
module DataTypes
|
10
|
+
|
6
11
|
##
|
7
12
|
# Ruby wrapper for CLLocationCoordinate2D
|
8
13
|
class LocationCoordinate
|
14
|
+
|
15
|
+
##
|
16
|
+
# Attribute reader
|
17
|
+
#
|
9
18
|
attr_reader :latitude, :longitude
|
10
19
|
|
11
20
|
##
|
12
|
-
# LocationCoordinate
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
21
|
+
# Initializer for LocationCoordinate
|
22
|
+
#
|
23
|
+
# * *Args* :
|
24
|
+
# The initializer takes a variety of arguments
|
25
|
+
#
|
26
|
+
# LocationCoordinate.new(1,2)
|
27
|
+
# LocationCoordinate.new([1,2])
|
28
|
+
# LocationCoordinate.new({:latitude => 1, :longitude => 2})
|
29
|
+
# LocationCoordinate.new(LocationCoordinate)
|
30
|
+
# LocationCoordinate.new(CLLocationCoordinate2D)
|
31
|
+
#
|
17
32
|
def initialize(*args)
|
18
33
|
args.flatten!
|
19
34
|
self.latitude, self.longitude =
|
@@ -31,26 +46,58 @@ module CoreLocation
|
|
31
46
|
end
|
32
47
|
end
|
33
48
|
|
34
|
-
|
49
|
+
##
|
50
|
+
# Returns the wrapped iOS CLLocationCoordinate2D object
|
51
|
+
def api
|
35
52
|
CLLocationCoordinate2DMake(@latitude, @longitude)
|
36
53
|
end
|
37
54
|
|
55
|
+
##
|
56
|
+
# Setter for latitude
|
57
|
+
#
|
58
|
+
# * *Args* :
|
59
|
+
# - +latitude+ -> Int or Float
|
60
|
+
#
|
38
61
|
def latitude=(latitude)
|
39
62
|
@latitude = latitude.to_f
|
40
63
|
end
|
41
64
|
|
65
|
+
##
|
66
|
+
# Setter for longitude
|
67
|
+
#
|
68
|
+
# * *Args* :
|
69
|
+
# - +longitude+ -> Int or Float
|
70
|
+
#
|
42
71
|
def longitude=(longitude)
|
43
72
|
@longitude = longitude.to_f
|
44
73
|
end
|
45
74
|
|
75
|
+
##
|
76
|
+
# Get self as an Array
|
77
|
+
#
|
78
|
+
# * *Returns* :
|
79
|
+
# - <tt>[latitude, longitude]</tt>
|
80
|
+
#
|
46
81
|
def to_a
|
47
82
|
[@latitude, @longitude]
|
48
83
|
end
|
49
84
|
|
85
|
+
##
|
86
|
+
# Get self as a Hash
|
87
|
+
#
|
88
|
+
# * *Returns* :
|
89
|
+
# - <tt>{:latitude => latitude, :longitude => longitude}</tt>
|
90
|
+
#
|
50
91
|
def to_h
|
51
92
|
{:latitude => @latitude, :longitude => @longitude}
|
52
93
|
end
|
53
94
|
|
95
|
+
##
|
96
|
+
# Get self as a String
|
97
|
+
#
|
98
|
+
# * *Returns* :
|
99
|
+
# - <tt>"{:latitude => latitude, :longitude => longitude}"</tt>
|
100
|
+
#
|
54
101
|
def to_s
|
55
102
|
to_h.to_s
|
56
103
|
end
|
@@ -1,20 +1,35 @@
|
|
1
1
|
#= require core_location_data_types
|
2
2
|
|
3
|
+
##
|
4
|
+
# Wrappers for MapKit
|
5
|
+
#
|
3
6
|
module MapKit
|
7
|
+
|
4
8
|
##
|
5
9
|
# Wrappers for the Map Kit Data Types
|
6
10
|
# http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MapKitDataTypesReference/Reference/reference.html
|
7
11
|
module DataTypes
|
12
|
+
|
8
13
|
##
|
9
14
|
# Wrapper for MKCoordinateSpan
|
10
15
|
class CoordinateSpan
|
16
|
+
|
17
|
+
##
|
18
|
+
# Attribute reader
|
19
|
+
#
|
11
20
|
attr_reader :latitude_delta, :longitude_delta
|
21
|
+
|
12
22
|
##
|
13
|
-
# CoordinateSpan
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
23
|
+
# Initializer for CoordinateSpan
|
24
|
+
#
|
25
|
+
# * *Args* :
|
26
|
+
# The initializer takes a variety of arguments
|
27
|
+
#
|
28
|
+
# CoordinateSpan.new(1,2)
|
29
|
+
# CoordinateSpan.new([1,2])
|
30
|
+
# CoordinateSpan.new({:latitude_delta => 1, :longitude_delta => 2})
|
31
|
+
# CoordinateSpan.new(CoordinateSpan)
|
32
|
+
# CoordinateSpan.new(MKCoordinateSpan)
|
18
33
|
def initialize(*args)
|
19
34
|
args.flatten!
|
20
35
|
self.latitude_delta, self.longitude_delta =
|
@@ -34,42 +49,91 @@ module MapKit
|
|
34
49
|
end
|
35
50
|
end
|
36
51
|
|
37
|
-
|
52
|
+
##
|
53
|
+
# Returns the wrapped iOS MKCoordinateSpan object
|
54
|
+
#
|
55
|
+
# * *Returns* :
|
56
|
+
# - A MKCoordinateSpan representation of self
|
57
|
+
#
|
58
|
+
def api
|
38
59
|
MKCoordinateSpanMake(@latitude_delta, @longitude_delta)
|
39
60
|
end
|
40
61
|
|
62
|
+
##
|
63
|
+
# Setter for latitude_delta
|
64
|
+
#
|
65
|
+
# * *Args* :
|
66
|
+
# - +delta+ -> Int or Float
|
67
|
+
#
|
41
68
|
def latitude_delta=(delta)
|
42
69
|
@latitude_delta = delta.to_f
|
43
70
|
end
|
44
71
|
|
72
|
+
##
|
73
|
+
# Setter for longitude_delta
|
74
|
+
#
|
75
|
+
# * *Args* :
|
76
|
+
# - +delta+ -> Int or Float
|
77
|
+
#
|
45
78
|
def longitude_delta=(delta)
|
46
79
|
@longitude_delta = delta.to_f
|
47
80
|
end
|
48
81
|
|
82
|
+
##
|
83
|
+
# Get self as an Array
|
84
|
+
#
|
85
|
+
# * *Returns* :
|
86
|
+
# - <tt>[latitude_delta, longitude_delta]</tt>
|
87
|
+
#
|
49
88
|
def to_a
|
50
89
|
[@latitude_delta, @longitude_delta]
|
51
90
|
end
|
52
91
|
|
92
|
+
##
|
93
|
+
# Get self as a Hash
|
94
|
+
#
|
95
|
+
# * *Returns* :
|
96
|
+
# - <tt>{:latitude_delta => latitude_delta, :longitude_delta => longitude_delta}</tt>
|
97
|
+
#
|
53
98
|
def to_h
|
54
99
|
{:latitude_delta => @latitude_delta, :longitude_delta => @longitude_delta}
|
55
100
|
end
|
56
101
|
|
102
|
+
##
|
103
|
+
# Get self as a String
|
104
|
+
#
|
105
|
+
# * *Returns* :
|
106
|
+
# - <tt>"{:latitude_delta => latitude_delta, :longitude_delta => longitude_delta}"</tt>
|
107
|
+
#
|
57
108
|
def to_s
|
58
109
|
to_h.to_s
|
59
110
|
end
|
60
111
|
end
|
112
|
+
|
61
113
|
##
|
62
114
|
# Wrapper for MKCoordinateRegion
|
63
115
|
class CoordinateRegion
|
64
116
|
include CoreLocation::DataTypes
|
117
|
+
|
118
|
+
##
|
119
|
+
# Attribute reader
|
120
|
+
#
|
65
121
|
attr_reader :center, :span
|
122
|
+
|
66
123
|
##
|
67
|
-
# CoordinateRegion
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
124
|
+
# Initializer for CoordinateRegion
|
125
|
+
#
|
126
|
+
# * *Args* :
|
127
|
+
# The initializer takes a variety of arguments
|
128
|
+
#
|
129
|
+
# CoordinateRegion.new(CoordinateRegion)
|
130
|
+
# CoordinateRegion.new(MKCoordinateRegion)
|
131
|
+
# CoordinateRegion.new([56, 10.6], [3.1, 3.1])
|
132
|
+
# CoordinateRegion.new({:center => {:latitude => 56, :longitude => 10.6},
|
133
|
+
# :span => {:latitude_delta => 3.1, :longitude_delta => 3.1}}
|
134
|
+
# CoordinateRegion.new(LocationCoordinate, CoordinateSpan)
|
135
|
+
# CoordinateRegion.new(CLLocationCoordinate2D, MKCoordinateSpan)
|
136
|
+
#
|
73
137
|
def initialize(*args)
|
74
138
|
self.center, self.span =
|
75
139
|
case args.size
|
@@ -86,35 +150,76 @@ module MapKit
|
|
86
150
|
end
|
87
151
|
end
|
88
152
|
|
89
|
-
|
90
|
-
|
153
|
+
##
|
154
|
+
# Returns the wrapped iOS MKCoordinateRegion object
|
155
|
+
#
|
156
|
+
# * *Returns* :
|
157
|
+
# - A MKCoordinateRegion representation of self
|
158
|
+
#
|
159
|
+
def api
|
160
|
+
MKCoordinateRegionMake(@center.api, @span.api)
|
91
161
|
end
|
92
162
|
|
163
|
+
##
|
164
|
+
# Assigns a CoreLocation::DataTypes::LocationCoordinate to center.
|
165
|
+
#
|
166
|
+
# * *Args* :
|
167
|
+
# - +center+ -> accepts a variety of argument types. See docs for the CoreLocation::DataTypes::LocationCoordinate initializer
|
168
|
+
#
|
93
169
|
def center=(center)
|
94
170
|
@center = LocationCoordinate.new(center)
|
95
171
|
end
|
96
172
|
|
173
|
+
##
|
174
|
+
# Assigns a MapKit::DataTypes::CoordinateSpan to span
|
175
|
+
#
|
176
|
+
# * *Args* :
|
177
|
+
# - +span+ -> accepts a variety of argument types. See docs for the MapKit::DataTypes::CoordinateSpan initializer
|
178
|
+
#
|
97
179
|
def span=(span)
|
98
180
|
@span = CoordinateSpan.new(span)
|
99
181
|
end
|
100
182
|
|
183
|
+
##
|
184
|
+
# Get self as a Hash
|
185
|
+
#
|
186
|
+
# * *Returns* :
|
187
|
+
# - <tt>{:center => {:latitude => latitude, :longitude => longitude}, :span => {:latitude_delta => latitude_delta, :longitude_delta => longitude_delta}}</tt>
|
188
|
+
#
|
101
189
|
def to_h
|
102
190
|
{:center => @center.to_h, :span => @span.to_h}
|
103
191
|
end
|
104
192
|
|
193
|
+
##
|
194
|
+
# Get self as a String
|
195
|
+
#
|
196
|
+
# * *Returns* :
|
197
|
+
# - <tt>"{:center => {:latitude => latitude, :longitude => longitude}, :span => {:latitude_delta => latitude_delta, :longitude_delta => longitude_delta}}"</tt>
|
198
|
+
#
|
105
199
|
def to_s
|
106
200
|
to_h.to_s
|
107
201
|
end
|
108
202
|
end
|
203
|
+
|
109
204
|
##
|
110
205
|
# Wrapper for MKMapPoint
|
111
206
|
class MapPoint
|
207
|
+
|
208
|
+
##
|
209
|
+
# Attribute reader
|
210
|
+
#
|
112
211
|
attr_reader :x, :y
|
212
|
+
|
113
213
|
##
|
114
|
-
# MapPoint
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
214
|
+
# Initializer for MapPoint
|
215
|
+
#
|
216
|
+
# * *Args* :
|
217
|
+
# The initializer takes a variety of arguments
|
218
|
+
#
|
219
|
+
# MapPoint.new(50,45)
|
220
|
+
# MapPoint.new([50,45])
|
221
|
+
# MapPoint.new({:x => 50, :y => 45})
|
222
|
+
# MapPoint.new(MKMapPoint)
|
118
223
|
def initialize(*args)
|
119
224
|
args.flatten!
|
120
225
|
self.x, self.y =
|
@@ -132,40 +237,88 @@ module MapKit
|
|
132
237
|
end
|
133
238
|
end
|
134
239
|
|
135
|
-
|
240
|
+
##
|
241
|
+
# Returns the wrapped iOS MKMapPoint object
|
242
|
+
#
|
243
|
+
# * *Returns* :
|
244
|
+
# - A MKMapPoint representation of self
|
245
|
+
#
|
246
|
+
def api
|
136
247
|
MKMapPointMake(@x, @y)
|
137
248
|
end
|
138
249
|
|
250
|
+
##
|
251
|
+
# Setter for x
|
252
|
+
#
|
253
|
+
# * *Args* :
|
254
|
+
# - +x+ -> Int or Float
|
255
|
+
#
|
139
256
|
def x=(x)
|
140
257
|
@x = x.to_f
|
141
258
|
end
|
142
259
|
|
260
|
+
##
|
261
|
+
# Setter for y
|
262
|
+
#
|
263
|
+
# * *Args* :
|
264
|
+
# - +y+ -> Int or Float
|
265
|
+
#
|
143
266
|
def y=(y)
|
144
267
|
@y = y.to_f
|
145
268
|
end
|
146
269
|
|
270
|
+
##
|
271
|
+
# Get self as an Array
|
272
|
+
#
|
273
|
+
# * *Returns* :
|
274
|
+
# - <tt>[x, y]</tt>
|
275
|
+
#
|
147
276
|
def to_a
|
148
277
|
[@x, @y]
|
149
278
|
end
|
150
279
|
|
280
|
+
##
|
281
|
+
# Get self as a Hash
|
282
|
+
#
|
283
|
+
# * *Returns* :
|
284
|
+
# - <tt>{:x => x, :y => y}</tt>
|
285
|
+
#
|
151
286
|
def to_h
|
152
287
|
{:x => @x, :y => @y}
|
153
288
|
end
|
154
289
|
|
290
|
+
##
|
291
|
+
# Get self as a String
|
292
|
+
#
|
293
|
+
# * *Returns* :
|
294
|
+
# - <tt>"{:x => x, :y => y}"</tt>
|
295
|
+
#
|
155
296
|
def to_s
|
156
297
|
to_h.to_s
|
157
298
|
end
|
158
299
|
end
|
300
|
+
|
159
301
|
##
|
160
302
|
# Wrapper for MKMapSize
|
161
303
|
class MapSize
|
304
|
+
|
305
|
+
##
|
306
|
+
# Attribute reader
|
307
|
+
#
|
162
308
|
attr_reader :width, :height
|
309
|
+
|
163
310
|
##
|
164
|
-
# MapSize
|
165
|
-
#
|
166
|
-
#
|
167
|
-
#
|
168
|
-
#
|
311
|
+
# Initializer for MapSize
|
312
|
+
#
|
313
|
+
# * *Args* :
|
314
|
+
# The initializer takes a variety of arguments
|
315
|
+
#
|
316
|
+
# MapSize.new(10,12)
|
317
|
+
# MapSize.new([10,12])
|
318
|
+
# MapSize.new({:width => 10, :height => 12})
|
319
|
+
# MapSize.new(MKMapSize)
|
320
|
+
# MapSize.new(MapSize)
|
321
|
+
#
|
169
322
|
def initialize(*args)
|
170
323
|
args.flatten!
|
171
324
|
self.width, self.height =
|
@@ -183,42 +336,90 @@ module MapKit
|
|
183
336
|
end
|
184
337
|
end
|
185
338
|
|
186
|
-
|
339
|
+
##
|
340
|
+
# Returns the wrapped iOS MKMapSize object
|
341
|
+
#
|
342
|
+
# * *Returns* :
|
343
|
+
# - A MKMapSize representation of self
|
344
|
+
#
|
345
|
+
def api
|
187
346
|
MKMapSizeMake(@width, @height)
|
188
347
|
end
|
189
348
|
|
349
|
+
##
|
350
|
+
# Setter for width
|
351
|
+
#
|
352
|
+
# * *Args* :
|
353
|
+
# - +width+ -> Int or Float
|
354
|
+
#
|
190
355
|
def width=(width)
|
191
356
|
@width = width.to_f
|
192
357
|
end
|
193
358
|
|
359
|
+
##
|
360
|
+
# Setter for height
|
361
|
+
#
|
362
|
+
# * *Args* :
|
363
|
+
# - +height+ -> Int or Float
|
364
|
+
#
|
194
365
|
def height=(height)
|
195
366
|
@height = height.to_f
|
196
367
|
end
|
197
368
|
|
369
|
+
##
|
370
|
+
# Get self as an Array
|
371
|
+
#
|
372
|
+
# * *Returns* :
|
373
|
+
# - <tt>[@width, @height]</tt>
|
374
|
+
#
|
198
375
|
def to_a
|
199
376
|
[@width, @height]
|
200
377
|
end
|
201
378
|
|
379
|
+
##
|
380
|
+
# Get self as a Hash
|
381
|
+
#
|
382
|
+
# * *Returns* :
|
383
|
+
# - <tt>{:width => width, :height => height}</tt>
|
384
|
+
#
|
202
385
|
def to_h
|
203
386
|
{:width => @width, :height => @height}
|
204
387
|
end
|
205
388
|
|
389
|
+
##
|
390
|
+
# Get self as a String
|
391
|
+
#
|
392
|
+
# * *Returns* :
|
393
|
+
# - <tt>"{:width => width, :height => height}"</tt>
|
394
|
+
#
|
206
395
|
def to_s
|
207
396
|
to_h.to_s
|
208
397
|
end
|
209
398
|
end
|
399
|
+
|
210
400
|
##
|
211
401
|
# Wrapper for MKMapRect
|
212
402
|
class MapRect
|
403
|
+
|
404
|
+
##
|
405
|
+
# Attribute reader
|
406
|
+
#
|
213
407
|
attr_reader :origin, :size
|
408
|
+
|
214
409
|
##
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
#
|
220
|
-
#
|
221
|
-
#
|
410
|
+
# Initializer for MapRect
|
411
|
+
#
|
412
|
+
# * *Args* :
|
413
|
+
# The initializer takes a variety of arguments
|
414
|
+
#
|
415
|
+
# MapRect.new(x, y, width, height)
|
416
|
+
# MapRect.new([x, y], [width, height])
|
417
|
+
# MapRect.new({:origin => {:x => 5.0, :y => 8.0}, :size => {:width => 6.0, :height => 9.0}})
|
418
|
+
# MapRect.new(MapPoint, MapSize)
|
419
|
+
# MapRect.new(MKMapPoint, MKMapSize)
|
420
|
+
# MapRect.new(MapRect)
|
421
|
+
# MapRect.new(MKMapRect)
|
422
|
+
#
|
222
423
|
def initialize(*args)
|
223
424
|
self.origin, self.size =
|
224
425
|
case args.size
|
@@ -237,22 +438,52 @@ module MapKit
|
|
237
438
|
end
|
238
439
|
end
|
239
440
|
|
240
|
-
|
441
|
+
##
|
442
|
+
# Returns the wrapped iOS MKMapRect object
|
443
|
+
#
|
444
|
+
# * *Returns* :
|
445
|
+
# - A MKMapRect representation of self
|
446
|
+
#
|
447
|
+
def api
|
241
448
|
MKMapRectMake(@origin.x, @origin.y, @size.width, @size.height)
|
242
449
|
end
|
243
450
|
|
451
|
+
##
|
452
|
+
# Assigns a MapKit::DataTypes::MapPoint to center.
|
453
|
+
#
|
454
|
+
# * *Args* :
|
455
|
+
# - +origin+ -> accepts a variety of argument types. See docs for the MapKit::DataTypes::MapPoint initializer
|
456
|
+
#
|
244
457
|
def origin=(origin)
|
245
458
|
@origin = MapPoint.new(origin)
|
246
459
|
end
|
247
460
|
|
461
|
+
##
|
462
|
+
# Assigns a MapKit::DataTypes::MapSize to center.
|
463
|
+
#
|
464
|
+
# * *Args* :
|
465
|
+
# - +size+ -> accepts a variety of argument types. See docs for the MapKit::DataTypes::MapSize initializer
|
466
|
+
#
|
248
467
|
def size=(size)
|
249
468
|
@size = MapSize.new(size)
|
250
469
|
end
|
251
470
|
|
471
|
+
##
|
472
|
+
# Get self as a Hash
|
473
|
+
#
|
474
|
+
# * *Returns* :
|
475
|
+
# - <tt>{:origin => {:x => x, :y => y}, :size => {:width => width, :height => height}}</tt>
|
476
|
+
#
|
252
477
|
def to_h
|
253
478
|
{:origin => @origin.to_h, :size => @size.to_h}
|
254
479
|
end
|
255
480
|
|
481
|
+
##
|
482
|
+
# Get self as a String
|
483
|
+
#
|
484
|
+
# * *Returns* :
|
485
|
+
# - <tt>"{:origin => {:x => x, :y => y}, :size => {:width => width, :height => height}}"</tt>
|
486
|
+
#
|
256
487
|
def to_s
|
257
488
|
to_h.to_s
|
258
489
|
end
|
@@ -1,5 +1,22 @@
|
|
1
|
+
##
|
2
|
+
# Wrappers for MapKit
|
3
|
+
#
|
1
4
|
module MapKit
|
5
|
+
|
6
|
+
##
|
7
|
+
# Class for dealing with MKMapView map type constants
|
8
|
+
#
|
2
9
|
class MapType
|
10
|
+
|
11
|
+
##
|
12
|
+
# Convert from MKMapView to MapView
|
13
|
+
#
|
14
|
+
# * *Args* :
|
15
|
+
# - +map_type+ -> Map type as MKMapView constant
|
16
|
+
#
|
17
|
+
# * *Returns* :
|
18
|
+
# - map type as symbol
|
19
|
+
#
|
3
20
|
def self.mkmap_to_rmap(map_type)
|
4
21
|
case map_type
|
5
22
|
when MKMapTypeStandard
|
@@ -13,6 +30,15 @@ module MapKit
|
|
13
30
|
end
|
14
31
|
end
|
15
32
|
|
33
|
+
##
|
34
|
+
# Convert from MapView to MKMapView
|
35
|
+
#
|
36
|
+
# * *Args* :
|
37
|
+
# - +map_type+ -> Map type as symbol
|
38
|
+
#
|
39
|
+
# * *Returns* :
|
40
|
+
# - Map type as MKMapView constant
|
41
|
+
#
|
16
42
|
def self.rmap_to_mkmap(map_type)
|
17
43
|
case map_type
|
18
44
|
when :standard
|
@@ -13,78 +13,132 @@ module MapKit
|
|
13
13
|
include MapKit::DataTypes
|
14
14
|
include MapKit::ZoomLevel
|
15
15
|
|
16
|
+
##
|
17
|
+
# Initializer for MapView
|
18
|
+
#
|
16
19
|
def initialize
|
17
20
|
self.alloc.init
|
18
21
|
end
|
19
22
|
|
20
23
|
##
|
21
|
-
#
|
24
|
+
# Is zoom enabled
|
25
|
+
#
|
26
|
+
# * *Returns* :
|
27
|
+
# - Bool
|
28
|
+
#
|
22
29
|
def zoom_enabled?
|
23
30
|
self.isZoomEnabled
|
24
31
|
end
|
25
32
|
|
26
33
|
##
|
27
34
|
# Set zoom on/off
|
35
|
+
#
|
36
|
+
# * *Args* :
|
37
|
+
# - +enabled+ -> Bool
|
38
|
+
#
|
28
39
|
def zoom_enabled=(enabled)
|
29
40
|
self.setZoomEnabled(enabled)
|
30
41
|
end
|
31
42
|
|
32
43
|
##
|
33
|
-
#
|
44
|
+
# Is scroll enbabled?
|
45
|
+
#
|
46
|
+
# * *Returns* :
|
47
|
+
# - Bool
|
48
|
+
#
|
34
49
|
def scroll_enabled?
|
35
50
|
self.isScrollEnabled
|
36
51
|
end
|
37
52
|
|
38
53
|
##
|
39
54
|
# Set scroll on/off
|
55
|
+
#
|
56
|
+
# * *Args* :
|
57
|
+
# - +enabled+ -> Bool
|
58
|
+
#
|
40
59
|
def scroll_enabled=(enabled)
|
41
60
|
self.setScrollEnabled(enabled)
|
42
61
|
end
|
43
62
|
|
44
63
|
##
|
45
|
-
#
|
64
|
+
# Is the users location shown on the map
|
65
|
+
#
|
66
|
+
# * *Returns* :
|
67
|
+
# - Bool
|
68
|
+
#
|
46
69
|
def shows_user_location?
|
47
70
|
self.showsUserLocation
|
48
71
|
end
|
49
72
|
|
50
73
|
##
|
51
74
|
# Set visible user location on/off
|
75
|
+
#
|
76
|
+
# * *Args* :
|
77
|
+
# - +enabled+ -> Bool
|
78
|
+
#
|
52
79
|
def shows_user_location=(enabled)
|
53
80
|
self.showsUserLocation = enabled
|
54
81
|
end
|
55
82
|
|
56
83
|
##
|
57
|
-
#
|
84
|
+
# Has the user been located yet?
|
85
|
+
#
|
86
|
+
# * *Returns* :
|
87
|
+
# - Bool
|
88
|
+
#
|
58
89
|
def user_located?
|
59
90
|
self.shows_user_location? && self.userLocation.location ? true : false
|
60
91
|
end
|
61
92
|
|
62
93
|
##
|
63
|
-
# Show the users coordinates
|
64
|
-
#
|
65
|
-
#
|
94
|
+
# Show the users coordinates. Defaults to nil if the functionality is turned off or the location has not yet been found
|
95
|
+
#
|
96
|
+
# * *Returns* :
|
97
|
+
# - LocationCoordinate
|
98
|
+
#
|
66
99
|
def user_coordinates
|
67
100
|
self.user_located? ? LocationCoordinate.new(self.userLocation.location.coordinate) : nil
|
68
101
|
end
|
69
102
|
|
70
103
|
##
|
71
|
-
#
|
72
|
-
|
73
|
-
|
104
|
+
# Set the maps region
|
105
|
+
#
|
106
|
+
# * *Args* :
|
107
|
+
# region = CoordinateRegion.new([56, 10.6], [3.1, 3.1])
|
108
|
+
# region = {:region => CoordinateRegion.new([56, 10.6], [3.1, 3.1]), :animated => false}
|
109
|
+
#
|
110
|
+
def region=(args)
|
111
|
+
case args
|
112
|
+
when Hash
|
113
|
+
self.setRegion(CoordinateRegion.new(args[:region]).api, animated: args[:animated])
|
114
|
+
else
|
115
|
+
self.setRegion(CoordinateRegion.new(args).api, animated: false)
|
116
|
+
end
|
74
117
|
end
|
75
118
|
|
76
119
|
##
|
77
|
-
#
|
78
|
-
|
79
|
-
|
120
|
+
# Deprecated
|
121
|
+
#
|
122
|
+
def set_region
|
123
|
+
raise 'set_region has been deprecated. Please review the docs on region=()'
|
80
124
|
end
|
81
125
|
|
82
126
|
##
|
83
|
-
#
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
127
|
+
# Trick to override methods on the iOS APi and to get super on those methods
|
128
|
+
#
|
129
|
+
module OverriddenMethods
|
130
|
+
include MapKit::DataTypes
|
131
|
+
##
|
132
|
+
# Get the maps region
|
133
|
+
#
|
134
|
+
# * *Returns* :
|
135
|
+
# - CoordinateRegion
|
136
|
+
#
|
137
|
+
def region
|
138
|
+
CoordinateRegion.new(super)
|
139
|
+
end
|
88
140
|
end
|
141
|
+
|
142
|
+
include OverriddenMethods
|
89
143
|
end
|
90
144
|
end
|
@@ -1,6 +1,15 @@
|
|
1
|
+
##
|
2
|
+
# Dummy class used for tests
|
3
|
+
#
|
1
4
|
class TestSuiteDelegate
|
5
|
+
##
|
6
|
+
# Attribute accessor
|
7
|
+
#
|
2
8
|
attr_accessor :window
|
3
9
|
|
10
|
+
##
|
11
|
+
# Init App
|
12
|
+
#
|
4
13
|
def application(application, didFinishLaunchingWithOptions: launchOptions)
|
5
14
|
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
|
6
15
|
@window.rootViewController = UIViewController.alloc.init
|
@@ -1,21 +1,51 @@
|
|
1
1
|
module MapKit
|
2
|
+
|
2
3
|
##
|
3
4
|
# Ruby adaption of http://troybrant.net/blog/2010/01/set-the-zoom-level-of-an-mkmapview/
|
5
|
+
#
|
4
6
|
# More here http://troybrant.net/blog/2010/01/mkmapview-and-zoom-levels-a-visual-guide/
|
7
|
+
#
|
5
8
|
module ZoomLevel
|
6
9
|
include Math
|
10
|
+
|
11
|
+
##
|
12
|
+
# Total map width in pixels
|
13
|
+
#
|
7
14
|
MERCATOR_OFFSET = 268435456.0
|
15
|
+
|
16
|
+
##
|
17
|
+
# Map radius in pixels
|
18
|
+
#
|
8
19
|
MERCATOR_RADIUS = MERCATOR_OFFSET / PI
|
9
20
|
|
10
21
|
##
|
11
22
|
# Map conversion methods
|
23
|
+
#
|
12
24
|
module ClassMethods
|
13
25
|
include Math
|
14
26
|
|
27
|
+
##
|
28
|
+
# Convert longitude to pixel space x
|
29
|
+
#
|
30
|
+
# * *Args* :
|
31
|
+
# - +longitude+ -> Int or Float
|
32
|
+
#
|
33
|
+
# * *Returns* :
|
34
|
+
# - Pixel space x as Int
|
35
|
+
#
|
15
36
|
def longitude_to_pixel_space_x(longitude)
|
16
37
|
(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * PI / 180.0).round
|
17
38
|
end
|
18
39
|
|
40
|
+
##
|
41
|
+
# Convert latitude to pixel space y
|
42
|
+
#
|
43
|
+
# * *Args* :
|
44
|
+
# - +latitude+ -> Int or Float
|
45
|
+
#
|
46
|
+
# * *Returns* :
|
47
|
+
# - Pixel space y as Int
|
48
|
+
#
|
19
49
|
def latitude_to_pixel_space_y(latitude)
|
20
50
|
if latitude == 90.0
|
21
51
|
0
|
@@ -26,14 +56,43 @@ module MapKit
|
|
26
56
|
end
|
27
57
|
end
|
28
58
|
|
59
|
+
##
|
60
|
+
# Convert pixel space x to longitude
|
61
|
+
#
|
62
|
+
# * *Args* :
|
63
|
+
# - +pixel_x+ -> Int
|
64
|
+
#
|
65
|
+
# * *Returns* :
|
66
|
+
# - Longitude as float
|
67
|
+
#
|
29
68
|
def pixel_space_x_to_longitude(pixel_x)
|
30
69
|
((pixel_x.round - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / PI
|
31
70
|
end
|
32
71
|
|
72
|
+
##
|
73
|
+
# Convert pixel space y to latitude
|
74
|
+
#
|
75
|
+
# * *Args* :
|
76
|
+
# - +pixel_y+ -> Int
|
77
|
+
#
|
78
|
+
# * *Returns* :
|
79
|
+
# - Latitude as float
|
80
|
+
#
|
33
81
|
def pixel_space_y_to_latitude(pixel_y)
|
34
82
|
(PI / 2.0 - 2.0 * atan(exp((pixel_y.round - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / PI
|
35
83
|
end
|
36
84
|
|
85
|
+
##
|
86
|
+
# Get the coordiante span for the given zoom level
|
87
|
+
#
|
88
|
+
# * *Args* :
|
89
|
+
# - +map_view+ -> A MKMapView
|
90
|
+
# - +center_coordinates+ -> Coordinates as MKMapPoint
|
91
|
+
# - +zoom_level+ -> Zoom level as Int
|
92
|
+
#
|
93
|
+
# * *Returns* :
|
94
|
+
# - Span as MKCoordinateSpan
|
95
|
+
#
|
37
96
|
def coordinate_span_with_map_view(map_view, center_coordinate, zoom_level)
|
38
97
|
# convert center coordiate to pixel space
|
39
98
|
center_pixel_x = self.longitude_to_pixel_space_x(center_coordinate.longitude)
|
@@ -67,8 +126,18 @@ module MapKit
|
|
67
126
|
end
|
68
127
|
|
69
128
|
##
|
70
|
-
#
|
129
|
+
# Get the coordiante region for the given zoom level
|
130
|
+
#
|
71
131
|
# This would involve wrapping the map from top to bottom, something that a Mercator projection just cannot do.
|
132
|
+
#
|
133
|
+
# * *Args* :
|
134
|
+
# - +map_view+ -> A MKMapView
|
135
|
+
# - +center_coordinates+ -> Coordinates as MKMapPoint
|
136
|
+
# - +zoom_level+ -> Zoom level as Int
|
137
|
+
#
|
138
|
+
# * *Returns* :
|
139
|
+
# - Region as MKCoordinateRegion
|
140
|
+
#
|
72
141
|
def coordinate_region_with_map_view(map_view, center_coordinate, zoom_level)
|
73
142
|
|
74
143
|
# clamp lat/long values to appropriate ranges
|
@@ -125,12 +194,21 @@ module MapKit
|
|
125
194
|
end
|
126
195
|
end
|
127
196
|
|
197
|
+
##
|
198
|
+
# Include class methods
|
199
|
+
#
|
128
200
|
def self.included(base)
|
129
201
|
base.extend(ClassMethods)
|
130
202
|
end
|
131
203
|
|
132
|
-
|
133
|
-
|
204
|
+
##
|
205
|
+
# Set the views center coordinates with a given zoom level
|
206
|
+
#
|
207
|
+
# * *Args* :
|
208
|
+
# - +center_coordinate+ -> A MKMapPoint
|
209
|
+
# - +zoom_level+ -> Zoom level as Int
|
210
|
+
# - +animated+ -> bool
|
211
|
+
#
|
134
212
|
def set_center_coordinates(center_coordinate, zoom_level, animated = false)
|
135
213
|
# clamp large numbers to 18
|
136
214
|
zoom_level = [zoom_level, 18].min
|
@@ -143,17 +221,28 @@ module MapKit
|
|
143
221
|
self.setRegion(region, animated: animated)
|
144
222
|
end
|
145
223
|
|
224
|
+
##
|
225
|
+
# Set the views latitude and longitude with a given zoom level
|
226
|
+
#
|
227
|
+
# * *Args* :
|
228
|
+
# - +latitude+ -> Float
|
229
|
+
# - +longitude+ -> Float
|
230
|
+
# - +zoom_level+ -> Zoom level as Int
|
231
|
+
# - +animated+ -> bool
|
232
|
+
#
|
146
233
|
def set_map_lat_lon(latitude, longitude, zoom_level, animated = false)
|
147
234
|
coordinates = CLLocationCoordinate2DMake(latitude, longitude)
|
148
|
-
|
235
|
+
set_center_coordinates(coordinates, zoom_level, animated)
|
149
236
|
end
|
150
237
|
|
151
238
|
##
|
152
239
|
# Get the current zoom level
|
153
|
-
|
240
|
+
#
|
241
|
+
# * *Returns* :
|
242
|
+
# - Zoom level as a Float
|
243
|
+
#
|
154
244
|
def zoom_level
|
155
|
-
region = self.region
|
156
|
-
|
245
|
+
region = self.region.api
|
157
246
|
center_pixel_x = self.class.longitude_to_pixel_space_x(region.center.longitude)
|
158
247
|
top_left_pixel_x = self.class.longitude_to_pixel_space_x(region.center.longitude - region.span.longitudeDelta / 2)
|
159
248
|
|
@@ -167,9 +256,13 @@ module MapKit
|
|
167
256
|
|
168
257
|
##
|
169
258
|
# Set the current zoom level
|
170
|
-
|
259
|
+
#
|
260
|
+
# * *Args* :
|
261
|
+
# - +zoom_level+ -> Int or Float
|
262
|
+
# - +animated+ -> Bool
|
263
|
+
#
|
171
264
|
def set_zoom_level(zoom_level, animated = false)
|
172
|
-
|
265
|
+
set_center_coordinates(self.region.api.center, zoom_level, animated)
|
173
266
|
end
|
174
267
|
|
175
268
|
end
|
@@ -35,7 +35,7 @@ describe 'MapKitDataTypes' do
|
|
35
35
|
|
36
36
|
it 'should contain a MKCoordinateSpan' do
|
37
37
|
@array.each do |o|
|
38
|
-
o.
|
38
|
+
o.api.is_a?(MKCoordinateSpan).should.equal true
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -78,7 +78,7 @@ describe 'MapKitDataTypes' do
|
|
78
78
|
|
79
79
|
it 'should contain a MKCoordinateRegion' do
|
80
80
|
@array.each do |o|
|
81
|
-
o.
|
81
|
+
o.api.is_a?(MKCoordinateRegion).should.equal true
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -118,7 +118,7 @@ describe 'MapKitDataTypes' do
|
|
118
118
|
|
119
119
|
it 'should contain a MKMapPoint' do
|
120
120
|
@array.each do |o|
|
121
|
-
o.
|
121
|
+
o.api.is_a?(MKMapPoint).should.equal true
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
@@ -158,7 +158,7 @@ describe 'MapKitDataTypes' do
|
|
158
158
|
|
159
159
|
it 'should contain a MKMapSize' do
|
160
160
|
@array.each do |o|
|
161
|
-
o.
|
161
|
+
o.api.is_a?(MKMapSize).should.equal true
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
@@ -173,7 +173,7 @@ describe 'MapKitDataTypes' do
|
|
173
173
|
o_4 = MapKit::DataTypes::MapRect.new(MKMapPointMake(5, 8), MKMapSizeMake(6, 9))
|
174
174
|
o_5 = MapKit::DataTypes::MapRect.new({:origin => {:x => 5.0, :y => 8.0}, :size => {:width => 6.0, :height => 9.0}})
|
175
175
|
o_6 = MapKit::DataTypes::MapRect.new(o_5)
|
176
|
-
o_7 = MapKit::DataTypes::MapRect.new(o_5.
|
176
|
+
o_7 = MapKit::DataTypes::MapRect.new(o_5.api)
|
177
177
|
@array = [o_1, o_2, o_3, o_4, o_5, o_6, o_7]
|
178
178
|
end
|
179
179
|
|
@@ -201,7 +201,7 @@ describe 'MapKitDataTypes' do
|
|
201
201
|
|
202
202
|
it 'should contain a MKMapRect' do
|
203
203
|
@array.each do |o|
|
204
|
-
o.
|
204
|
+
o.api.is_a?(MKMapRect).should.equal true
|
205
205
|
end
|
206
206
|
end
|
207
207
|
end
|
data/spec/lib/map_view_spec.rb
CHANGED
@@ -64,17 +64,17 @@ describe 'MapView' do
|
|
64
64
|
# region
|
65
65
|
|
66
66
|
it 'should show get_region' do
|
67
|
-
@map.
|
67
|
+
@map.region.should.satisfy { |object| object.is_a? MapKit::DataTypes::CoordinateRegion }
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'should set region=' do
|
71
71
|
@map.region = MapKit::CoordinateRegion.new([56, 10.6], [3.1, 3.1])
|
72
|
-
@map.
|
72
|
+
@map.region.should.satisfy { |object| object.is_a? MapKit::DataTypes::CoordinateRegion }
|
73
73
|
end
|
74
74
|
|
75
|
-
it 'should
|
76
|
-
@map.
|
77
|
-
@map.
|
75
|
+
it 'should set region = (coordinate_region, *args)' do
|
76
|
+
@map.region = {:region => MapKit::CoordinateRegion.new([56, 10.6], [3.1, 3.1]), :animated => false}
|
77
|
+
@map.region.should.satisfy { |object| object.is_a? MapKit::DataTypes::CoordinateRegion }
|
78
78
|
end
|
79
79
|
|
80
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: map-kit-wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: codependency
|