百度地图显示路线,自适应范围

百度地图显示路线,自适应范围

百度地图上添加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);
  1. 先取一个BMKMapRectNull空矩形
  2. BMKMapPointForCoordinate(CLLocationCoordinate2D coordinate)利用这个API,将点转换成直角地理坐标
  3. 根据坐标生成矩形BMKMapRectMake(<#double x#>, <#double y#>, <#double width#>, <#double height#>)。x、y就是转换的坐标,宽高为0.
  4. 利用BMKMapRect BMKMapRectUnion(BMKMapRect rect1, BMKMapRect rect2);生成两个矩形的并集。
  5. 由于是多个点,所以要for循环。空矩形只使用一次。矩形并集与下一个矩形点取并集。
  6. 得到所有点的矩形并集。调用地图的- (void)setVisibleMapRect:(BMKMapRect)mapRect animated:(BOOL)animate设置地图展示区域。最终完全显示在地图的区域内。
  7. 可以调用- (void)setVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate来设置四边间距。

到此地图路线就可以全部展示在屏幕范围内。

个人拙见,仅供参考。有不足之处还望大牛们不吝赐教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值