代码之家  ›  专栏  ›  技术社区  ›  suman mainali

此处映射可拖动和可编辑的半径地理形状(例如:圆)

  •  0
  • suman mainali  · 技术社区  · 7 年前

    我需要帮助修改这个代码,使圆拖动山墙和可编辑的半径。

    例子:

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

    提前感谢您。

    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>
    2 回复  |  直到 7 年前
        1
  •  0
  •   MatúÅ¡ Šťastný    7 年前

    根据 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 在圆对象上。

        2
  •  0
  •   suman mainali    7 年前

    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>