Показывает несколько выводов на MapView внутри цикла for?

Я разрабатываю приложение для iphone, я показываю радарные точки на MapView. Там более 1000 точек. Я должен показать все точки и рассчитать расстояния между точками радара и точками местоположения пользователя. Я должен создать все регионы (более 1000), чтобы показать? Кто-нибудь может дать мне идею, как я могу использовать для цикла, чтобы сделать это? в противном случае я создам более 1000 объектов региона. Вот мой код:

- (void)viewDidLoad {


//user's location information

CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:self.mapView.userLocation.coordinate.latitude longitude:self.mapView.userLocation.coordinate.longitude];


[super viewDidLoad];

[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];

//region1

MKCoordinateRegion region1 = { {0.0, 0.0 }, { 0.0, 0.0 } }; 

region1.center.latitude = 39.9828000 ;

region1.center.longitude =26.3033200 ;

region1.span.longitudeDelta = 1.90f;

region1.span.latitudeDelta = 0.00f;

[mapView setRegion:region1 animated:YES];


[mapView setDelegate:self];

DisplayMap *ann1 = [[DisplayMap alloc] init]; //display is my class to keep title,subtitle and coordinate information.


ann1.title = @" istanbul";

ann1.subtitle = @"esenler"; 

ann1.coordinate = region1.center; 

[mapView addAnnotation:ann1];

CLLocation *pinLocation1 = [[CLLocation alloc] initWithLatitude:region1.center.latitude longitude:region1.center.longitude];

CLLocationDistance distance1 = [pinLocation1 distanceFromLocation:userLocation];

if(distance1<20000){
    [lbl setText: [NSString stringWithFormat:@"Distance to point %4.2f m.",distance1]];
}



//region2

MKCoordinateRegion region2 = { {0.0, 0.0 }, { 0.0, 0.0 } }; 

region2.center.latitude = 39.9876200 ;

region2.center.longitude =26.3062700 ;

region2.span.longitudeDelta = 1.90f;

region2.span.latitudeDelta = 0.00f;

[mapView setRegion:region2 animated:YES]; 

[mapView setDelegate:self];

DisplayMap *ann2 = [[DisplayMap alloc] init];

ann2.title = @" istanbul";

ann2.subtitle = @"esenler";

ann2.coordinate = region2.center; 

[mapView addAnnotation:ann2];

//aradaki uzaklığı hesaplamak için mevcut yerin location ı cllocation class ı üzerinden hesaplanıyor.

CLLocation *pinLocation2 = [[CLLocation alloc] initWithLatitude:region2.center.latitude longitude:region2.center.longitude];

CLLocationDistance distance2 = [pinLocation2 distanceFromLocation:userLocation];

if(distance2<20000){
    [lbl setText: [NSString stringWithFormat:@"Distance to point %4.2f m.",distance2]];
}

}

1 ответ

Решение

Я дам вам понять, как написать цикл for в target-C, потому что в интернете уже есть сотни источников для этого. Что вам нужно сделать, это решить, как вы будете собирать данные в массив для циклического прохождения. После того, как вы это разработали, следующий код является более эффективной вашей версией, с этими мыслями

  • Вы делаете это в viewDidLoad, но карта не успела правильно определить местоположение пользователя. Вы бы лучше добавляли все аннотации время от времени, когда вызывается метод делегата для получения нового местоположения, а затем перебираете [mapView annotations] массив, устанавливающий все метки.
  • Говоря о которых. Оба региона1 и регион2 установлены lblтекст. Каждый просто перезаписывает последний. Ожидаете ли вы иметь 1000 меток или вы просто ожидаете увидеть текст последнего региона, который вы добавили на карту?
  • Почему вы увеличиваете масштаб для каждого региона? Вы действительно ожидаете, что карта увеличит каждую из 1000 точек один за другим? Когда все это будет сделано, вы останетесь смотреть на 1000-й регион и игнорировать все остальные точки
  • Зачем вы устанавливаете делегата 1000 раз?

,

DisplayMap *ann1 = [[DisplayMap alloc] init];

ann1.title = @" istanbul";

ann1.subtitle = @"esenler";

ann1.coordinate = CLLocationCoordinate2DMake(39.9828000, 26.3033200);

[mapView addAnnotation:ann1];

CLLocation *pinLocation1 = [[CLLocation alloc] initWithLatitude:ann1.coordinate.latitude longitude:ann1.coordinate.longitude];

CLLocationDistance distance1 = [pinLocation1 distanceFromLocation:userLocation];

if(distance1<20000)
{
    [lbl setText: [NSString stringWithFormat:@"Distance to point %4.2f m.",distance1]];
}
Другие вопросы по тегам