zoukankan      html  css  js  c++  java
  • MKMapView缩放显示全部annotation(转)

    原文  http://blog.csdn.net/favormm/article/details/8028026
    #define MINIMUM_ZOOM_ARC 0.014 //approximately 1 miles (1 degree of arc ~= 69 miles)
    #define ANNOTATION_REGION_PAD_FACTOR 1.15 #define MAX_DEGREES_ARC 360 //size the mapView region to fit its annotations - (void)zoomMapViewToFitAnnotations:(MKMapView *)mapView animated:(BOOL)animated { NSArray *annotations = mapView.annotations; int count = [mapView.annotations count]; if ( count == 0) { return; } //bail if no annotations //convert NSArray of id <MKAnnotation> into an MKCoordinateRegion that can be used to set the map size //can't use NSArray with MKMapPoint because MKMapPoint is not an id MKMapPoint points[count]; //C array of MKMapPoint struct for( int i=0; i<count; i++ ) //load points C array by converting coordinates to points { CLLocationCoordinate2D coordinate = [(id <MKAnnotation>)[annotations objectAtIndex:i] coordinate]; points[i] = MKMapPointForCoordinate(coordinate); } //create MKMapRect from array of MKMapPoint MKMapRect mapRect = [[MKPolygon polygonWithPoints:points count:count] boundingMapRect]; //convert MKCoordinateRegion from MKMapRect MKCoordinateRegion region = MKCoordinateRegionForMapRect(mapRect); //add padding so pins aren't scrunched on the edges region.span.latitudeDelta *= ANNOTATION_REGION_PAD_FACTOR; region.span.longitudeDelta *= ANNOTATION_REGION_PAD_FACTOR; //but padding can't be bigger than the world if( region.span.latitudeDelta > MAX_DEGREES_ARC ) { region.span.latitudeDelta = MAX_DEGREES_ARC; } if( region.span.longitudeDelta > MAX_DEGREES_ARC ){ region.span.longitudeDelta = MAX_DEGREES_ARC; } //and don't zoom in stupid-close on small samples if( region.span.latitudeDelta < MINIMUM_ZOOM_ARC ) { region.span.latitudeDelta = MINIMUM_ZOOM_ARC; } if( region.span.longitudeDelta < MINIMUM_ZOOM_ARC ) { region.span.longitudeDelta = MINIMUM_ZOOM_ARC; } //and if there is a sample of 1 we want the max zoom-in instead of max zoom-out if( count == 1 ) { region.span.latitudeDelta = MINIMUM_ZOOM_ARC; region.span.longitudeDelta = MINIMUM_ZOOM_ARC; } [mapView setRegion:region animated:animated]; } - (void)viewWillAppear:(BOOL)animated { [self zoomMapViewToFitAnnotations:self.mapView animated:animated]; //or maybe you would do the call above in the code path that sets the annotations array }
  • 相关阅读:
    计算公式以及参数数量计算
    sqlmap查找SQL注入漏洞入门
    动态密码卡TOTP算法
    使用windbg分析iis崩溃的一个实例
    windbg加载sos.dll
    wndbg下载与安装
    windbg入门
    IIS崩溃时自动抓取Dump
    net组件转化成COM组件
    dokuwiki安装部署
  • 原文地址:https://www.cnblogs.com/xiaobaizhu/p/3469335.html
Copyright © 2011-2022 走看看