当前位置: 首页 > news >正文

iOS 高德地图轨迹回放的 思路, 及方法

// 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度,

开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法

/**

* @brief 将经纬度转换为指定view坐标系的坐标

* @param coordinate 经纬度

* @param view 指定的view

* @return 基于指定view坐标系的坐标

*/

- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;

 

// 我把经纬度转换成坐标点, 然后构建 path

/* 构建path, 调用着负责释放内存. */

- (CGMutablePathRef)pathForPoints:(CGPoint *)points count:(NSUInteger)count

{

if (points == NULL || count <= 1)

{

return NULL;

}

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddLines(path, NULL, points, count);

return path;

}

 

//  在然后直接用 path ,初始化一个 CAShapeLayer ,做成动画不就成了 吗, 在它跑完之后直接删除, 再用 高德地图的折线替换,

// 这种方法也可以, 但是后来需求改了, 要求地图旋转,并且地图中心点一直在跑动的点上,

这样,我以屏幕坐标构建的 path 一旦地图旋转, 就全乱了,

 

// 后来我又想到一个办法, 我从地图手机上定位画线得到的灵感, 我把经纬度点两个两个连成一个个短的折线,放到一个数组里面 ,然后定义了一个 index 属性,  再用一个定时器不停的循环, 在定时器的方法中,用

[self.mapView addOverlay:self.mapOverlayArr[self.index] level:MAOverlayLevelAboveRoads];

不停加载线路在地图上, 同时把地图的中心点, 定位在 经纬度数组取到的最新的经纬度上

CLLocation * location = self.locationArray[self.index];

[self.mapView setCenterCoordinate:location.coordinate animated:NO];

,这样就能保证地图中心一直在跑动的点上, 而且定时器  方法  加载线路够快的话, 就能产生动画效果, 

 

然而, 又出现了问题, 定时器不停的运行

mapView 不停的加载 addOverlay ,使得屏幕非常卡, 经纬度少的话还看不出来, 一旦经纬度多了, 卡的不要不要的, 完全受不了, 而且手机非常烫, 电池都快烧坏了,, 所以这种方法不可行, 至少不完善

 

// 后来我研究高德地图的画线方法, 发现一个 方法

/**

* @brief 重新设置折线坐标点. since 5.0.0

* @param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理

* @param count 坐标点的个数

* @return 是否设置成功

*/

- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count;

 

// 这个方法只用一条折线, 但是可以不停的改变这条折线的位置, 

 

终于利用这个方法 不卡了, 画线的过程中 FPS 60 左右, 完美

 

// 因为文件太大就 不上传了

转载于:https://www.cnblogs.com/dingzhijie/p/7411799.html

相关文章:

  • Redis - 事务
  • P1077 摆花
  • 过滤器与监听器知识总结
  • 数位DP入门
  • js匿名函数
  • Could not resolve resource location pattern错误解决方案
  • PAT乙级-1026. 程序运行时间(15)
  • HTTP中GET与POST的区别 99%的错误认识
  • 好汉两个半第十二季/全集Two and a Half Men迅雷下载
  • Learning How to Learn
  • 一起玩树莓派3+使用Gitlab搭建专业Git服务
  • Android Finalizing a Cursor that has not been deactivated or closed
  • 土耳其重大数据泄露事件 数据库安全受关注
  • 互联网分析师:5G距离我们还有多远?
  • oracle增加sequence
  • 《Java编程思想》读书笔记-对象导论
  • 【React系列】如何构建React应用程序
  • Redux系列x:源码分析
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • XML已死 ?
  • 半理解系列--Promise的进化史
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 翻译:Hystrix - How To Use
  • - 概述 - 《设计模式(极简c++版)》
  • 嵌入式文件系统
  • 容器服务kubernetes弹性伸缩高级用法
  • nb
  • Linux权限管理(week1_day5)--技术流ken
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (HAL库版)freeRTOS移植STMF103
  • (补)B+树一些思想
  • (二)springcloud实战之config配置中心
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (转)ObjectiveC 深浅拷贝学习
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET企业级应用架构设计系列之开场白
  • ::什么意思
  • @ModelAttribute使用详解
  • @property python知乎_Python3基础之:property
  • [BUUCTF 2018]Online Tool
  • [C++核心编程](四):类和对象——封装
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [CISCN2019 华东南赛区]Web4
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [hive] posexplode函数
  • [Java基础] Java中List.remove报错UnsupportedOperationException
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘