0

使用 iPhone 3.0 SDK 中的 MapKit,您可以创建符合 MKAnnotation 协议的对象。将这些加载到 MKMapView 上非常容易。然而,当用户滚动 MKMapView 时,是时候加载新的注释了。请求新对象的可能位置在mapView:regionDidChangeAnimated:中,当地图的区域更改时调用它,然后用新的注释添加/替换注释。

具体来说,我想查询 Core Data 以检索当前MKCoordinateRegion (mapView.region) 中存在的所有对象,以便我只加载将在屏幕上显示的对象。Core Data 中的对象具有纬度和经度属性(CLLocation 属性在类' .m/.h 中定义,我可以从中手动填充)并将其用于 NSPredicate 以查找附近的对象。

由于 Core Data 数据库中存在多少对象的性质,我们不能将所有对象预加载为注释,否则我们将耗尽内存(而且速度会非常慢)。

如何仅检索在当前地图视图范围内具有位置的对象?

4

1 回答 1

5

抱歉英语不是我的第一语言..

一旦用户向下或向上滚动.. 区域值将会改变,特别是regionDidChangeAnimated中的 latitudeDelta 和 longitudeDelta 。从那里,您可以获取当前 mapView 的边界..(minlat, minlong, maxlat, maxlong)

minlat = current_coordinate_lat - latitudeDelta; //note everything is in dd (decimal degrees)

maxlat = current_coordinate_lat + latitudeDelta;

minlong = ...

maxlong = ...

由于您已经计算出边界,因此您可以处理需要显示的对象,然后在地图中添加注释。我已经尝试了以下值..

在这里查看图片.. http://img43.imageshack.us/img43/703/picture1txe.png

从那里..我可以做sqlite3 sql语句来获得该范围内的点..

SELECT * FROM pois WHERE categ_id = %@ AND (sat_latitude > %f AND sat_latitude < %f) AND (sat_longitude > %f AND sat_longitude < %f)

于 2009-08-20T03:46:49.913 回答