0

iPhone 3.0 SDK에서 MapKit을 사용하면 MKAnnotation 프로토콜을 준수하는 객체를 만들 수 있습니다. MKMapView에로드하는 것은 매우 쉽습니다. 그러나 사용자가 MKMapView를 스크롤하면 새로운 주석을로드 할 차례입니다. 새 객체를 요청할 가능성이있는 곳은지도 영역이 변경 될 때 호출되는 mapView : regionDidChangeAnimated :입니다. 그런 다음 주석을 새 영역으로 추가/대체합니다.사용자가 MKMapView를 스크롤 할 때 코어 데이터에서 추가 객체로드

특히 코어 데이터를 쿼리하여 현재 MKCoordinateRegion (mapView.region) 내에 존재하는 모든 개체를 검색하여 화면에 표시 될 개체 만로드하도록합니다. 코어 데이터의 객체에는 위도 및 경도 속성이 있으며 CLLocation 속성은 '.m/.h'클래스에 정의되어 있으며 수동으로 채울 수 있습니다.이 속성을 사용하여 NSPredicate에서 근처의 객체를 찾습니다.

코어 데이터베이스에 존재하는 객체의 수에 따라 모든 객체를 주석으로 사전로드 할 수 없기 때문에 메모리가 부족합니다 (너무나 느려질 수 있습니다).

현재지도보기 범위 내 위치가있는 객체 만 검색하려면 어떻게해야합니까?

답변

5

영어 죄송합니다 에서 모국어 .. 다운 또는 업 .. 지역 값이 변경됩니다 사용자가 스크롤, 특히 latitudeDelta 및 longitudeDelta 일단

을 regionDidChangeAnimated되지 않습니다. 여기에서, 당신은 당신이 이미 계산 된 경계를 가지고 있기 때문에, 당신은 보여줄 필요가있는 개체를 처리 할 수 ​​

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

maxlat = current_coordinate_lat + latitudeDelta; 

minlong = ... 

maxlong = ... 

(MAXLONG, minlat, minlong, maxlat) 현재지도보기 ..의 경계를 얻을 수 있습니다, 다음 추가 맵 내의 주석. 난 .. 난 그 경계 내에서 포인트를 얻을 수 sqlite3를 SQL 문을 수행 할 수 있습니다 .. http://img43.imageshack.us/img43/703/picture1txe.png

거기에서 ..

참조 이미지 여기 .. ​​아래의 값으로 실험을

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

+0

이 일반적인 개념은 저에게 잘 맞았습니다! 성가신 유일한 것은 직사각형 경계를 넘어서는 객체를로드하기 때문에 사용자가 핀을 삭제하는 것을 보지 못한다는 것입니다. 그것은 대체로 화장 용이므로 문제 해결을 서두르지는 않습니다. 범위를 벗어나는 이유는 무엇입니까? 경계가 더 큰 것으로보고 있다고 가정 할 수 있습니다. 화면에 VISIBLE이 무엇인지 알려줍니다. 생각 하시겠습니까? –

+1

케빈, 당신이 너무 많은 물건을 얻는 이유는 위도와 경도 델타가 먼저 중심에서뿐만 아니라 전체 지역을 가로 지르는 거리를 나타 내기 때문에 둘 다 먼저 잘라야하기 때문입니다. 예를 들면 다음과 같습니다. minLat = currentCenter - (latDelta/2) 등 –

관련 문제