Gpx解析器或GPX文档

时间:2011-12-26 21:12:36

标签: objective-c ios parsing gpx

我正在开发iOS 5应用程序。

我想开发一个GPX解析器,但我想知道在我开始开发它之前是否有一个开发。

您知道是否有Objective-c GPX解析器吗?

4 个答案:

答案 0 :(得分:4)

看看: http://terrabrowser.googlecode.com/svn/trunk/

在那里您可以找到GPSFileParser.m和GPSFileParser.h,它们可以为您提供帮助。

答案 1 :(得分:3)

我已经在gpx-api工作了一段时间。它将读取gpx文件并具有可用的数据模型(在我看来)。

答案 2 :(得分:1)

目前没有针对Obejective-C的特定GPX解析器。

这不是一个真正的问题,因为GPX只是XML,因此您可以使用任何XML解析器来处理GPX数据。有些例子,请查看Ray Wenderlich's tutorial on iOS XML parsers

答案 3 :(得分:1)

我意识到这是一个老问题,但我刚刚开始使用这个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;

}

下面@Dave Robertson提到的iOS GPX Framework看起来不错,所以我可能会在某些时候切换到那个。