MKMapView在地图上加载成千上万的针脚

时间:2011-10-25 16:15:20

标签: ios mkmapview

我需要在MKMapView上显示数千个引脚,我需要一个好的委托方法,我可以添加引脚。 didUserUpdateLocation很糟糕,因为它被多次触发。向MKMapView添加数千个引脚的最佳方法是什么。

更新:

我只是使用BOOL检查一次加载引脚,它似乎工作得非常好!

-(void) mapView:(MKMapView *) mv didUpdateUserLocation:(MKUserLocation *)userLocation
{
    NSLog(@"didUpdateUserLocation");

    if(self.isMapped) return; 

    for(Facility *facility in self.facilities) 
    {
        CLLocationCoordinate2D facilityCoord = { facility.latitude,facility.longitude };


        MapPoint *mp = [[MapPoint alloc] initWithCoordinate:facilityCoord title:facility.facilityName];



        [mv addAnnotation:mp];

    }

    self.isMapped = YES; 

}

1 个答案:

答案 0 :(得分:8)

我使用mapView:regionDidChangeAnimated:。我通过纬度和经度从核心数据过滤中提取数据,以获取当前区域和周围环境的引脚,以便用户可以滚动一点而不会再次提取数据。

缩小时,您可以决定显示数据的聚类版本,您可以使用K-Means算法在运行时预先计算或计算。

如果你有大量的数据来使用基于结构而不是对象的光数据结构,这可能会有所帮助。

添加和删除引脚时,您可能需要为淡入/淡出设置动画以平滑过渡。在屏幕上弹出内容是一种糟糕的用户体验。

如果所有这些都涉及服务器呼叫,您可以将呼叫封装在NSOperations中,这样当用户在地图中移动太快时您可以取消旧呼叫。