2

目前我正在为 iPhone/iPad 开发基于位置的应用程序。我的 MapKit 中有几个注释,我想做的是跟踪用户的位置并显示 3km 内的注释。有人可以给我一个开始吗?

4

1 回答 1

1

抱歉延迟回复......这个问题刚刚从我的雷达上消失了。

我将假设您有一个方法可以返回一组 NSValue 包装的CLLocationCoordinate2D结构(无论您的内部数据表示是什么,基本方法都是相同的)。然后,您可以使用类似于以下的方法过滤列表(警告:在浏览器中键入):

NSSet *locations = ...;
CLLocation centerLocation = ...; // Reference location for comparison, maybe from CLLocationManager
CLLocationDistance radius = 3000.; // Radius in meters
NSSet *nearbyLocations = [locations objectsPassingTest:^(id obj, BOOL *stop) {
        CLLocationCoordinate2D testCoordinate;
        [obj getValue:&testCoordinate];
        CLLocation *testLocation = [[CLLocation alloc] initWithLatitude:testCoordinate.latitude
                                                              longitude:testCoordinate.longitude];
        BOOL returnValue = ([centerLocation distanceFromLocation:testLocation] <= radius);
        [testLocation release];
        return returnValue;
    }
];

使用过滤后的坐标集,您可以创建MKAnnotation实例并以通常的方式将它们添加到地图中,如Apple 文档中所述。

如果您有数千个测试位置,那么我认为这种方法可能会开始引发性能问题。然后,您可能希望切换使用点存储方法,例如四叉树,以减少需要精确过滤的点数。但不要过早优化!

希望有帮助!

于 2012-07-06T00:26:55.423 回答