2017-05-24 12 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 

私は解決策の下にしようとしたが、それは動作しませんでした。 showAnnotations

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

発行使用)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を使用

1): -ので、すべての注釈がユーザに見える保つ任意の解決策を示唆しています。

答えて

0

質問]すべての注釈がユーザーに見えるようにします。

  • 残念ながら、最小ズームレベルをMKMapViewの最小値より小さく設定することはできません。点以下アップル公式マップアプリケーションでも

  • が同時に表示されていない

    First annotation Latitude: 23.029690

    First annotation Longitude: 72.527359

    Second annotation Latitude: 34.210855

    Second annotation Longitude: -118.622636

注:マップビューを最小限にしてからズームインすることはできません。

2

注釈を地図に追加することを忘れないでください。多分これはあなたがタイプMKCoordinateRegionであるregionmapView正しい値を伝える必要があり、問題

[self.mapView addAnnotation:point]; 
+0

アノテーションはすでにマップに配置されていますが、すべてのアノテーションは同時に表示されません。 – iMHitesh

+0

私は@Hiteshsurani –

+0

質問を誤解あなたは注釈を追加するようにコードを表示することができます – vivek

1

である可能性があります。 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を通知する必要があります。

以下のスウィフトコードはお手伝いします。

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

そのは私は私が点「zoomToFitMapAnnotationsを発行伝える –

+0

は動作しませんでした私のために働いた私のために動作しませんでした私のために動作しませんでした@hitesh '地図上のすべての注釈を表示するように地図を修正します。 – iMHitesh

+0

ため –

関連する問題