1

アドレス検索で作成されたドラッグ可能なマーカーがあり、マーカーの周りに円を作成し、マーカーを移動するたびに円を削除し、マーカーの移動を停止すると別の円を作成する必要があります。問題は、検索を 1 回だけ行うと問題なく動作し、2 回目の検索を行うと、新しいマーカーがある場所に新しい円が作成され、マーカーまたはマップを移動しようとすると、他の 2 つの円が作成されることです。どこからともなく作成され、2 つの追加の円が作成された後にマーカーを移動すると、これらの 2 つの円は最初のマーカー (現在は削除されています) の開始座標に移動し、同じ最初のマーカーの最終座標に移動します。これらのサークルを完全に削除するにはどうすればよいですか? group.removeObject、group.removeAll、delete circle、circle = null、circle = undefined を試しましたが、どれも機能しませんでした。

Uncaught IllegalOperationError: H.map.Group#removeObject object not found
function addDraggableMarker(map, behavior) {
  group.removeAll();

  let marker = new H.map.Marker(
    { lat: latit, lng: longi },
    {
      volatility: true,
    }
  );
  marker.draggable = true;
  group.addObject(marker);
  circle = new H.map.Circle({ lat: lati, lng: long }, raioF);
  group.addObject(circle);

  map.addEventListener(
    "dragstart",
    function (ev) {
      group.removeObject(circle);
      let target = ev.target,
        pointer = ev.currentPointer;
      if (target instanceof H.map.Marker) {
        let targetPosition = map.geoToScreen(target.getGeometry());
        target["offset"] = new H.math.Point(
          pointer.viewportX - targetPosition.x,
          pointer.viewportY - targetPosition.y
        );
        behavior.disable();
      }
    },
    false
  );

  map.addEventListener(
    "dragend",
    function (ev) {
      let target = ev.target;
      if (target instanceof H.map.Marker) {
        behavior.enable();
        latit = marker.b.lat;
        longi = marker.b.lng;
      }
      circle = new H.map.Circle({ lat: lati, lng: long }, raioF);
      group.addObject(circle);
    },
    false
  );

  map.addEventListener(
    "drag",
    function (ev) {
      let target = ev.target,
        pointer = ev.currentPointer;
      if (target instanceof H.map.Marker) {
        target.setGeometry(
          map.screenToGeo(
            pointer.viewportX - target["offset"].x,
            pointer.viewportY - target["offset"].y
          )
        );
      }
    },
    false
  );
}
4

1 に答える 1