2017-05-24 16 views
4

我使用MKMapView并在地图中添加了许多注释引脚。所有注释都属于不同的国家,所以我无法将所有注释设置为对用户可见。所有注解在MKMapView中对用户不可见

请尝试使用下面的纬度和经度进行注释。

First annotation Latitude: 23.029690

First annotation Longitude: 72.527359

Second annotation Latitude: 34.210855

Second annotation Longitude: -118.622636

代码添加注释的MapView。

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([[dicObjects valueForKey:K_Latitude] doubleValue], [[dicObjects valueForKey:K_Longitude] doubleValue]); 
MyCustomAnnotation *myCustomAnnotation = [[MyCustomAnnotation alloc]initWithTitle:[NSString stringWithFormat:@"%@   ",[dicObjects valueForKey:K_Title]] Subtitle:[NSString stringWithFormat:@"%@",[dicObjects valueForKey:K_SubTitle]] andDescritpion:[NSString stringWithFormat:@"%@",[dicObjects valueForKey:K_TitelDes]] withLocation:coordinate andImageName:[dicObjects valueForKey:K_Rating] andTagValue:intTempCounter]; 
[mapViewPledgeList addAnnotation:myCustomAnnotation]; 

MyCustomAnnotation.h

@interface MyCustomAnnotation : NSObject<MKAnnotation> 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (copy, nonatomic) NSString *title; 
@property (copy, nonatomic) NSString *subTitle; 
@property (copy, nonatomic) NSString *titleDescritpion; 
@property (copy, nonatomic) NSString *strImageName; 
@property int intTagValue; 


- (id)initWithTitle:(NSString *)newTitle Subtitle:(NSString *)subTitle andDescritpion:(NSString *)titleDescritpion withLocation:(CLLocationCoordinate2D)location andTagValue:(int) intTag; 
- (MKAnnotationView *)annotationView; 
- (id)initWithTitle:(NSString *)newTitle Subtitle:(NSString *)subTitle andDescritpion:(NSString *)titleDescritpion withLocation:(CLLocationCoordinate2D)location andImageName:(NSString*) strImageName andTagValue:(int) intTag; 
@end 

MyCustomAnnotation.m

#import "MyCustomAnnotation.h" 

@implementation MyCustomAnnotation 


#pragma mark - Custom Annotation View Setup 
- (MKAnnotationView *)annotationView{ 

    MKAnnotationView *annotationView = [[MKAnnotationView alloc]initWithAnnotation:self reuseIdentifier:K_ID_CUSTOM_ANNOTATION]; 
    annotationView.enabled = YES; 
    annotationView.canShowCallout = YES; 
    annotationView.image = kImage(_strImageName); 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    button.frame = CGRectMake(0, 0, 23, 23); 
    button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 
    [button setImage:[[UIImage imageNamed:@"NextArrow"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal]; 
    annotationView.rightCalloutAccessoryView = button; 

    return annotationView; 
} 

- (id)initWithTitle:(NSString *)newTitle Subtitle:(NSString *)subTitle andDescritpion:(NSString *)titleDescritpion withLocation:(CLLocationCoordinate2D)location andImageName:(NSString*) strImageName andTagValue:(int) intTag{ 

    self = [super init]; 

    if(self){ 
     _title = newTitle; 
     _subTitle = subTitle; 
     _titleDescritpion = titleDescritpion; 
     _coordinate = location; 


     if ([strImageName intValue] == 1) { 
      _strImageName = @"MapViewPinRed"; 

     }else if([strImageName intValue] == 2){ 
      _strImageName = @"MapViewPinOrange"; 

     }else if ([strImageName intValue] == 3){ 
      _strImageName = @"MapViewPinYellow"; 

     }else if ([strImageName intValue] == 4){ 
      _strImageName = @"MapViewPinLightGreen"; 

     }else{ 
      _strImageName = @"MapViewPinGreen"; 

     } 
    } 

    return self; 
} 

    @end 

我尝试以下解决方案,但它无法正常工作。

1)使用MKMapRectUnion

MKMapRect zoomRect = MKMapRectNull; 
    for (id <MKAnnotation> annotation in mapViewPledgeList.annotations) 
    { 
     MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate); 
     MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1); 
     zoomRect = MKMapRectUnion(zoomRect, pointRect); 
    } 
    [mapViewPledgeList setVisibleMapRect:zoomRect animated:YES]; 

2)使用showAnnotations

[mapViewPledgeList showAnnotations:mapViewPledgeList.annotations animated:YES]; 

问题: -提出任何解决方案,使所有的注释保持可见的用户。

回答

0

Q]所有注释对用户都是可见的。

  • 不幸的是,不可能设置小于MKMapView最小限制的最小缩放级别。

  • 此外,在下面点苹果官方地图应用程序是不是在同一时间可见

    First annotation Latitude: 23.029690

    First annotation Longitude: 72.527359

    Second annotation Latitude: 34.210855

    Second annotation Longitude: -118.622636

注意:我们无法在最小限制后放大地图视图。

2

不要忘了给地图添加注释。也许这可能是问题

[self.mapView addAnnotation:point]; 
+0

注释已经放置在Map中,但它的所有注释都不可见。 – iMHitesh

+0

我误会质疑@Hiteshsurani –

+0

你能告诉你的代码添加注释@hitesh – vivek

1

你需要告诉的regionmapView正确的值是MKCoordinateRegion类型。你需要做一些计算,然后才能告诉mapView显示正确的region

A.通过遍历所有可用坐标数组找出以下变量的值。

CLLocationDegrees minLatitude = // To be calculated 
CLLocationDegrees maxLatitude = // To be calculated 

CLLocationDegrees minLongitude = // To be calculated 
CLLocationDegrees maxLongitude = // To be calculated 

B.计算地图的中心坐标。

CLLocationCoordinate2D center = 
CLLocationCoordinate2DMake((maxLatitude+minLatitude)/2, (maxLongitude+minLongitude)/2); 

C.计算latitudeDeltalongitudeDelta值 -

CLLocationDegrees latitudeDelta = ABS(maxLatitude-minLatitude)*2; 
CLLocationDegrees longitudeDelta = ABS(maxLongitude-minLongitude)*2; 

D.计算span

MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta); 

E.计算region并告诉你mapView表明这一点 -

MKCoordinateRegion region = MKCoordinateRegionMake(center, span); 
[mapView setRegion:region animated:YES]; 

有几个方面的考虑,而这样做就像你希望有多少最大/最小latitudeDeltalongitudeDelta支持。当您计算值时,可以将其应用于步骤C.

希望这会有所帮助。

+0

没有为我 – iMHitesh

0

您需要通知mapview完美区域,以便所有注释引脚都可见。

swift代码帮助你。

extension MKMapView { 
    func getAllAnnotationExpectCurrntLocation() -> [MKAnnotation] { 
     var arrAnnotion: [MKAnnotation] = self.annotations 
     arrAnnotion = arrAnnotion.filter { $0 !== self.userLocation } 
     return arrAnnotion 
    } 

    func zoomToFitMapAnnotations() { 
     guard self.annotations.count != 0 else { 
      return 
     } 

     var topLeftCordinate = CLLocationCoordinate2D(latitude: -90, longitude: 180) 
     var bottomRightCordinate = CLLocationCoordinate2D(latitude: 90, longitude: -180) 

     for ann in self.getAllAnnotationExpectCurrntLocation() { 
      topLeftCordinate.longitude = fmin(topLeftCordinate.longitude, ann.coordinate.longitude) 
      topLeftCordinate.latitude = fmax(topLeftCordinate.latitude, ann.coordinate.latitude) 

      bottomRightCordinate.longitude = fmax(bottomRightCordinate.longitude, ann.coordinate.longitude) 
      bottomRightCordinate.latitude = fmin(bottomRightCordinate.latitude, ann.coordinate.latitude) 
     } 

     let latitude = topLeftCordinate.latitude - ((topLeftCordinate.latitude - bottomRightCordinate.latitude) * 0.5) 
     let longitude = topLeftCordinate.longitude + ((bottomRightCordinate.longitude - topLeftCordinate.longitude) * 0.5) 

     let latitudeDelta = fabs(topLeftCordinate.latitude - bottomRightCordinate.latitude) * 1.1 
     let longitudeDelta = fabs(bottomRightCordinate.longitude - topLeftCordinate.longitude) * 1.1 
     let span: MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: latitudeDelta, longitudeDelta: longitudeDelta) 

     let centerCordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
     let region: MKCoordinateRegion = MKCoordinateRegion(center: centerCordinate, span: span) 
     let newregion = self.regionThatFits(region) 
     self.setRegion(newregion, animated: true) 

    } 
} 
+0

它的工作对我来说 –

+0

工作并没有为我工作 – iMHitesh

+0

告诉我发出关于“zoomToFitMapAnnotations '修复地图以查看地图上的所有注释。 –

相关问题