美文网首页iOS收藏
iOS开发-地图根据展示大头针动态缩放可视范围

iOS开发-地图根据展示大头针动态缩放可视范围

作者: 番茄炒西红柿啊 | 来源:发表于2018-10-25 16:26 被阅读30次
    • 如果项目中使用的是百度地图sdk,将下方的相关API开头2位字母改成MK即可
    • 如果项目中使用的是高德地图sdk,将下方的相关API开头2位字母改成MA即可
    • 如果项目中使用的是系统原生框架,改成对应的API开头字母即可.
    #pragma mark - 根据所有的大头针坐标,计算显示范围,屏幕能够刚好显示大头针
    #define CW_MINIMUM_ZOOM_ARC 0.014
    #define CW_ANNOTATION_REGION_PAD_FACTOR 1.15
    #define CW_MAX_DEGREES_ARC 360
    - (void)zoomMapViewToFitAnnotations:(MAMapView *)mapView animated:(BOOL)animated
    {
        NSArray *annotations = mapView.annotations;
        NSInteger count = [mapView.annotations count];
        if ( count == 0) { return; }
        MAMapPoint points[count];
        for( int i=0; i<count; i++ )
        {
            CLLocationCoordinate2D coordinate = [(id <MAAnnotation>)[annotations objectAtIndex:i] coordinate];
            points[i] = MAMapPointForCoordinate(coordinate);
        }
        MAMapRect mapRect = [[MAPolygon polygonWithPoints:points count:count] boundingMapRect];
        // 因为,中间的一个大头针居中显示,所以这里的size要减一半.所以乘以二
    //    mapRect.size.width = mapRect.size.width * 2;
    //    mapRect.size.height = mapRect.size.height * 2;
        
        mapRect.size.width = mapRect.size.width;
        mapRect.size.height = mapRect.size.height;
        
        MACoordinateRegion region = MACoordinateRegionForMapRect(mapRect);
        
        region.span.latitudeDelta  *= CW_ANNOTATION_REGION_PAD_FACTOR;
        region.span.longitudeDelta *= CW_ANNOTATION_REGION_PAD_FACTOR;
        
        if( region.span.latitudeDelta > CW_MAX_DEGREES_ARC ) { region.span.latitudeDelta  = CW_MAX_DEGREES_ARC; }
        if( region.span.longitudeDelta > CW_MAX_DEGREES_ARC ){ region.span.longitudeDelta = CW_MAX_DEGREES_ARC; }
        
        if( region.span.latitudeDelta  < CW_MINIMUM_ZOOM_ARC ) { region.span.latitudeDelta  = CW_MINIMUM_ZOOM_ARC; }
        if( region.span.longitudeDelta < CW_MINIMUM_ZOOM_ARC ) { region.span.longitudeDelta = CW_MINIMUM_ZOOM_ARC; }
        if( count == 1 )
        {
            region.span.latitudeDelta = CW_MINIMUM_ZOOM_ARC;
            region.span.longitudeDelta = CW_MINIMUM_ZOOM_ARC;
        }
    //    region.center = self.location1;
        [mapView setRegion:region animated:animated];
    }
    

    非原创: 原文链接弄丢了.

    相关文章

      网友评论

        本文标题:iOS开发-地图根据展示大头针动态缩放可视范围

        本文链接:https://www.haomeiwen.com/subject/xvrctqtx.html