RMMarkerManager.m
2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
//
// RMMarkerManager.m
// MapView
//
// Created by olivier on 11/5/08.
// Copyright 2008 NA. All rights reserved.
//
#import "RMMarkerManager.h"
#import "RMMercatorToScreenProjection.h"
@implementation RMMarkerManager
@synthesize contents;
- (id)initWithContents:(RMMapContents *)mapContents
{
if (![super init])
return nil;
contents = mapContents;
return self;
}
- (void) addMarker: (RMMarker*)marker
{
[[contents overlay] addSublayer:marker];
}
- (void) addMarker: (RMMarker*)marker AtLatLong:(CLLocationCoordinate2D)point
{
[marker setLocation:[contents latLongToPoint:point]];
[self addMarker: marker];
}
- (void) addDefaultMarkerAt: (CLLocationCoordinate2D)point
{
RMMarker *marker = [[RMMarker alloc] initWithKey:RMMarkerRedKey];
[self addMarker:marker AtLatLong:point];
[marker release];
}
- (void) removeMarkers
{
[[contents overlay] setSublayers:[NSArray arrayWithObjects:nil]];
}
- (NSArray *)getMarkers
{
return [[contents overlay] sublayers];
}
- (void) removeMarker:(RMMarker *)marker
{
[marker removeFromSuperlayer];
}
- (CGPoint) getMarkerScreenCoordinate: (RMMarker *)marker
{
return [[contents mercatorToScreenProjection] projectXYPoint:[marker location]];
}
- (CLLocationCoordinate2D) getMarkerCoordinate2D: (RMMarker *) marker
{
return [contents pixelToLatLong:[self getMarkerScreenCoordinate:marker]];
}
- (NSArray *) getMarkersForScreenBounds
{
NSMutableArray *markers;
markers = [NSMutableArray array];
CGRect rect = [[contents mercatorToScreenProjection] screenBounds];
NSArray *allMarkers = [self getMarkers];
NSEnumerator *markerEnumerator = [allMarkers objectEnumerator];
RMMarker *aMarker;
while (aMarker = (RMMarker *)[markerEnumerator nextObject])
{
CGPoint markerCoord = [self getMarkerScreenCoordinate:aMarker];
if( ((markerCoord.x > rect.origin.x) && (markerCoord.y > rect.origin.y)) &&
((markerCoord.x < (rect.origin.x + rect.size.width)) && (markerCoord.y < (rect.origin.y + rect.size.height))))
{
[markers addObject:aMarker];
}
}
return markers;
}
@end