如何使用 HERE 地图 android SDK 取消选择标记

How to deselect a marker using HERE map android SDK

我已经注册了 onMapObjectsSelected 事件以了解点击了哪个标记。在调试时,我发现它 returns 所有先前选择的标记以及用户单击的标记。

@Override
public boolean onMapObjectsSelected(List<ViewObject> objects) {
    // objects list holds all markers which are clicked.
    for (ViewObject viewObj : objects) {
        if (viewObj.getBaseType() == ViewObject.Type.USER_OBJECT) {
            if (((MapObject) viewObj).getType() == MapObject.Type.MARKER) {
                MapMarker selectedMarker = ((MapMarker) viewObj);
            }
        }
    }
}

但我需要确定最近从列表中点击了哪个。那么有什么方法可以做到这一点,或者 HERE 地图 SDK 提供了开箱即用的取消选择标记的功能。

标记之间的距离是否足够近,以至于可以通过相同的点击手势全部选中它们?点击手势使用一个小边界框来检查使用 Map#getSelectedObjects(ViewRect rect) API 的选定对象。如果是这样,API 可以返回多个对象。它不应该像您所描述的那样保存先前选择的对象的状态,因此可能这些对象靠得太近以至于它们都被选中了。

如果是这种情况,返回的 List<ViewObject> 中的第一项应该是最佳匹配。如果看起来不是,您可以尝试使用 Map#pixelToGeo(PointF point) 按与实际触摸点的距离排序,并使用 GeoCoordinate#distanceTo(GeoCoordinate coord) 比较触摸点和 ViewObject 的距离。或者,您可以尝试使用 onTapEvent(PointF p) 中的 PointF 直接调用 Map#getSelectedObjects(PointF p)。虽然这在触摸点周围不会有误差,因此触摸交互可能不会那么愉快。