Classes/KMLViewerViewController.m
/* |
Copyright (C) 2015 Apple Inc. All Rights Reserved. |
See LICENSE.txt for this sample’s licensing information |
Abstract: |
Displays an MKMapView and demonstrates how to use the included KMLParser class to place annotations and overlays from a parsed KML file on top of the MKMapView. |
*/ |
@import MapKit; |
#import "KMLParser.h" |
#import "KMLViewerViewController.h" |
@interface KMLViewerViewController () |
@property (nonatomic, weak) IBOutlet MKMapView *map; |
@property (nonatomic, strong) KMLParser *kmlParser; |
@end |
@implementation KMLViewerViewController |
- (void)viewDidLoad { |
[super viewDidLoad]; |
// Locate the path to the route.kml file in the application's bundle |
// and parse it with the KMLParser. |
NSString *path = [[NSBundle mainBundle] pathForResource:@"KML_Sample" ofType:@"kml"]; |
NSURL *url = [NSURL fileURLWithPath:path]; |
self.kmlParser = [[KMLParser alloc] initWithURL:url]; |
[self.kmlParser parseKML]; |
// Add all of the MKOverlay objects parsed from the KML file to the map. |
NSArray *overlays = [self.kmlParser overlays]; |
[self.map addOverlays:overlays]; |
// Add all of the MKAnnotation objects parsed from the KML file to the map. |
NSArray *annotations = [self.kmlParser points]; |
[self.map addAnnotations:annotations]; |
// Walk the list of overlays and annotations and create a MKMapRect that |
// bounds all of them and store it into flyTo. |
MKMapRect flyTo = MKMapRectNull; |
for (id <MKOverlay> overlay in overlays) { |
if (MKMapRectIsNull(flyTo)) { |
flyTo = [overlay boundingMapRect]; |
} else { |
flyTo = MKMapRectUnion(flyTo, [overlay boundingMapRect]); |
} |
} |
for (id <MKAnnotation> annotation in annotations) { |
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate); |
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0); |
if (MKMapRectIsNull(flyTo)) { |
flyTo = pointRect; |
} else { |
flyTo = MKMapRectUnion(flyTo, pointRect); |
} |
} |
// Position the map so that all overlays and annotations are visible on screen. |
self.map.visibleMapRect = flyTo; |
} |
#pragma mark MKMapViewDelegate |
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { |
return [self.kmlParser rendererForOverlay:overlay]; |
} |
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { |
return [self.kmlParser viewForAnnotation:annotation]; |
} |
@end |
Copyright © 2015 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2015-09-24