iOS开发-地图根据展示大头针动态缩放可视范围
2018-10-25 本文已影响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];
}
非原创: 原文链接弄丢了.