前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高德地图JS--批量规划步行路线 优化

高德地图JS--批量规划步行路线 优化

作者头像
拿我格子衫来
发布2022-01-24 08:58:44
1.7K2
发布2022-01-24 08:58:44
举报
文章被收录于专栏:TopFE

调取高德地图JS API 进行步行路线规划

多个起点到达一个重点,根据搜素结果画路线,进行绘图,并为线路添加点击事件

效果如下:

代码如下:

代码语言:javascript
复制
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <style>
        html,
        body,
        #container {
            width: 100%;
            height: 100%;
        }
    </style>
    <title>根据规划数据绘制步行路线</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <script src="https://webapi.amap.com/maps?v=1.4.10&key=d799a2887868628bf7782fcd6b2c0ed1&plugin=AMap.PolyEditor"></script>
    <script src="https://webapi.amap.com/maps?v=1.4.10&key=d799a2887868628bf7782fcd6b2c0ed1&plugin=AMap.Walking"></script>
    <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
</head>
<body>
<div id="container"></div>
<script type="text/javascript">
  var map = new AMap.Map('container', {
    center: [116.397559, 39.89621],
    zoom: 14
  })

  // 当前示例的目标是展示如何根据规划结果绘制路线,因此walkOption为空对象
  var walkingOption = {}

  let dataArr = [
    [15, '汽车服务', 116.807599, 39.6462117, 1.459, 6.3265],
    [22, '汽车服务', 117.6136484, 39.7657742, 9.738, 7.5687],
    [30, '汽车服务', 117.2940413, 39.7878749, 7.7227, 6.5476],
    [37, '汽车服务', 116.0684453, 38.174566, 4.5352, 8.5357],
    [42, '汽车服务', 117.3493731, 38.6404797, 1.1438, 4.3265],
    [43, '汽车服务', 116.8465287, 38.363796, 8.7718, 4.4577]]
  let targetPoint = [116.944964, 39.457521]

  // 搜素路线的函数
  function searchRouter (startPointArr, endPoint) {
    for (let i = 0; i < startPointArr.length; i++) {
      let item = startPointArr[i]
      let startPoint = [item[2], item[3]]

      // 步行导航
      var walking = new AMap.Walking(walkingOption)

      //根据起终点坐标规划步行路线
      walking.search(startPoint, endPoint, function (status, result) {
        // result即是对应的步行路线数据信息,相关数据结构文档请参考  https://lbs.amap.com/api/javascript-api/reference/route-search#m_WalkingResult
        if (status === 'complete') {
          if (result.routes && result.routes.length) {
            drawRoute(result.routes[0], item)
            log.success('绘制步行路线完成')
          }
        } else {
          log.error('步行路线数据查询失败' + result)
        }
      })
    }
  }
  // 描绘路线的函数
  function drawRoute (route, item) {
    var path = parseRouteToPath(route)
    var startMarker = new AMap.Marker({
      position: path[0],
      icon: 'https://webapi.amap.com/theme/v1.3/markers/n/start.png',
      map: map
    })
    var endMarker = new AMap.Marker({
      position: path[path.length - 1],
      icon: 'https://webapi.amap.com/theme/v1.3/markers/n/end.png',
      map: map
    })
    var routeLine = new AMap.Polyline({
      path: path,
      isOutline: true,
      outlineColor: '#ffeeee',
      borderWeight: 2,
      strokeWeight: 5,
      cursor: 'pointer',
      strokeColor: '#0091ff',
      lineJoin: 'round',
      extData: item
    })
    routeLine.on('click', function (obj) {
      console.log(obj.target.getExtData())
      alert('您点击了线为' + obj.target.getExtData().toString())
    })
    routeLine.setMap(map)
    // 调整视野达到最佳显示区域
    map.setFitView([startMarker, endMarker, routeLine])
  }

  // 解析WalkRoute对象,构造成AMap.Polyline的path参数需要的格式
  // WalkRoute对象的结构文档 https://lbs.amap.com/api/javascript-api/reference/route-search#m_WalkRoute
  function parseRouteToPath (route) {
    var path = []

    for (var i = 0, l = route.steps.length; i < l; i++) {
      var step = route.steps[i]

      path.push([step.start_location.lng, step.start_location.lat])
      path.push([step.end_location.lng, step.end_location.lat])
    }

    return path
  }

  searchRouter(dataArr, targetPoint)
</script>
</body>
</html>

有任何高德JS API 调用问题都可以在下方评论咨询我。博主做过很多O2O示例

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档