在地图视图中显示多个注释

时间:2013-10-28 05:30:48

标签: ios objective-c mkmapview mapkit mkannotationview

我是ios sdk中的地图视图新手。我想在地图视图中显示多个注释     使用lat和long.basically所有lat和long都来自服务器端     json格式。我正在解析所有lat和long并将其保存在不同的数组中。      但如何一次显示所有注释。我只能显示一个注释     一次.Below是我正在使用的单个注释的代码,

zoomLocation.latitude = latmpa.doubleValue;
zoomLocation.longitude = logmpa.doubleValue;
annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = zoomLocation;
annotationPoint.title = @"masjid....";
[mapView selectAnnotation:annotationPoint animated:YES];


[mapView addAnnotation:annotationPoint];

mapView.centerCoordinate = annotationPoint.coordinate;

MKCoordinateSpan span;
span.latitudeDelta = 1.5;
span.longitudeDelta = 1.0;
MKCoordinateRegion newRegion;
newRegion.center = zoomLocation;
newRegion.span = span;
[mapView setRegion:newRegion animated:YES];

2 个答案:

答案 0 :(得分:4)

试试这个

for ( int i=0; i<[yourLatLongarray count]; i++)
{
CLLocationCoordinate2D coord;

    coord.latitude=[[NSString stringWithFormat:@"%@",[yourLatitudeArray objectAtIndex:i]] floatValue];
    coord.longitude=[[NSString stringWithFormat:@"%@",
                      [yourLongitudeArray objectAtIndex:i]] floatValue];
    MKCoordinateRegion region1;
    region1.center=coord;
    region1.span.longitudeDelta=20 ;
    region1.span.latitudeDelta=20;
    [mapview setRegion:region1 animated:YES];

    NSString *titleStr =[namesArr objectAtIndex:i] ;
   // NSLog(@"title is:%@",titleStr);

  MyAnnotation*  annotObj =[[MyAnnotation alloc]initWithCoordinate:coord title:titleStr];
    [mapview addAnnotation:annotObj];

}

MyAnnotation.h是

@interface MyAnnotation : NSObject <MKAnnotation>
{   
   CLLocationCoordinate2D coordinate;
   NSString *title;
   NSString *subTitle;
   NSString *time;
}

@property (nonatomic)CLLocationCoordinate2D coordinate;

@property (nonatomic, retain) NSString *title;

@property (nonatomic, retain) NSString *subTitle;

@property (nonatomic,retain) NSString *time;

-(id)initWithCoordinate:(CLLocationCoordinate2D) c  title:(NSString *) t  subTitle:(NSString *)timed time:(NSString *)tim;

-(id)initWithCoordinate:(CLLocationCoordinate2D) c title:(NSString *)tit;

@end

MyAnnotation.m是

@implementation MyAnnotation

@synthesize coordinate;

@synthesize title;

@synthesize time;

@synthesize subTitle;

-(id)initWithCoordinate:(CLLocationCoordinate2D) c  title:(NSString *) t  subTitle:(NSString *)timed time:(NSString *)tim
{
   self.coordinate=c;
   self.time=tim;
   self.subTitle=timed;
   self.title=t;
   return self;
}

-(id)initWithCoordinate:(CLLocationCoordinate2D) c title:(NSString *)tit
{
    self.coordinate=c;
    self.title=tit;
    return self;
}

@end

答案 1 :(得分:0)

获取阵列中的所有纬度和经度并按照用户1673099所说的那样进行for循环,

并添加以下zoomtofit代码,用于通过调用方法来缩放mapview以覆盖mapview中的所有注释,

[self zoomToFitMapAnnotations:self.mapView];

- (void)zoomToFitMapAnnotations:(MKMapView *)mapView {
if ([mapView.annotations count] == 0) return;

CLLocationCoordinate2D topLeftCoord;
topLeftCoord.latitude = -90;
topLeftCoord.longitude = 180;
CLLocationCoordinate2D bottomRightCoord;
bottomRightCoord.latitude = 90;
bottomRightCoord.longitude = -180;

for(id<MKAnnotation> annotation in mapView.annotations) {
    topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude);
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude);
    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
}

MKCoordinateRegion region;
region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5;
region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1;

region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1;

region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}