MKMapView的层级控制和中心点控制


    MKMapView是苹果Mapkit中的一个控件,在国内使用高德的地图数据;国外使用谷歌;最基础的用法不在此多做赘述,这次我主要来说一下地图的层级控制和中心点控制。

    1.层级控制

地图的层级控制在MKMapView上使用的是当前屏幕范围能显示多少的经纬度来做控制的,我们举个例子,当地图层级最小时我们一个屏幕可以显示整个中国。这个时候的屏幕的显示经纬度范围就是在整个中国的经纬度;而当层级不断放大的时候我们的屏幕也会随着地图的变大造成屏幕的可视范围的经纬度越来越小;

typedef struct {

    CLLocationDegrees latitudeDelta;//可视的维度

    CLLocationDegrees longitudeDelta;//可视的经度

} MKCoordinateSpan;


typedef struct {

CLLocationCoordinate2D center;//屏幕的中心点

MKCoordinateSpan span;//屏幕的可视范围

} MKCoordinateRegion;

这个是地图控制中心点和屏幕可视范围的大小的属性;

当我们理解这个之后,我们会说那是该怎么去控制这个层级的呢;那就是根据你的需要去设置

//zoom 层级 animation 是否执行动画

-(void)setZoom:(int)zoom animation:(BOOL)animation{

    zoom = MIN(MAX(1, zoom), 21);

    double latitude = (139.60702360631893 - 0.000750030999672191) / pow(2, zoom);

    double longitude = (131.83593378759488 - 0.0005029141902923584) / pow(2, zoom);

 [_mapView setRegion: MKCoordinateRegionMake(_mapView.region.center, MKCoordinateSpanMake(latitude, longitude)) animated:animation];

}


下面来说如何控制中心点:

//将传入的py点转化为纬度

-(double)transformPointYToLat:(float)py{

    return _mapView.region.span.latitudeDelta/_mapView.height * py;

}

//将传入的px点转化为经度

-(double)transformPointXToLng:(float)px{

    return _mapView.region.span.longitudeDelta/_mapView.height * px;

}

-(void)setMapCenter:(GPSInfoModel *)centerGPS animation:(BOOL)animation{

//这时地图中心点就会向上移动60个点

    [_mapView setCenterCoordinate:CLLocationCoordinate2DMake(centerGPS.latitude- [self transformPointYToLat:60], centerGPS.longitude) animated:animation];

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值