上班已经两个月有余,通勤路线早已驾轻就熟。不过,随着暑假的结束,路上的车流明显增加,堵车也变得更加频繁。为了节省时间,我决定借助地图导航来选择耗时更少的路线,为此使用 iOS 快捷指令自动通勤导航。

URL Schemes 调用高德地图

日常通勤我习惯使用高德地图。经过查询,我找到了它提供的 URL Schemes,可以直接调用以启动导航。

iosamap://navi?sourceApplication=快捷指令&poiname=[A]&poiid=[B]&lat=[C]&lon=[D]&dev=0

<aside> 💡

其中,

A:目的地名称

B:目的地名称对应 POI ID

C:纬度

D:经度

</aside>

目的地名称可自定义,B、C 和 D 可通过在地图选定位置后分享链接得到。如:

<https://www.amap.com/?p=B021305SHC,36.661073,117.015873,趵突泉,济南市历下区趵突泉南路1号,370100>

<aside> 💡

B 即为「B021305SHC」

C 即为「36.661073」

D 即为「117.015873」

</aside>

工作日判断

由于此快捷指令仅用于工作日的通勤,非工作日驾车时显然不需要运行它。简单地通过周一至周五来判断工作日未免过于片面,毕竟在社会主义调休制度下,有时周六或周日也需要上班,或者节假日可能落在周一至周五。幸运的是,互联网上有相关的 API 接口可以提供精确的工作日和节假日判断。

我选择使用了这个 API 接口:

<https://date.appworlds.cn/work>

使用 POST 或 GET 请求方式可以成功返回:

{"code":200,"data":{"date":"2024-09-07","work":false},"msg":"ok"}

work 加以匹配即可,true为工作日,false为节假日。

运行流程

由于早上习惯去商场买早饭,上班的导航顺序通常是从家到商场,再到公司。因此,在梳理导航流程时,添加了一步位置判断,确保导航顺序正确无误。

flowchart
    A[连接车载蓝牙] --> B{工作日}
    B -->|是| C[获取当前位置]
    B -->|否| G[结束]
    C --> D{在商场}
    D -->|是| E[导航去公司]
    D -->|否| F[获取当前时间]
    F --> H{早上七点}
    H -->|是| I[导航去商场]
    H -->|否| J{傍晚五点}
    J -->|是| K[导航回家]
    J -->|否| G[结束]

制作快捷指令

顺手添加了开启导航后自动播放音乐的指令。