目前我正在为 iPhone/iPad 开发基于位置的应用程序。我的 MapKit 中有几个注释,我想做的是跟踪用户的位置并显示 3km 内的注释。有人可以给我一个开始吗?
问问题
1819 次
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 回答