HERE地图可拖动&可编辑的半径地理形状(例如:圆圈)

时间:2017-10-16 20:48:03

标签: javascript here-api

我需要帮助修改此代码以创建圆形拖动和可编辑半径。

示例:用户应该可以将圆圈拖到不同的位置并更改半径。

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

提前感谢你。



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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

根据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来更改圆半径。

答案 1 :(得分:0)

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>