MainViewController.m
3.88 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//
// MainViewController.m
// MapTestbed : Diagnostic map
//
#import "MainViewController.h"
#import "MapTestbedAppDelegate.h"
#import "RMMarker.h"
#import "RMMarkerManager.h"
#import "MainView.h"
#import "RMLatLong.h"
#import "RMTileSource.h"
#import "RMMapContents.h"
@implementation MainViewController
@synthesize mapView;
@synthesize infoTextView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
[mapView setDelegate:self];
[self updateInfo];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tileNotification:) name:RMTileRequested object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tileNotification:) name:RMTileRetrieved object:nil];
[[mapView contents] setMinZoom:1.0];
[[mapView contents] setMaxZoom:20.0];
[[mapView contents] setFrame:CGRectMake(-100,-10,500,500)]; // Add some width for rotation, but keep centered
mapView.enableRotate = TRUE;
RMMarkerManager *markerManager = [mapView markerManager];
NSAssert(markerManager, @"null markerManager returned");
RMMarker *marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"marker-blue.png"]
anchorPoint:CGPointMake(0.5, 1.0)];
[marker setTextForegroundColor:[UIColor blueColor]];
[marker changeLabelUsingText:@"Hello"];
[markerManager addMarker:marker AtLatLong:[[mapView contents] mapCenter]];
[marker release];
}
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
- (void)viewDidAppear:(BOOL)animated {
[self updateInfo];
}
- (void)dealloc {
self.infoTextView = nil;
self.mapView = nil;
[super dealloc];
}
- (void)updateInfo {
RMMapContents *contents = self.mapView.contents;
CLLocationCoordinate2D mapCenter = [contents mapCenter];
float routemeMetersPerPixel = [contents metersPerPixel]; // really meters/pixel
double truescaleDenominator = [contents scaleDenominator];
[infoTextView setText:[NSString stringWithFormat:@"Latitude : %f\nLongitude : %f\nZoom level : %.2f\nMeter per pixel : %.1f\nTrue scale : 1:%.0f",
mapCenter.latitude,
mapCenter.longitude,
contents.zoom,
routemeMetersPerPixel,
truescaleDenominator]];
}
- (IBAction) mapSelectChange
{
id <RMTileSource> tileSource;
if(mapSelectControl.selectedSegmentIndex == 1)
tileSource = [[[RMOpenCycleMapSource alloc] init] autorelease];
else
tileSource = [[[RMOpenStreetMapSource alloc] init] autorelease];
[[mapView contents] setTileSource:tileSource];
}
#pragma mark -
#pragma mark Delegate methods
- (void) afterMapMove: (RMMapView*) map {
[self updateInfo];
}
- (void) afterMapZoom: (RMMapView*) map byFactor: (float) zoomFactor near:(CGPoint) center {
[self updateInfo];
}
#pragma mark -
#pragma mark Notification methods
- (void) tileNotification: (NSNotification*)notification
{
static int outstandingTiles = 0;
if(notification.name == RMTileRequested)
outstandingTiles++;
else if(notification.name == RMTileRetrieved)
outstandingTiles--;
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:(outstandingTiles > 0)];
}
@end