2009-12-09 4 views
2

Я использую этот учебник для интеграции MapKit в моем приложении: http://iphonebcit.wordpress.com/iphone-map-kit-tutorial/iPhone MapKit - обновление аннотаций координаты и карта

CLLocationCoordinate2D coordinate; 
coordinate.latitude = 49.2802; 
coordinate.longitude = -123.1182; 

NSUInteger count = 1; 
for(int i = 0; i < 10; i++) { 
    CGFloat latDelta = rand()*.035/RAND_MAX - .02; 
    CGFloat longDelta = rand()*.03/RAND_MAX - .015; 

    CLLocationCoordinate2D newCoord = {coordinate.latitude+latDelta, coordinate.longitude+longDelta}; 
    MapDemoAnnotation* annotation = [[MapDemoAnnotation alloc] initWithCoordinate:newCoord andID:count++]; 
    [mapView addAnnotation:annotation]; 
    [annotation release]; 
} 

и

- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation { 
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"]; 
if(pinView == nil) { 
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"]; 
    pinView.pinColor = MKPinAnnotationColorPurple; 
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    pinView.animatesDrop = YES; 
    pinView.canShowCallout = YES; 
} else { 
    pinView.annotation = annotation; 
} 
return pinView; 

}

Так штифты установят на карта случайным образом. В моем приложении координаты будут меняться. Как изменить координаты аннотаций, чтобы они были обновлены на карте?

Кто-нибудь знает?

ответ

2

На iPhone SDK 3.x вам нужно удалить аннотации булавки и установить его снова. Это не очень приятно, если у вас много аннотаций на вашей карте.

Я стараюсь сделать это лучше, чтобы я отображал/обновлял свои аннотации, которые находятся на экране. Поэтому, если пользователь увеличит масштаб до Нью-Йорка, в Сан-Франциско не будет никаких аннотаций, кроме того, что пользователь не может видеть. Таким образом, производительность будет намного лучше.

Возможно, в будущем это было бы возможно. Надеюсь, что так :-)

1

Это учебное пособие предназначено только для отображения вида карты, и ничего другого. Вам понадобится большой учебник. Я нашел это полезным:

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

Возможно, что вам нужно сделать, это перебрать все аннотации на карте, удаляя их, а затем цикл через массив данных, добавление аннотаций обратно. Вы могли бы быть более умны в этом и прокручивать массив данных, проверяя, есть ли на карте булавка с той же широтой/долготой на карте, но этот способ усложняется.

+0

Большое спасибо. В моем реализованном протоколе аннотации есть дополнительная переменная экземпляра, называемая locationId. Этот идентификатор уникален, и я знаю, какое locationId должно быть обновлено с новыми координатами. Как я мог легко получить к нему доступ? Могу ли я удалить аннотацию с помощью: "аннотация с указанием locationId = 3999 удалить и добавить его с новыми координатами?" - лучше: «аннотация с locationId = 3999 задает новые координаты и обновляет местоположение, если это« контакт ». – Tim

+0

А, я забыл. Я уже видел этот учебник, но это не может мне помочь, потому что в нем нет ничего полезного для решения моей проблемы. – Tim

1

Так как я делаю аннотации в данный момент, я просто сделал быстрый тест. Вы получаете предупреждение о компиляторе, поэтому оно может не поддерживаться. Но это работает.

сделать пользовательский класс MKAnnotation, так что вы можете установить свойство координат будет доступно для записи:

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate; 

Тогда на любое событие или интервальных вы хотите, изменить координату, используя что-то вроде этого:

CLLocation *loc=[[CLLocation alloc] initWithLatitude:55.0 longitude:17.0]; 
annotation.coordinate=loc.coordinate; 
[loc release]; 
Смежные вопросы