Я понимаю, что это старый вопрос, но я только начал использовать этот анализатор GPX:
https://github.com/patricks/gpx-parser-cocoa
, который разветвляется из этого:
https://github.com/fousa/gpx-parser-ios
Ниже приведен код, который я использую.Предполагается, что у вас есть IBOutlet (self.theMapView), подключенный к вашему MKMapView, вы установили делегат и добавили инфраструктуру MapKit к вашей цели, и что у вас есть действительный файл gpx (называемый test-gpx.gpx ) в вашем проекте.Я использую это в приложении Mac, но я думаю, что код также будет работать в iOS.
- (void)parseGPX {
NSString *gpxFilePath = [[NSBundle mainBundle] pathForResource:@"test-gpx" ofType:@"gpx"];
NSData *fileData = [NSData dataWithContentsOfFile:gpxFilePath];
[GPXParser parse:fileData completion:^(BOOL success, GPX *gpx) {
// success indicates completion
// gpx is the parsed file
if (success) {
NSLog(@"GPX success: %@", gpx);
NSLog(@"GPX filename: %@", gpx.filename);
NSLog(@"GPX waypoints: %@", gpx.waypoints);
NSLog(@"GPX routes: %@", gpx.routes);
NSLog(@"GPX tracks: %@", gpx.tracks);
[self.theMapView removeAnnotations:self.theMapView.annotations];
for (Waypoint *thisPoint in gpx.waypoints) {
// add this waypoint to the map
MKPointAnnotation *thisRecord = [[MKPointAnnotation alloc] init];
thisRecord.coordinate = thisPoint.coordinate;
thisRecord.title = thisPoint.name;
[self.theMapView addAnnotation:thisRecord];
}
for (Track *thisTrack in gpx.tracks) {
// add this track to the map
[self.theMapView addOverlay:thisTrack.path];
}
[self.theMapView setRegion:[self.theMapView regionThatFits:gpx.region] animated:YES];
} else {
NSLog(@"GPX fail for file: %@", gpxFilePath);
}
}];
}
- (MKOverlayRenderer*)mapView:(MKMapView*)mapView rendererForOverlay:(id <MKOverlay>)overlay {
MKPolylineRenderer* lineView = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
lineView.strokeColor = [NSColor orangeColor];
lineView.lineWidth = 7;
return lineView;
}
iOS GPX Framework , упомянутая @Dave Robertson ниже, выглядит хорошо, поэтомуЯ мог бы переключиться на это в какой-то момент.