iOS根据坐标数据点所在的坐标区域来动态显示到可视范围

在地图上标注很多点之后,地图的中心点可以设置,但是缩放级别用起来就有点囧了,

所以,就需要根据坐标数据点所在的坐标区域来动态计算,把所有点都刚好显示到地图的可视范围内。

直接上代码:

    //清理坐标数据的视图和数据
    [_bMapView removeAnnotations:_mapAnnotations];
    [_mapAnnotations removeAllObjects];
    [_carPointArray removeAllObjects];
    //声明解析时对坐标数据的位置区域的筛选,包括经度和纬度的最小值和最大值
    CLLocationDegrees minLat;
    CLLocationDegrees maxLat;
    CLLocationDegrees minLon;
    CLLocationDegrees maxLon;
    //解析数据
    for (int i=0; i<rows.count; i++) {
        NSDictionary *row = [rows objectAtIndex:i];
        坐标模型类 *item = [[坐标模型类 alloc] initWithJson:row];
        if (item.vehicleNo && [item.vehicleNo length]>0) {
            标注模型类 *annotation = [[标注模型类 alloc] init];
            annotation.coordinate = item.baiduCoordinate;
            annotation.item = item;
            [_mapAnnotations addObject:annotation];
            [_bMapView addAnnotation:annotation];
            [annotation release];

            if (i==0) {
                //以第一个坐标点做初始值
                minLat = item.baiduCoordinate.latitude;
                maxLat = item.baiduCoordinate.latitude;
                minLon = item.baiduCoordinate.longitude;
                maxLon = item.baiduCoordinate.longitude;
            }else{
                //对比筛选出最小纬度,最大纬度;最小经度,最大经度
                minLat = MIN(minLat, item.baiduCoordinate.latitude);
                maxLat = MAX(maxLat, item.baiduCoordinate.latitude);
                minLon = MIN(minLon, item.baiduCoordinate.longitude);
                maxLon = MAX(maxLon, item.baiduCoordinate.longitude);
            }

            [_carPointArray addObject:item];
        }
        [item release];
    }
    //动态的根据坐标数据的区域,来确定地图的显示中心点和缩放级别
    if (_carPointArray.count > 0) {
        //计算中心点
        CLLocationCoordinate2D centCoor;
        centCoor.latitude = (CLLocationDegrees)((maxLat+minLat) * 0.5f);
        centCoor.longitude = (CLLocationDegrees)((maxLon+minLon) * 0.5f);
        BMKCoordinateSpan span;
        //计算地理位置的跨度
        span.latitudeDelta = maxLat - minLat;
        span.longitudeDelta = maxLon - minLon;
        //得出数据的坐标区域
        BMKCoordinateRegion region = BMKCoordinateRegionMake(centCoor, span);
        //百度地图的坐标范围转换成相对视图的位置
        CGRect fitRect = [_bMapView convertRegion:region toRectToView:_bMapView];
        //将地图视图的位置转换成地图的位置
        BMKMapRect fitMapRect = [_bMapView convertRect:fitRect toMapRectFromView:_bMapView];
        //设置地图可视范围为数据所在的地图位置
        [_bMapView setVisibleMapRect:fitMapRect animated:YES];

    }

  

补充:

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

  

最后来张效果图:

iOS根据坐标数据点所在的坐标区域来动态显示到可视范围

时间: 2024-10-21 14:53:17

iOS根据坐标数据点所在的坐标区域来动态显示到可视范围的相关文章

验证坐标在某片坐标区域内 php 代码

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内. 以下是PHP代码的实现 (仅验证坐标在某片坐标区域内) <?php /** * 验证坐标点是否在某区域内 * @author xiaoliang <[email protected]> * Class validationMap */ class validationMap{ private static $coordArray; private static

php验证地图坐标在某片坐标区域内

mysql空间查询并不太适合地图坐标,如果使用:http://www.cnblogs.com/tyjsjl/p/8760002.html的方式进行地图点坐标的查询就不好用了,于是直接使用php来进行地图范围的查询更方便点.代码如下: 1 /** 2 * 验证坐标点是否在某区域内 3 * @author xiaoliang <[email protected]> 4 * Class validationMap 5 */ 6 class validationMap{ 7 private $coor

关于iOS应用管理之九宫格的坐标计算以及与UIScrollView的结合

关于九宫格的布局以及坐标的计算,对于大多数的iOS初学者甚至有一定能力的学者来说都是一大难题,在此写者通过自己的开发经验以及多次应用,把自己的所学所得分享给大家,就通过应用管理来进行浅谈一二.     1. 功能分析:通过九宫格的样式添加相应的应用:当点击“下载”按钮时会执行相应的操作 2.实现步骤:1>.首先加载相应的应用信息:2>.根据应用的个数添加相对应的view:3>.实现按钮的点击事件,完成相应的后续操作 分析:格局布局的规律,每一个UIView的x坐标 和 y坐标与布局的行列

iOS开发&gt;学无止境 - 截取UIImage指定大小区域

最近遇到这样的需求:从服务器获取到一张照片,只需要显示他的左半部分,或者中间部分等等.也就是截取UIImage指定大小区域. UIImage扩展 我的解决方案是对UIImage进行扩展.通过CGImageRef和CGImage完成截取,调用的方法是:CGImageCreateWithImageInRect.扩展类叫UIImage+Crop,具体代码如下: UIImage+Crop.h #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, XYCr

获取当前鼠标所在的坐标

获取鼠标的当前坐标,可以用pageX or pageY就可以实现,代码特别的简单,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>pageX or pageY</title> <script type="text/javascript" src="../js/jquery.js">

iOS 获取当前界面所在的视图控制器

当前界面所在的视图控制器 逐步完善的过程 一. //获取当前屏幕显示的viewcontroller (这里面获取的相当于rootViewController) - (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindow

iOS 获取当前点击的坐标

1 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2 3 { 4 NSSet *allTouch = [event allTouches]; 5 UITouch *touch = [allTouch anyObject]; 6 CGPoint point = [touch locationInView:[touch view]]; 7 int x = point.x; 8 int y =

iOS - 通过view查找所在(viewController)

- (UIViewController *)findViewController:(UIView *)sourceView { id target=sourceView; while (target) { target = ((UIResponder *)target).nextResponder; if ([target isKindOfClass:[UIViewController class]]) { break; } } return target; }

iOS 之 获取View所在控制器

1. UIResponder UIViewController *uvc; UIResponder* nextResponder = [self.superview.superview.superview nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) { uvc = (UIViewController*)nextResponder; } 2.获取当前屏幕中present出来的viewcont