Mapbox博客

源码分析 | 用 Mapbox Android SDK 做一款共享单车 App(下)—— 运营团队端

Mapbox

2019年3月19日

开发者

我们之前分享了消费者端的 App 设计,那么对于共享单车的运营团队,如何提高他们的工作效率呢?这篇文章带你一起了解下。

我们贴心地为你提供了 Demo 和源码

Step 1:地理空间分析库 + 高性能可视化 = 高效的运营

实时资产跟踪

结合我们的地理空间分析库,和高性能的可视化,可以做实时资产跟踪,实现对问题的自动化处理和维护。比如显示需要运营团队干预的车辆,这样现场团队可以在没有调度员帮助的情况下获得优先权。

追踪是否符合城市规定

符合当地政策是非常重要的,虽然有时候挺烦的,而且每个城市的规则又不太一样。这种情况下,我们可以使用地理空间分析库来实时追踪基于位置许可的合规性。

tracking compliance with city permit

提高资产吞吐量

您可以使用这些工具帮助运营人员进行更有策略地进行需求管理,比如使用 Turf.js 增加每天每种资产的使用量。JUMP 使用 Turf.js 预测需求管理,将预计的应用程序打开率和每个十六进制区域的单车数量进行比较,并适当做调整。

micro mob tut ac

通过游戏化激励减轻运营负担

有时候,为了减轻运营负担,我们可以考虑激励用户的方式,让用户帮助我们维护单车网络。在使用 Direction API 推荐路线之前,您也可以使用我们的地理空间分析库发现游戏化、激励等机会。比如引导用户把车停在特定的区域,或者优先为低电量的车辆充电。

micro mob tut ad

micro mob tut ae

Step 2:Navigation SDK 和 Matrix API 保证用户和车辆的合适位置

Navigation SDK

可以通过支持高度定制化的 Navigation SDK 提升用户体验、保持品牌知名度。Navigation SDK 帮助您分配用户到最近的车辆处,并导航到期望的目的地,无需跳转到其他应用。

Matrix API

使用 Matrix API,在不考虑交通方式的情况下,运营者可以为区域团队设计最快、最高效的路线。需要多长时间?满足需求需要多少技术?如何为消费者传达更大的价值?这些类似的问题是我们在关注的。使用 Predictive Large Matrix,借助交通数据,我们可以帮助您解决复杂的优化问题。

通过运行一系列大型矩阵,可以模拟数百万个路径选择,优化求解器可以为您的业务找到最佳解决方案。

热力图

热力图是展示密度和实时趋势比较好的形式,并且您可以使用数据属性来为热力图设计样式。自定义颜色、密度和半径等,还能根据缩放指数控制样式。比如这个例子,运营团队在缩放指数较小的时候可以查看趋势,当放大地图后,热力图层会隐藏,以便显示精细的位置信息,比如这个案例

热力图数据一般可以表达下面这几种场景:

  • 一些地区对车辆有非常迫切的需求
  • 一些地区有很多空闲的车辆
  • 一些地区有一些老用户(比如上周、上个月或者去年用过)
  • 一些地区经常有很多车停在那里
  • 一些地区车辆使用频率非常高,比如旅游景区
  • 一些地区需要更多的车辆(运营团队建议或者充电桩比较多)

如何在 app 中嵌入热力图呢?我们可以使用 Mapbox Studio 中 Datasets 部分,创建一些独立的 GeoJSON Points。过去我们会把 dataset 导出为 tileset。使用 Maps SDK,我们从 Mapbox 账户中检索这些数据并将它设置为 VectorSource,把 VectorSource 设置为参数创建 HeatmapLayer 并加载到地图中。

具体实现方法可以参考下面的代码。

private void addHeatmapData(@NonNull Style loadedMapStyle) {
loadedMapStyle.addSource(new VectorSource(HEATMAP_GEOJSON_SOURCE_ID,
"mapbox://langsmith.cjfsu62ap010i2qrxti214ub6-3pa5v"));
HeatmapLayer heatmapLayer = new HeatmapLayer(HEATMAP_LAYER_ID, HEATMAP_GEOJSON_SOURCE_ID)
.withProperties(
heatmapWeight(interpolate(linear(), zoom(),
stop(0, 4),
stop(6, 10),
stop(MAX_HEATMAP_LAYER_ZOOM, 12))),
heatmapOpacity(.6f),
heatmapRadius(interpolate(linear(), zoom(),
stop(0, 2),
stop(9, 7),
stop(MAX_HEATMAP_LAYER_ZOOM, 12))));
heatmapLayer.setMaxZoom(MAX_HEATMAP_LAYER_ZOOM);
heatmapLayer.setSourceLayer("GoShare_Heatmap_Locations");
loadedMapStyle.addLayerBelow(heatmapLayer, NO_PARK_ZONE_FILL_LAYER_ID);
}

总结

将近两万字的教程终于介绍完了,我们发现原来地图上可以加载这么多的内容啊!这个项目是开源的,欢迎到 Github repo 中提交建议。

如果你在实现的过程中遇到任何问题,可以在 Github repo 中开一个 issue,并发邮件到 tarani@mapox.com 或者 langston.smith@mapbox.com。

你正要离开Mapbox中国网站

并非所有mapbox.com的服务在中国提供