Here api 此处映射API:检测何时将标记拖放到多段线上

Here api 此处映射API:检测何时将标记拖放到多段线上,here-api,Here Api,我在Here地图上有可拖动的标记,我想检测何时将标记拖放到多段线上。我还没有找到一种检测标记是否落在多段线上或附近的好方法。如果我可以向Polyline对象添加一个“dragend”事件监听器,那就太好了,但是除了实际的贴图之外,其他对象似乎都不支持这一点 另一种方法是确定从绘制点到多段线的距离,但我还没有找到一种直接的方法来计算该距离。(尽管我已经找到了查找距离点最近的标记的示例。) 有什么建议吗?可以在地图对象上添加dragend事件侦听器 此代码应适用于您(在3.0 API版本中): 什么

我在Here地图上有可拖动的标记,我想检测何时将标记拖放到多段线上。我还没有找到一种检测标记是否落在多段线上或附近的好方法。如果我可以向Polyline对象添加一个“dragend”事件监听器,那就太好了,但是除了实际的贴图之外,其他对象似乎都不支持这一点

另一种方法是确定从绘制点到多段线的距离,但我还没有找到一种直接的方法来计算该距离。(尽管我已经找到了查找距离点最近的标记的示例。)


有什么建议吗?

可以在地图对象上添加dragend事件侦听器

此代码应适用于您(在3.0 API版本中):


什么版本的javascript API?3.0或3.1?我正在使用3.0,但如果3.1有我需要的东西,我可以考虑迁移。不,在3.0和3.1中对象的拾取是不同的,所以我要求能够提供正确的答案。谢谢!我不知道map.getObjectsAt()。我要试试看!
var lineString = new H.geo.LineString([0, 0, 0, 50, 50, 0]),
    polyline = new H.map.Polyline(lineString, {style: {lineWidth: 15, strokeColor: 'red'}}),
    marker = new H.map.Marker({lat: 30, lng: 0});

  // Ensure that the marker can receive drag events
  marker.draggable = true;

  // add objects to the map
  map.addObjects([polyline, marker]);

  // set map center and zoom
  map.setCenter({lat: 30, lng: 0});
  map.setZoom(3);

  // disable map's behavior and calculate the offset between mouse and target's position
  // when starting to drag a marker object:
  marker.addEventListener('dragstart', function(ev) {
    var target = ev.target,
        pointer = ev.currentPointer,
        targetPosition = map.geoToScreen(target.getGeometry());

    target['offset'] = new H.math.Point(pointer.viewportX - targetPosition.x, pointer.viewportY - targetPosition.y);
    behavior.disable();
  }, false);

  // Listen to the drag event and move the position of the marker
   marker.addEventListener('drag', function(ev) {
    var target = ev.target,
        pointer = ev.currentPointer;
    target.setGeometry(map.screenToGeo(pointer.viewportX - target['offset'].x, pointer.viewportY - target['offset'].y));
  }, false);

  // re-enable behavior and check if marker was dropped on polyline
  marker.addEventListener('dragend', function(ev) {
    behavior.enable();
    var pointer = ev.currentPointer,
        objects = map.getObjectsAt(pointer.viewportX, pointer.viewportY),
        droppedOnPolyline = false;
    objects.forEach(function(object) {
      if (object === polyline) {
        droppedOnPolyline = true;
      }
    });

    console.log('marker dropped on polyline? %s', droppedOnPolyline);
  }, false);