You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HERE Android Premium SDK 3.18.5点击选择路线功能异常排查

HERE SDK for Android (Premium Edition) 3.18.5 路线点击识别解决方案

你遇到的点击全量命中、MapRoute实例无法匹配的问题,可通过以下步骤解决:

核心逻辑说明

MapRoute是地图渲染层实例,每次从Route创建都会生成新对象,因此无法通过内存地址匹配。SDK为所有MapObject(包含MapRoute)提供了自定义数据绑定能力,结合官方提供的点击拾取接口即可实现精准匹配。

实现步骤

    1. 创建MapRoute时绑定唯一标识
      在初始化三条路线的MapRoute时,通过setUserData()方法给每个MapRoute绑定对应Route的唯一标识,你可以直接用三条路线的下标(0/1/2),也可以绑定Route实例本身:
// 假设你已经有存放三条路线的List<Route> routeList
List<MapRoute> mapRouteList = new ArrayList<>();
for (int i = 0; i < routeList.size(); i++) {
    Route route = routeList.get(i);
    MapRoute mapRoute = new MapRoute(route);
    // 绑定路线下标作为标识,也可以写mapRoute.setUserData(route)直接绑定Route实例
    mapRoute.setUserData(i);
    // 初始状态:第一条高亮,其余灰色
    if (i == 0) {
        mapRoute.setColor(Color.BLUE);
        mapRoute.setZIndex(200);
    } else {
        mapRoute.setColor(Color.GRAY);
        mapRoute.setZIndex(100);
    }
    map.addMapObject(mapRoute);
    mapRouteList.add(mapRoute);
}
    1. 用官方拾取接口处理点击事件
      你之前点击所有路线都会高亮,是因为没有用SDK提供的pickMapObjects接口做精准命中判断,自行判断坐标会因为路线重叠导致误判。正确的点击处理逻辑如下:
@Override
public boolean onTap(PointF tapPoint) {
    // 第二个参数为触摸容差,单位为像素,设置10~15即可适配手指点击误差
    map.pickMapObjects(tapPoint, 15, new Map.PickMapObjectsCallback() {
        @Override
        public void onPickMapObjectsCompleted(List<MapObject> pickedObjects) {
            if (pickedObjects == null || pickedObjects.isEmpty()) {
                return;
            }
            // 过滤拾取结果中的MapRoute,默认取最上层的命中对象
            MapRoute selectedRoute = null;
            for (MapObject obj : pickedObjects) {
                if (obj instanceof MapRoute) {
                    selectedRoute = (MapRoute) obj;
                    break;
                }
            }
            if (selectedRoute == null) {
                return;
            }
            // 取出绑定的标识,匹配对应路线
            int selectedIndex = (int) selectedRoute.getUserData();
            // 执行路线样式更新:所有路线设为灰色低zIndex,选中路线设为高亮高zIndex
            for (int i = 0; i < mapRouteList.size(); i++) {
                MapRoute route = mapRouteList.get(i);
                if (i == selectedIndex) {
                    route.setColor(Color.BLUE);
                    route.setZIndex(200);
                } else {
                    route.setColor(Color.GRAY);
                    route.setZIndex(100);
                }
            }
        }
    });
    return true;
}

注意事项

  • 路线的zIndex分层要固定,未选中路线统一设为低层级,选中路线设为高层级,避免遮挡同时保证拾取优先级正确
  • 不需要每次切换选中状态都重新创建MapRoute,直接调用setColor、setZIndex修改属性即可,性能更好
  • 如果选择直接绑定Route实例到userData,匹配时直接和你本地存储的Route列表做equals判断即可,不需要维护下标

内容的提问来源于stack exchange,提问作者Darrin Reed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:24:03