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];
}