AppDataMap标准化

存在的问题:
一、不支持midmif数据格式
        (一)无法摆脱数据的前处理工作
二、存在三个有效分支,各分支数据编译功能相互独立
        (一)四轮的数据编译
        (二)两轮的数据编译
        (三)步行的数据编译
三、不支持参数可选配置和启动
        (一)当前启动不可传入任何参数进行配置和选择
四、不支持http等请求方式进行交互
五、CPP-ATLAS标准化空白
六、应用线上监控日志告警空白


核心板块:
●AppDataMap工程改造
        ○多分支能力集成
        ○midmif格式支持
        ○Webserver兼容
●ATLAS 标准化
        ○构建
        ○部署
●AppHelloMapDataFactory功能完善
        ○hlog
        ○健壮性
        ○sentry
        ○告警


主要工作内容:
3.1AppDataMap工程改造


3.1.1改造前的检验
在做工程改造之前,首先要先确认数据编译分支中两轮、步行分支是否可以直接使用四轮分支替代,在预处理过程中再用lua文件区分预处理工作。
对比结果:
2000 case.csv

均与高德策略比较

策略

百度-骑行策略

线上cycling策略

bicycledatacompile (2022M9)

feature-shp2osm-compiler-with-ETA-logicSimplify(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

bicycle.lua

bicycle.lua

距离-整体差异率

0.143

0.176

0.175

0.327

距离-badcase占比

0.156

0.188

0.194

0.225

20000 case

均与高德策略比较

策略

百度-骑行策略

线上cycling策略

bicycledatacompile(2022M9)

feature-shp2osm-compiler-with-ETA-logicSimplify(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

bicycle.lua

bicycle.lua

距离-整体差异率

0.151

0.365

0.199

0.292

距离-badcase占比

0.144

0.209

0.206

0.235

●结论
仅仅使用一个数据编译逻辑无法同时满足四轮、两轮、步行多个场景的需求,决定改造数据编译达到同一工程同一分支支持多场景数据编译。


3.1.2变更方向

SOCKET

路径规划服务部署现状-第 3 页.png


变更内容
1. 支持四轮、两轮、步行数据的输出
2. 支持EMG、NIMIF、腾讯等图商数据的输入
3. 支持 SOCKET 申请域名
        申请AppHelloMapDataFactory应用
        申请应用域名
4. 支持参数参数配置端口、线程上限、版本号
5. 支持MID MIF;
6. 支持webserver,无需重复atlas发布

3.1.3开发详情
开发List
支持web-server在线请求编译的能力
支持walking、driving、cycling
支持参数部署dataComplier服务
支持并发编译三种Mode数据
支持子线程数量可以控制
日志的打印问题在在多线程下如何区分出来
监控信息的增加


问题记录:
3.1.3.1std::thread.detach()
在使用 detach() 函数时,有一些注意事项需要考虑:
1确保线程已经完成工作:在调用 detach() 之前,确保线程已经完成了它的工作,或者你能够确定线程可以安全地在后台运行。如果线程仍然在执行关键任务,而主线程提前结束并分离了该线程,可能会导致资源泄漏或未定义行为。
2确保线程对象的生命周期有效:被分离的线程对象在分离后仍然需要保持有效的生命周期,以确保线程的运行正常。如果线程对象超出了其作用域或被销毁,而分离的线程仍在执行,可能会导致不确定的行为或崩溃。确保线程对象的生命周期足够长,或者使用动态分配的线程对象(使用 new 创建线程对象)。
3无法获取线程的返回值:一旦线程被分离,主线程将无法获取该线程的返回值。如果你需要获取线程的返回值或执行状态,那么不应该使用 detach(),而是使用 join() 函数等待线程完成并获取其结果。
4不要对已分离线程调用 join():已经分离的线程与主线程没有关联,因此不能对已分离的线程对象调用 join() 函数。如果尝试在已分离线程上调用 join(),将导致运行时错误。
5注意线程安全性:在多线程编程中,需要注意线程之间共享数据的安全性。确保在访问共享数据时进行适当的同步和互斥操作,以避免竞态条件和数据损坏。
总之,使用 detach() 函数需要谨慎考虑,并确保满足上述注意事项。detach() 适用于那些你希望让线程在后台运行,不需要等待其完成的情况。如果你需要管理线程的状态、等待线程完成并获取其结果,那么应该使用 join() 函数或其他适当的同步机制。

image.png


3.1.4.2变量作用域
主程序下的变量,和request中的变量,二者的作用域不同产生的影响也是不同的。

image.png


3.1.4.3互斥锁的问题:
#include <condition_variable>
#include <mutex>
使用mutex锁以实现互斥和计数,创建全局变量 std::mutexmtx,在特定的作用域下方,使用:std::unique_lock<std::mutex> lock(mtx) 来完成互斥。


3.2ATLAS 标准化
3.2.1CPP/C 应用发布的基础模板

涉及内部数据此处不做展示。


3.4 数据编译功能验证
3.4.1四轮验证


结论:比较对照组和实验组数据编译结果,二者产生的文件完全一致。(符合预期)
3.4.2两轮验证
●测试输入数据(广州市—单车订单的开关锁位置):

bike_case.csv(1.1 MB)

bike_test_2000.csv(114 kB)
●对比结果:
1474 case

均与高德策略比较

策略

百度-骑行策略

线上cycling策略
(2020Q4)

bicycledatacompile (2022M9)

feature-shp2osm-compiler-with-ETA-standardize(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

bicycle.lua

bicycle.lua

距离-整体差异率

0.143

0.178

0.175

0.177

距离-badcase占比

0.155

0.189

0.184

0.187

14408 case

均与高德策略比较

策略

百度-骑行策略

线上cycling策略
(2020Q4)

bicycledatacompile(2022M9)

feature-shp2osm-compiler-with-ETA-standardize(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

bicycle.lua

bicycle.lua

距离-整体差异率

0.171

0.438

0.22

0.22

距离-badcase占比

0.155

0.213

0.207

0.206

结论:比较对照组和实验组的骑行路径规划结果,实验组的效果优于对照组(线上效果)。
3.4.3步行验证
●测试输入数据(广州市—单车订单的开关锁位置):

bike_case.csv(1.1 MB)

bike_test_2000.csv(114 kB)
●对比结果:
1474 case

均与高德策略比较

策略

百度-步行策略

线上walking策略

walkingdatacompile (2022M9)

feature-shp2osm-compiler-with-ETA-standardize(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

foot.lua

foot.lua

距离-整体差异率

0.065

0.109

0.105

0.104

距离-badcase占比

0.036

0.095

0.09

0.089

14391 case

均与高德策略比较

策略

百度-步行策略

线上walking策略

walkingdatacompile (2022M9)

feature-shp2osm-compiler-with-ETA-standardize(2022M9)

unrelease-5.28.0/hellomaproute-independent-master

unrelease-5.28.0/hellomaproute-independent-master

foot.lua

foot.lua

距离-整体差异率

0.066

0.463

0.134

0.133

距离-badcase占比

0.042

0.102

0.099

0.099

结论:比较对照组和实验组的骑行路径规划结果,实验组的效果优于对照组(线上效果)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值