Загрузите дополнительные объекты из данных Core, когда пользователь прокручивает MkmapView

StackOverflow https://stackoverflow.com/questions/1303728

Вопрос

С Mapkit в SDK iPhone 3.0 вы создаете объекты, которые соответствуют протоколу mkannotation. Загрузить их на Mkmapview очень проста. Однако, когда пользователь прокручивает Mkmapview, пришло время загрузить новые аннотации. Вероятное место для запроса новых объектов будет в MapView: RegionDidChanganimated: который вызывается, когда регион карты изменяется, а затем добавьте/замените аннотации новыми.

В частности, я хотел бы запросить данные основных данных для извлечения всех объектов, которые существуют в текущем Mkcoordinatereregion (MapView.region) так, чтобы я загружал только объекты, которые будут показаны на экране. Объекты в данных основных данных имеют атрибуты широты и долготы (а атрибут Cllocation определяется в классе '.m/.h, который я могу заполнить из этого вручную) и использовать его для NSPredicate для поиска близлежащих объектов.

Из -за характера того, сколько объектов существует в базе данных основных данных, мы не можем предварительно загружать все объекты в качестве аннотаций, иначе у нас закончится память (и это будет мучительно медленным).

Как я могу получить только те объекты, которые имеют местоположения в текущих границах MapView?

Это было полезно?

Решение

Извините, английский не мой родной язык ..

После того, как пользователь прокручивается вниз или вверх. Значения региона изменятся, особенно 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top