2

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

座標: 41.380840 -83.641319

ポイント: 71850240.204982 100266073.824832

MKMapPoint への変換によって CLLocationCoordinate2D の値が破壊される理由がわかりません。値が無効なため、オーバーレイがマップに表示されません...

編集:代わりに MKMapPointMake を使用してポイントが機能するようになりましたが、オーバーレイがまだ表示されません。これは mapView: viewForOverlay: コードです:

-(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;
}

メソッドが呼び出され(ブレークポイントを使用して確認)、注釈が機能しています(したがって、デリゲートを正しくセットアップする必要があると思います)

二重編集: :facepalm: デリゲート コードで毎回 nil を返していました。それは、以前のバージョンのコードをコピーして貼り付けることで得られるものです;P

4

1 に答える 1