使用iPhone 3.0 SDK中的MapKit,您可以创建符合MKAnnotation协议的对象。将这些加载到MKMapView非常简单。但是,当用户滚动MKMapView时,是时候加载新的注释了。请求新对象的可能位置是 mapView:regionDidChangeAnimated:,在更改地图的区域时调用,然后使用新的注释添加/替换注释。
具体来说,我想查询Core Data以检索当前 MKCoordinateRegion (mapView.region)中存在的所有对象,以便我只加载将在其上显示的对象屏幕。 Core Data中的对象具有纬度和经度属性(CLLocation属性在类'.m / .h中定义,我可以从中手动填充)并将其用于NSPredicate以查找附近的对象。
由于Core Data数据库中存在多少个对象的性质,我们无法将所有对象预加载为注释,否则我们将耗尽内存(而且速度极慢)。
如何仅检索当前mapview边界中具有位置的对象?
答案 0 :(得分: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)