HERE 地图可拖动和可编辑的半径几何形状(例如:圆形)

HERE maps draggable & editable radius geoshapes (example : Circle)

我需要帮助来修改此代码以使圆形可拖动山墙和可编辑半径。

示例: 用户应该能够将圆拖动到不同的位置并更改半径。

我不确定是否有任何参数或选项可以传递值来激活此功能,如果有人可以帮助我,那将是非常大的帮助。

提前致谢。

function addCircleToMap(map){
  map.addObject(new H.map.Circle(
    // The central point of the circle
    {lat:36.178699, lng:-115.146171},
    // The radius of the circle in meters
    1000,
    {
      style: {
        strokeColor: 'rgba(55, 85, 170, 0.6)', // Color of the perimeter
        lineWidth: 2,
        fillColor: 'rgba(0, 128, 0, 0.7)'  // Color of the circle
      }
    }
  ));
}


//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
  app_id: 'DemoAppId01082013GAL',
  app_code: 'AJKnXv84fjrb0KIHawS0Tg',
  useCIT: true,
  useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();

//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
  defaultLayers.normal.map,{
  center: {lat:36.178699, lng:-115.146171},
  zoom: 13
});

//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));

// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);

// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>

</head>
<body>
  <div id="map" style="width: 100%; height: 400px; background: grey" />

</body>
</html>

根据HERE map API,您需要在开始拖动圆形对象时禁用底层地图的默认可拖动性:

map.addEventListener('dragstart', (ev) => {
    const target = ev.target;
    if (target instanceof H.map.Circle) {
        behavior.disable();
    }
}, false);

圆拖动时,需要监听拖动事件并移动圆的位置:

map.addEventListener('drag', (ev) => {
    const target = ev.target,
        pointer = ev.currentPointer;
    if (target instanceof H.map.Circle) {
        target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
    }
}, false);

完成拖动后,需要重新启用底层地图的默认可拖动性。

map.addEventListener('dragend', (ev) => {
    const target = ev.target;
    if (target instanceof H.map.Circle) {
        behavior.enable();
    }
}, false);

您可以通过在圆形对象上调用 setRadius 来更改圆形半径。

function addCircleToMap(map){
  var circle = new H.map.Circle(
    new H.geo.Point(36.1786991, -115.146171), //center
    1000, // Radius in meters
    {
      style: {
        strokeColor: '#FF0000', // Color of the perimeter
        lineWidth: 3,
        fillColor: 'rgba(226, 180, 183, 0.5)' // Color of the circle
      }
    }
  );
  circle.draggable = true;
  map.addObject(circle);
}


//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
  app_id: 'DemoAppId01082013GAL',
  app_code: 'AJKnXv84fjrb0KIHawS0Tg',
  useCIT: true,
  useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();

//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
  defaultLayers.normal.map,{
  center: {lat:36.178699, lng:-115.146171},
  zoom: 13
});

//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
 
//Step 4, initilize drag for map objects.
    map.addEventListener('dragstart', (ev) => {
        const target = ev.target;
        if (target instanceof H.map.Circle) {
            behavior.disable();
        }
    }, false);

    map.addEventListener('drag', (ev) => {
        const target = ev.target,
            pointer = ev.currentPointer;
        if (target instanceof H.map.Circle) {
            target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
        }
    }, false);

    map.addEventListener('dragend', (ev) => {
        const target = ev.target;
        if (target instanceof H.map.Circle) {
            behavior.enable();
        }
    }, false);

// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);

// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>

</head>
<body>
  <div id="map" style="width: 100%; height: 400px; background: grey" />

</body>
</html>