У меня есть список из нескольких сотен мест и вы хотите отобразить MKPinAnnotation для тех мест, которые в настоящее время находятся на экране. Экран начинается с текущего местоположения пользователя с радиусом 2 мили. Конечно, пользователь может прокручивать и масштабировать экран. Прямо сейчас, я жду случая обновления карты, а затем петлю через мой список местоположения и проверить координаты, как это:Как определить, находится ли координата в текущем видимом регионе карты?
-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
CGPoint point;
CLLocationCoordinate2D coordinate;
. . .
/* in location loop */
coordinate.latitude = [nextLocation getLatitude];
coordinate.longitude = [nextLocation getLongitude];
/* Determine if point is in view. Is there a better way then this? */
point = [mapView convertCoordinate:coordinate toPointToView:nil];
if((point.x > 0) && (point.y>0)) {
/* Add coordinate to array that is later added to mapView */
}
Поэтому я прошу convertCoordinate, где точка будет находиться на экране (если я не неправильно этот метод очень возможен). Если координата отсутствует на экране, я никогда не добавляю ее в mapView.
Итак, мой вопрос, это правильный способ определить, будет ли местоположение lat/long появляться в текущем представлении и должно быть добавлено в mapView? Или я должен делать это по-другому?
Это не работает для меня. По какой-то причине все мои объекты, похоже, совпадают. Значения большей части x и y очень велики. Есть идеи? –
Я не уверен, сейчас я в командировке и не имею доступа к Mac. Первое, что приходит на ум, - это проверить регион карты. Но даже тогда, если точка не на экране (по крайней мере, в моем тестировании), метод convertCoordinate всегда возвращается 0. Я проверю его, как только вернусь к моему mac. – ryanday