문제

iPhone 3.0 SDK의 MapKit을 사용하면 mkannotation 프로토콜을 준수하는 객체를 만듭니다. 이것을 mkmapview에로드하는 것은 매우 쉽습니다. 그러나 사용자가 mkmapview를 스크롤하면 새로운 주석을로드 할 때입니다. 새로운 개체를 요청할 가능성이있는 곳은 MapView : RegionDidChangeAnimated : 지도의 영역이 변경 될 때 호출 된 다음 주석을 새 주석으로 추가/교체합니다.

특히, 현재 내에 존재하는 모든 객체를 검색하기 위해 코어 데이터를 쿼리하고 싶습니다. mkcoordinateregion (mapview.region) 화면에 표시 될 객체 만로드하도록합니다. 핵심 데이터의 객체에는 위도 및 경도 속성이 있으며 (클래스 속성은 클래스 '.m/.h에 정의되어 있습니다.

핵심 데이터 데이터베이스에 얼마나 많은 객체가 존재하는지의 특성으로 인해 모든 객체를 주석으로 사전로드 할 수 없거나 그렇지 않으면 메모리가 부족할 수 있습니다 (그리고 매우 느려질 것입니다).

현재 MapView 경계에 위치가있는 객체 만 검색하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

죄송합니다 영어는 내 모국어가 아닙니다 ..

사용자가 아래로 스크롤하거나 위로 스크롤하면 지역 값이 변경됩니다. 지역 디드 교구 이니화. 거기에서 현재 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