高德地图红绿灯读秒是怎么实现的?(一)

14 篇文章 0 订阅
4 篇文章 0 订阅

关于这个读秒实现功能众说风云,目前有两种说法,一种说是靠大数据分析,一种说是靠交管部门数据。

我们先看一下官方的回应:可以自行去抖音看官方号的解释。

在这里插入图片描述


以下为原答:
有人说是接入了地方交管数据,其实政策难度很大且没必要。合理推测一下:

其实一个路口红绿灯的变化规则是比较固定的,当时国内除了极少数的智能红绿灯(根据车流实时变化红绿灯状态),99%的红绿灯都是固定相位红绿灯。即提前设置好一个相位表,然后周而复始的进行轮换:

在这里插入图片描述
既然相位表是提前设定好的,说明红绿灯的变化规律是周期的,那么作为地图软件,唯一要做的就是想办法估计出这个周期T。

高德等软件的一个能力是读取正在导航的手机的加速度计信息,因此当在此路口很多本来停止的车逐渐起步时,高德事实上可以推断出此处的红绿灯由红转绿了。更重要的是,高德还可以获得正在导航手机的routing信息,因此它甚至很容易的,知道是哪几个车道由红红转绿。于是很容易地可以推算出这个路口的周期T于当前状态S。

之后的任务就更简单了,一方面将推断出信息通过网络分发给用户,一方面根据用户的行为实时微调当前状态于周期T,从而实现长期循环。

但可以想到的一个问题是,如果一个十字路口很长时间没有车通过(例如一夜没过车),那么误差累积下,高德的读秒推算系统就需要在第二天早上逐渐有车的时候进行重新初始化了,有兴趣的同学可以尝试下凌晨四五点开车通过一些十字路口,看看高德的读秒是不是准确。

再更新最后一次:
服了一些二极管们的思考能力了。针对一些问题简单回复。

  1. 为什么有些路口有显示有些路口没有?

    答:学过状态估计的都知道,我们在估计出状态后还会得到一个方差,描述了算法对估计的不确定度。当算法由干数据不足、红绿灯周期时变、当前路线(例如左转)数据匹配不确定等原因时,会出现算法估计方差过大的问题,这时候就不在前端显示了。

  2. 为什么有些路口极其精准,有些路口不准,有些路口没车也很准?

    答:准不准固然与经过的车辆开导航的比例有关,同时也与红绿灯策略的变化频率有关。

    例如一个郊区的红绿灯,交警部门不会给其很复杂的变化策略,那么一日估计出周期,一个月周期都不变,那么算法会逐渐增强对自己估计的肯定,因此会很准确。

    又例如一个繁忙的十字路口,因为刚刚结束早高峰,红绿灯周期发生了切换。那么算法需要根据观测逐步调整估计。但因为历史数据累积的足够多,算法依然很确定自己的估计,所以会导致前端显示出误差较大的结果。

  3. 为什么有些地方交警官方宣传与高德合作?

    答:早期或部分地级市可能存在接入。但是观察新闻可以发现,新闻几乎都是地级市级别的交警部门在宣传,这其实说明地级市之间的数据大概率难以打通,各位想一想中国有多少地级市?高德的产品经理一个一个去谈合作? 这些地级市的交通系统api又有多大差别?后台的程序员们一个城市一个城市写if else? 但凡和政府打过交道,或者开发过大型系统就知道这不靠谱。

  4. 算法估计难以给出这么精确的值?手机级别的传感器难以给出精确启停时间?

    这个估计的难度真的不高,说难估计的大概率《概率论》没怎么学。说大数据不靠谱,过于复杂的大概率没接触过大数据。目前自动驾驶领域,车辆摄像头被遮挡的情况下,仅凭自车感知,都可以比较精确的根据周车状态,估计出红绿灯信息,更别说高德地图这种多源数据了。

    至于说大家一起摇手机干扰估计,其实是可以做到的。前几年就一直有闲的没事的人,拿好多个手机开导航在路上慢慢走,给导航软件,虚假拥堵。

    至一说高德算力不够更扯淡,这算法义不过网络,cpu算算快的一批,搞不好直接用里户手机做一些初步计算,直接上传一个中间结果,云端再做汇总,根本但不了多少算力。

       说了这么多,本质上还是大家即使是程序员,依然对政府有过多幻想,对科技有低估和抵触。

       其实高德,百度估计这个,志不在小。如果是接入交管系统,那么只是把app当一个显示器。但如果是自己估算,那么未来是不是可以将自己估算的结果直接上传到交警系统,然后告诉红绿灯系统,如果这时候变灯,能节省大家多长时间,最终反而去控制红绿灯? 这才是这些智慧城市的低成本,高智慧,高收益形态。虽然现在误差还有,但相信随着算法优化,这一天不会太远。



       最近忙里偷闲,↓↓↓↓【谁家de码农陈先生】↓↓↓↓,里面定时给大家分享技术博文、前方高能资讯内容!欢迎各位老板点赞关注,你们就是我的动力源泉!

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,以下是用Python实现60秒倒计时读秒的代码: ```python import time # 设置倒计时时间为60秒 seconds = 60 while seconds > 0: # 输出当前秒数 print(seconds) # 暂停一秒 time.sleep(1) # 秒数减1 seconds -= 1 # 倒计时结束后输出提示信息 print("倒计时结束!") ``` 这段代码使用了Python的time模块中的sleep函数来控制每次输出秒数的间隔为1秒。在while循环中,每次输出当前秒数后将秒数减1,直到秒数为0时循环结束。倒计时结束后会输出提示信息。 ### 回答2: 可以使用Python中的time模块来实现一个60秒的倒计时读秒。 首先,我们需要引入time模块。 ```python import time ``` 然后,我们使用一个循环来执行倒计时操作。循环从60开始,每次减1,直到倒计时结束。 ```python countdown = 60 while countdown > 0: print(countdown) time.sleep(1) countdown -= 1 ``` 在循环中,我们首先打印当前的倒计时数字,然后使用time模块的sleep函数暂停程序执行1秒钟,以实现读秒效果。接着,将倒计时数字减1,进行下一次循环。 完整的代码如下: ```python import time countdown = 60 while countdown > 0: print(countdown) time.sleep(1) countdown -= 1 ``` 运行这段代码,你将会看到一个从60开始逐渐减少至1的倒计时读秒效果。 ### 回答3: 使用Python语言编写一段60秒倒计时读秒的代码如下: ```python import time def countdown(n): while n > 0: print(n) time.sleep(1) n -= 1 print("倒计时结束!") countdown(60) ``` 上述代码使用`countdown`函数实现倒计时功能,传入倒计时的秒数n。在循环中,每一秒打印当前剩余的秒数,并使用`time.sleep(1)`函数暂停一秒。每次循环时,秒数n减去1,直到n为0时,打印出"倒计时结束"的提示信息。最后,通过调用`countdown(60)`来执行60秒倒计时读秒的功能。 请注意,由于使用了`time.sleep()`函数来实现延迟1秒,因此在运行这段代码时,一次性输出所有读秒是不可能的。您需要根据自己的需要对程序进行适当修改,以实现您所期望的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值