MKMapPointForCoordinate返回无效坐标

时间:2013-06-21 16:45:42

标签: objective-c mkmapview mkoverlay

我正在使用MKMapView,注释,叠加等,但我对MKMapPointForCoordinate()返回无效坐标的对接问题感到痛苦。

代码:

MKMapPoint* pointArr;
for (Category* route in validRoutes){

    NSString* routeID = [route routeid];
    NSArray* pointData = [routes objectForKey:routeID];

    pointArr = malloc(sizeof(MKMapPoint) * [pointData count]);
    int i = 0;

    for (NSDictionary* routeData in pointData) {

        NSString* latitude = [routeData objectForKey:@"latitude"];
        NSString* longitude = [routeData objectForKey:@"longitude"];
        NSLog(@"L: %@ L: %@",latitude, longitude);

        CLLocationCoordinate2D coord = CLLocationCoordinate2DMake([[f numberFromString:latitude] doubleValue], [[f numberFromString:longitude] doubleValue]);


        NSLog(@"Coord: %f %f",coord.latitude,coord.longitude);

        MKMapPoint point = MKMapPointForCoordinate(coord);
        NSLog(@"Point: %f %f",point.x,point.y);
        pointArr[i] = point;
        i++;

    }

    MKPolyline *polyline = [MKPolyline polylineWithPoints:pointArr count: i];
    polyline.title = [route name];
    [routeOverlays setObject:polyline forKey: [route routeid]];
    [map addOverlay:polyline];
    free(pointArr);
}

输出示例:

L:41.380840 L:-83.641319

Coord:41.380840 -83.641319

点:71850240.204982 100266073.824832

我不明白为什么转换为MKMapPoint会破坏我的CLLocationCoordinate2D的值。叠加层未显示在地图上,因为值无效...

编辑:我通过使用MKMapPointMake来解决问题,但是,我的叠加层仍然没有显示。这是mapView:viewForOverlay:code:

-(MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {
MKOverlayView *overlayView = nil;

//Checks if the overlay is of type MKPolyline
if([overlay isKindOfClass:[MKPolyline class]]){
    MKPolylineView *routeLineView = [[MKPolylineView alloc] initWithPolyline:overlay];

    routeLineView.strokeColor = [UIColor orangeColor];
    routeLineView.lineWidth = 10;
    return overlayView;
}

return nil;
}

该方法被调用(使用断点来确认),并且我有注释工作(所以代理必须正确设置,我假设)

Double edit :: facepalm:我每次都在委托代码中返回nil。这就是我复制和粘贴以前版本代码所得到的; P

1 个答案:

答案 0 :(得分:4)

MKMapPoint 以度为单位的纬度/经度(如CLLocationCoordinate2D)。

它们不可互换,因此您不应期望MKMapPoint x,y值显示与相应纬度和经度的任何明显关系。

MKMapPoint是使用与纬度和经度不在同一比例或范围内的x,y值将纬度和经度转换为平面投影。有关更详细的说明,请参阅“位置感知编程指南”中的Map Coordinate Systems部分。

顺便说一下,如果您有CLLocationCoordinate2D个值,则使用polylineWithCoordinates而非polylineWithPoints创建折线要容易得多。这样,您无需担心任何转换。

有关详细信息和示例,请参阅iOS SDK: MapKit MKPolyLine not showing