ios - 如何从 Dynamic NSMutableArray 添加坐标到 CLLocationCoordinate2D?

标签 ios objective-c annotations nsmutablearray mkmapview

我有一个 MapView,我想在其中添加注释和一条来 self 从文本字段添加并存储在 NSMutableArray 中的已定义坐标的路线。

现在我能够显示来自多个坐标的路线,但只有当我将它们插入我的代码时,如下所示:

-(void)loadMap{

    int Coordinates;
    //MAP
    CLLocationCoordinate2D coordinateArray[Coordinates];
    coordinateArray[0] = CLLocationCoordinate2DMake(LatA, LongA);
    coordinateArray[1] = CLLocationCoordinate2DMake(LatB, LongB);
    coordinateArray[2] = CLLocationCoordinate2DMake(LatC, LongC);
    coordinateArray[3] = CLLocationCoordinate2DMake(LatD, LongD);


    self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:Coordinates];
    [MapViewHome setVisibleMapRect:[self.routeLine boundingMapRect]]; //If you want the route to be visible
    [MapViewHome addOverlay:self.routeLine];
    MapViewHome.mapType = MKMapTypeHybrid;

    [self zoomToFitMapAnnotations:MapViewHome];
}

要添加注释,我这样做:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    if(overlay == self.routeLine)
    {
        if(nil == self.routeLineView)
        {
            self.routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine];
            self.routeLineView.fillColor = [UIColor purpleColor];
            self.routeLineView.strokeColor = [UIColor purpleColor];
            self.routeLineView.lineWidth = 5;

        }

        return self.routeLineView;
    }

    return nil;
}

-(void)AddAnotations{


    DeparturePoint = [[MKPointAnnotation alloc] init];
    DeparturePoint.coordinate = CLLocationCoordinate2DMake(LatA, LongA);
    DeparturePoint.title = [NSString stringWithFormat:@"A"];
    [MapViewHome addAnnotation:DeparturePoint];

    ArrivalPoint = [[MKPointAnnotation alloc] init];
    ArrivalPoint.coordinate = CLLocationCoordinate2DMake(LatB, LongB);
    ArrivalPoint.title = [NSString stringWithFormat:@"B"];

    [MapViewHome addAnnotation:ArrivalPoint];

    C = [[MKPointAnnotation alloc] init];
    C.coordinate = CLLocationCoordinate2DMake(LatC, LongC);
    C.title = [NSString stringWithFormat:@"C"];

    [MapViewHome addAnnotation:C];

    D = [[MKPointAnnotation alloc] init];
    D.coordinate = CLLocationCoordinate2DMake(LatD, LongD);
    D.title = [NSString stringWithFormat:@"D"];

    [MapViewHome addAnnotation:D];



}

现在我想在 LoadMap 函数中插入我的动态 NSMutableArray 以刷新 mapView 并获得更长的路线!有什么想法吗?

最佳答案

这是我能想到的第一个解决方案...

首先我们将 CLLocationCoordinate2D 包装到一个对象中。为此,我制作了一个名为 KBLocationWrapper 的包装器类。这是界面:

@interface KBLocationWrapper : NSObject
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end

接下来生成 NSMutableArray ...

NSMutableArray *locationCoordinatesArray = [NSMutableArray array];

然后通过对象包装器将每个坐标添加到数组中...

KBLocationWrapper *locationWrapper = [[KBLocationWrapper alloc] init];
locationWrapper.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
[locationCoordinatesArray addObject:locationWrapper];

最后,弄清楚如何将locationCoordinatesArray 获取到-loadMap 方法中,然后循环遍历每个对象并映射坐标 属性到其在 coordinateArray 中的相应位置...(我会为此功能编写一个单独的方法,但出于演示目的,它直接进入 -loadMap)

-(void)loadMap{

    ....

    int Coordinates = (int)[locationCoordinatesArray count];

    CLLocationCoordinate2D coordinateArray[Coordinates];

    // loop through coordinates
    for (int i = 0; i < Coordinates; ++i) {
        // write data from the CLLocationCoordinate2D stored in the wrapper
        // to the primitive data array 'coordinateArray'
        coordinateArray[i] = [locationCoordinatesArray[i] coordinate];
    }


    // then generate the routeLine.
    self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:Coordinates];

    ...

}

关于ios - 如何从 Dynamic NSMutableArray 添加坐标到 CLLocationCoordinate2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970245/

相关文章:

objective-c - 遍历 TableView 单元格

ios - 需要在YouTube视频共享列表中显示我的iPhone应用程序

ios - 如何在 UILabel 文本上设置边缘样式

c - 使用 C 向 PNG 图像添加文本/注释

iOS 8 自定义键盘应用程序扩展 - 更改方向高度

ios - 使用 -v 查看调用?

ios - 如何使用 swift 和动画来扩展 uitableviewcell 高度,就像这个 gif 中那样?

ios - AVCaptureMovieFileOutput - 没有事件/启用的连接

java - JPA LinkedHashMap 注释

java - AndroidAnnotations 的@UiThread 是如何实现的?