高德地图 动态绘制多个路线轨迹

最近在用高德地图的API,顺便记录下。

平时我们只是通过如下代码,给path一串经纬度数组, 静态绘制修改路径,但怎么才能通过接收数据(例如Json数据)来动态绘制 多个路径呢? 这里有两种方法。

//设置数据
 pathSimplifierIns.setData([{
     name: '路线0',
     path: [
         [116.405289, 39.904987],
         [113.964458, 40.54664],
         [111.47836, 41.135964]
     ]
 }]);

方法一:

该方法是官方文档的Dome,
思路: 用 $.getJSON(‘url’,function(){})函数,在其url中直接输入.json文件(文件里是 setData()可操作数组结构 的数据) 的路径,通过改变文件内容或 url 来动态绘制路径。

查看官方Dome:点击这里
查看数据的网址:点击这里
效果图如下:
效果图

但是平时我们传的Json数据 的数据结构都是 setData()函数不可操作的,而且还夹杂了很多其他的不相关参数,所以方法一并不实用。

方法二:

这里我们只是将JSON的数据结构转换 为 setData()可操作的数据结构。
思路:其中str为一串Json数据(就是字符串),首先将 Json字符串 转换为 Json对象,但由于该Json对象的数据结构 与 setData()可操作 数组的数据结构 不一致,所以要转换一下结构;转换结构后 直接将其传给 setData()即可。
效果图如下:
这里写图片描述

源代码如下

<!doctype html>
<html lang="zh-CN">
<head>
    <!-- 原始地址://webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/simple-data.html -->
    <base href="//webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/" />
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>简单数据附加</title>
    <style>
    html,
    body,
    #container {
        width: 100%;
        height: 100%;
        margin: 0px;
    }
    </style>
</head>

<body>
    <div id="container"></div>
    <script type="text/javascript" src='//webapi.amap.com/maps?v=1.4.3&key=您申请的key值'></script>
    <!-- UI组件库 1.0 -->
    <script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
    <script type="text/javascript">
    //创建地图
        var map = new AMap.Map('container', {
            zoom: 4
        });

        AMapUI.load(['ui/misc/PathSimplifier', 'lib/$'], function(PathSimplifier, $) {

            if (!PathSimplifier.supportCanvas) {
                alert('当前环境不支持 Canvas!');
                return;
            }

            var pathSimplifierIns = new PathSimplifier({
                zIndex: 100,
                //autoSetFitView:false,
                map: map, //所属的地图实例

                getPath: function(pathData, pathIndex) {

                    return pathData.path;
                },
                getHoverTitle: function(pathData, pathIndex, pointIndex) {

                    if (pointIndex >= 0) {
                          //point 
                        return pathData.name + ',点:' + pointIndex + '/' + pathData.path.length;
                    }

                    return pathData.name + ',点数量' + pathData.path.length;
                },
                renderOptions: {

                    renderAllPointsIfNumberBelow: 100 //绘制路线节点,如不需要可设置为-1
                }
            });

            window.pathSimplifierIns = pathSimplifierIns;
            /****************************开始: 用Json数据动态绘制多个路径 ****************************/
             /*封装:Json字符串 转换为 Json对象*/
            var tranObj = function(str){
                return JSON.parse(str);
            }

            /*封装:构造setData()可用数组*/
            var seltArr = function(obj){
                var arr = []; 
                for(var i=0;i<obj.length;i++){
                    arr.push({
                                name:obj[i].name,
                                path:[[obj[i].flng,obj[i].flat],[obj[i].tlng,obj[i].tlat]]
                            });
                }
                return arr;
            }

            /*str为Json数据: 
                flng(出发地经度)、flat(出发地纬度)
                tlng(目的地经度)、tlat(目的地纬度)
                name:路径名称
                missTimes:为其他数据,忽略*/

            var str = '[{ "name": "A->B","missTimes": "1", "flng": 116.856275, "flat": 39.874345, "tlng": 116.856245,"tlat": 39.87207},{ "name": "A->B","missTimes": "1", "flng": 116.857275, "flat": 39.876345, "tlng": 116.856345,"tlat": 39.87107},{"name": "C->D","missTimes": "2", "flng": 116.856575, "flat": 39.874345, "tlng": 116.856245,"tlat": 39.87507}]';

            /*Json字符串 转换为 Json对象*/
            var obj = tranObj(str); 

            /*构造setData()可用数组*/
            var myArr = seltArr(obj); 

            /*将可用数组传给 setData()绘制路线*/
            pathSimplifierIns.setData(myArr);
        /****************************  结束 ****************************/
            pathSimplifierIns.on('pointClick', function(e, info) {

                console.log('Click: ' + info.pathData.points[info.pointIndex].name);
            });
            /*开个巡航器*/
             var navg1 = pathSimplifierIns.createPathNavigator(0, {
                loop: true, //循环播放
                speed: 100 //巡航速度,单位千米/小时
            });

            navg1.start();
        });
    </script>
</body>

</html>

看不懂上面代码的查看官方文档即可,
PathSimplifier(轨迹展示):点击这里查看 官方相关文档

  • 9
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在Flutter中,使用高德地图绘制轨迹需要以下几个步骤: 第一步,需要在pubspec.yaml文件中添加高德地图插件依赖。可以在Flutter官方插件网站找到相关的插件信息,并将其添加到pubspec.yaml中。 第二步,创建一个地图页面并引入相关的库文件。在Flutter中,可以使用‘import’语句导入所需的库文件。然后,创建一个StatefulWidget类,并在build方法中返回一个Scaffold组件作为页面的根组件。 第三步,获取定位数据。使用Flutter的定位插件获取当前设备的位置信息。可以在页面初始化时通过初始化插件,并获取位置信息。然后,将位置信息传递给地图组件。 第四步,将地图放置在页面上。可以使用高德地图插件提供的MapView组件将地图添加到页面中。同时,配置相关的地图参数,如地图的缩放级别、中心点等。 第五步,绘制轨迹。将获取到的位置信息按时间顺序记录下来,并在地图上根据位置数据绘制轨迹。可以使用高德地图插件提供的Polyline组件进行轨迹绘制。 第六步,更新轨迹。随着设备位置的变化,需要实时更新轨迹。可以通过监听定位插件的位置变化事件,获取到最新的位置信息,并更新轨迹。 最后,注意进行相关的错误处理和资源释放工作。在使用过程中,需要注意处理异常情况,如设备不支持定位等。同时,在不需要使用地图时,需要释放相关的资源,以免造成资源浪费。 综上所述,使用Flutter绘制高德地图轨迹需要引入相关的插件依赖,获取设备的位置信息,将地图添加到页面上并配置相关参数,根据位置数据绘制轨迹,并实时更新轨迹。同时还需处理异常情况和释放资源。这样就可以实现在Flutter中绘制高德地图轨迹的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值