百度地图显示路线,自适应范围
百度地图上添加overlay路线或者点,展示范围如何确定?
路线或者点的本质是什么?
- 点有对应的经纬度,在地图坐标系里也有对应的坐标(x,y)
- 路线由overlay绘制,本质也就是许多个点组成的
如何让地图上的路线(多点)和点 根据位置都展现在屏幕内(指定范围内)?
- 一个点再小,也可以看作一个矩形面(矩形)
- 无数个点就是无数个矩形面
- 把所有矩形面放在屏幕(指定范围/矩形)内
- 取这些矩形面的并集,再按照显示范围设置
矩形面的并集怎么求?
- 看百度SDK提供的工具类里的API:
#pragma mark -----坐标转换
/**
*将经纬度坐标转换为投影后的直角地理坐标
*@param coordinate 待转换的经纬度坐标
*@return 转换后的直角地理坐标
*/
UIKIT_EXTERN BMKMapPoint BMKMapPointForCoordinate(CLLocationCoordinate2D coordinate);
/**
*计算两个矩形的并集
*@param rect1 矩形1
*@param rect2 矩形2
*@return 两个矩形的并集
*/
UIKIT_EXTERN BMKMapRect BMKMapRectUnion(BMKMapRect rect1, BMKMapRect rect2);
- 先取一个
BMKMapRectNull
空矩形 BMKMapPointForCoordinate(CLLocationCoordinate2D coordinate)
利用这个API,将点转换成直角地理坐标- 根据坐标生成矩形
BMKMapRectMake(<#double x#>, <#double y#>, <#double width#>, <#double height#>)
。x、y就是转换的坐标,宽高为0. - 利用
BMKMapRect BMKMapRectUnion(BMKMapRect rect1, BMKMapRect rect2);
生成两个矩形的并集。 - 由于是多个点,所以要for循环。空矩形只使用一次。矩形并集与下一个矩形点取并集。
- 得到所有点的矩形并集。调用地图的
- (void)setVisibleMapRect:(BMKMapRect)mapRect animated:(BOOL)animate
设置地图展示区域。最终完全显示在地图的区域内。 - 可以调用
- (void)setVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate
来设置四边间距。
到此地图路线就可以全部展示在屏幕范围内。
个人拙见,仅供参考。有不足之处还望大牛们不吝赐教。