vue3 高德地图 飞线图层

我们在开发中,很有可能会用到高德地图,那么该如何设置呢

申请key的方法

1.使用npm安装  @amap/amap-jsapi-loader

npm i @amap/amap-jsapi-loader --save

2.在组见中引入

import AMapLoader from "@amap/amap-jsapi-loader";

3.在新版本的,key需要配合密钥一起使用

window._AMapSecurityConfig = {

    securityJsCode: "申请的密钥",

};

4.创建地图和Loca实例

var map = new AMap.Map('map', {
  center: [80.601, 40.32],
  zoom: 12,
  viewMode: '3D',  // 地图设置成 3D 模式,否则图层会失去高度信息
});

// 创建 Loca 实例
var loca = new Loca.Container({
  map: map
});

5.创建弧度飞线

 // 将图层添加到 Loca 实例中
        // loca.add(pointLayer);
        // 呼吸点
        // ScatterLayer: 带有动画效果的图层类型,用于展示散点数据,支持动画效果,如呼吸点、闪烁点等。大地面上的点,可展示三种类型:颜色圆、图标、动画图标
        var scatter = new Loca.ScatterLayer({ // 创建一个散点图层
            loca, // 传入容器实例 (相当于把散点图层添加到地图上)
            zIndex: 10, // 图层层级
            opacity: 0.6, // 图层透明度
            visible: true, // 图层是否可见
            zooms: [2, 22], // 图层显示的缩放级别范围
        });
        var pointGeo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
            url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/pulselink-china-city-point.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
        });
        scatter.setSource(pointGeo); // 给上面创建的散点图层设置数据源
        scatter.setStyle({ // 设置样式
            unit: 'meter', // 设置单位为米
            size: [100000, 100000], // 设置大小范围
            borderWidth: 0, // 设置边框宽度
            texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png', // 设置纹理
            duration: 2000, // 设置动画时长
            animate: true, // 设置动画
        });
        loca.add(scatter); // 将散点图层(scatter)添加到容器中
//弧线
        // PulseLinkLayer: 连接飞线图层,可以支持弧度,宽度,过渡色等能力。 并且还支持脉冲动画,可以表达数据的朝向
        var pulseLink = new Loca.PulseLinkLayer({
            zIndex: 10,//设置图层的层级
            opacity: 1,//设置图层的透明度
            visible: true,//设置图层是否可见
            zooms: [2, 22],//设置图层可见的缩放范围
            depth: true //设置是否开启深度检测
        })
        // GeoJSONSource: 图层的数据源,可以是本地数据,也可以是远程数据,数据格式必须是 geojson 格式
        var geo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
            url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/data-line-out.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
        })
       pulseLink.setSource(geo) //给上面的弧线图层设置数据源

       pulseLink.setStyle({
         unit:'meter',//设置单位为米
         dash:[40000,0,40000,0],//设置虚线样式
         lineWidth:function(){ //设置线宽
            return [20000,1000] //设置线宽范围
         },
         height:function(index,feat){ //设置高度
             return feat.distance / 3 + 10; //设置高度范围
         },
         altitude:1000,//设置高度
         smoothSteps:30,//设置平滑度
         speed:function (index,prop){ // 设置速度
            return 1000+Math.random() * 200000 //设置速度范围
         },
         flowLength:100000,//设置流动长度
         lineColors:function(index,feat){ //设置线条颜色
             return ['rgb(255,228,105)','rgb(255,164,105)','rgba(1,34,249,1)'] //设置颜色范围
         },
         maxHeightScale:0.3,//弧顶位置比例
         headColor:'rgba(225,225,0,1)',//头部颜色
         trailColor:'rgba(225,225,0,0)',//尾部颜色
       })
       loca.add(pulseLink) //将图层添加到容器中
       loca.animate.start()
  var clickInfo = new AMap.Marker({ //点标记
     anchor:'bottom-center', //设置点标记锚点
     position:[116.396293,39.918203,0] //点标记在地图上显示的位置
    });
    clickInfo.setMap(map); //将点标记添加到地图上
    clickInfo.hide(); //隐藏点标记

    map.on('click',function(e){
        var feat = pulseLink.queryFeature(e.pixel.toArray())
        if(feat){
            clickInfo.show() //显示点标记
            var props = feat.properties
            clickInfo.setPosition(feat.coordinates[1])
            clickInfo.setContent(
                    '<div style="text-align: center; height: 20px; width: 150px; color:#f00; font-size: 14px;">' +
                    'XXX: ' + feat.properties['ratio'] +
                    '</div>'
                );

        }else{
            clickInfo.hide() //隐藏点标记
        }

完整实例

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
    securityJsCode: "申请的密钥",
};
let map = null;


function initAMap() {
    AMapLoader.load({
        key: "申请的key", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
        Loca: {
            version: '2.0',
        }
    }).then((AMap) => {
        map = new AMap.Map('container');
        var map = new AMap.Map('container', {
            // center: [116.397428, 39.90923],
            zoom: 5,
            viewMode: '3D',  // 地图设置成 3D 模式,否则图层会失去高度信息
        });
        // 创建 Loca 实例
        var loca = new Loca.Container({
            map: map
        });
        console.log('Loca', loca)


        // 将图层添加到 Loca 实例中
        // loca.add(pointLayer);
        // 呼吸点
        // ScatterLayer: 带有动画效果的图层类型,用于展示散点数据,支持动画效果,如呼吸点、闪烁点等。大地面上的点,可展示三种类型:颜色圆、图标、动画图标
        var scatter = new Loca.ScatterLayer({ // 创建一个散点图层
            loca, // 传入容器实例 (相当于把散点图层添加到地图上)
            zIndex: 10, // 图层层级
            opacity: 0.6, // 图层透明度
            visible: true, // 图层是否可见
            zooms: [2, 22], // 图层显示的缩放级别范围
        });
        var pointGeo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
            url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/pulselink-china-city-point.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
        });
        scatter.setSource(pointGeo); // 给上面创建的散点图层设置数据源
        scatter.setStyle({ // 设置样式
            unit: 'meter', // 设置单位为米
            size: [100000, 100000], // 设置大小范围
            borderWidth: 0, // 设置边框宽度
            texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png', // 设置纹理
            duration: 2000, // 设置动画时长
            animate: true, // 设置动画
        });
        loca.add(scatter); // 将散点图层(scatter)添加到容器中

        //弧线
        // PulseLinkLayer: 连接飞线图层,可以支持弧度,宽度,过渡色等能力。 并且还支持脉冲动画,可以表达数据的朝向
        var pulseLink = new Loca.PulseLinkLayer({
            zIndex: 10,//设置图层的层级
            opacity: 1,//设置图层的透明度
            visible: true,//设置图层是否可见
            zooms: [2, 22],//设置图层可见的缩放范围
            depth: true //设置是否开启深度检测
        })
        // GeoJSONSource: 图层的数据源,可以是本地数据,也可以是远程数据,数据格式必须是 geojson 格式
        var geo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
            url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/data-line-out.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
        })
       pulseLink.setSource(geo) //给上面的弧线图层设置数据源

       pulseLink.setStyle({
         unit:'meter',//设置单位为米
         dash:[40000,0,40000,0],//设置虚线样式
         lineWidth:function(){ //设置线宽
            return [20000,1000] //设置线宽范围
         },
         height:function(index,feat){ //设置高度
             return feat.distance / 3 + 10; //设置高度范围
         },
         altitude:1000,//设置高度
         smoothSteps:30,//设置平滑度
         speed:function (index,prop){ // 设置速度
            return 1000+Math.random() * 200000 //设置速度范围
         },
         flowLength:100000,//设置流动长度
         lineColors:function(index,feat){ //设置线条颜色
             return ['rgb(255,228,105)','rgb(255,164,105)','rgba(1,34,249,1)'] //设置颜色范围
         },
         maxHeightScale:0.3,//弧顶位置比例
         headColor:'rgba(225,225,0,1)',//头部颜色
         trailColor:'rgba(225,225,0,0)',//尾部颜色
       })
       loca.add(pulseLink) //将图层添加到容器中
       loca.animate.start()

    //   点击事件处理
    var clickInfo = new AMap.Marker({ //点标记
     anchor:'bottom-center', //设置点标记锚点
     position:[116.396293,39.918203,0] //点标记在地图上显示的位置
    });
    clickInfo.setMap(map); //将点标记添加到地图上
    clickInfo.hide(); //隐藏点标记

    map.on('click',function(e){
        var feat = pulseLink.queryFeature(e.pixel.toArray())
        if(feat){
            clickInfo.show() //显示点标记
            var props = feat.properties
            clickInfo.setPosition(feat.coordinates[1])
            clickInfo.setContent(
                    '<div style="text-align: center; height: 20px; width: 150px; color:#f00; font-size: 14px;">' +
                    '速率: ' + feat.properties['ratio'] +
                    '</div>'
                );

        }else{
            clickInfo.hide() //隐藏点标记
        }
    })




    })
        .catch((e) => {
            console.log(e);
        });
}
onMounted(() => {
    initAMap()

});

onUnmounted(() => {
    map?.destroy();
});
</script>

<template>
    <div id="container" style="height: 750px"></div>
</template>

<style scoped>
#container {
    width: 100%;
    height: 750px;
}
</style>

注:如果加载不出Loca有可能是因为,版本不正确,确保Loca的版本正确

 不喜勿喷,喜欢的话加点个赞吧~欢迎大家交流

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vue 中切换高德地图图层,可以通过以下步骤实现: 1. 在 Vue 的 `mounted` 钩子函数中初始化地图: ```javascript mounted() { // 初始化地图 this.map = new AMap.Map('map-container', { zoom: 10, center: [116.397428, 39.90923] }); } ``` 2. 在模板中添加地图容器元素: ```html <template> <div id="map-container" style="height: 500px;"></div> </template> ``` 3. 添加一个切换图层的按钮,绑定点击事件: ```html <template> <div> <div id="map-container" style="height: 500px;"></div> <button @click="switchLayer">切换图层</button> </div> </template> ``` 4. 在 Vue 实例中添加 `switchLayer` 方法,用于切换图层: ```javascript methods: { switchLayer() { // 获取当前地图图层 const currentLayer = this.map.getLayers()[0]; // 切换到卫星图层 if (currentLayer === this.satelliteLayer) { this.map.setLayers([this.roadNetLayer]); } else { // 切换到路网图层 this.map.setLayers([this.satelliteLayer]); } } } ``` 5. 在 `mounted` 钩子函数中初始化卫星图层和路网图层,并将路网图层设置为默认图层: ```javascript mounted() { // 初始化地图 this.map = new AMap.Map('map-container', { zoom: 10, center: [116.397428, 39.90923] }); // 初始化卫星图层 this.satelliteLayer = new AMap.TileLayer.Satellite(); // 初始化路网图层 this.roadNetLayer = new AMap.TileLayer({ tileSize: 256, zooms: [3, 18], getTileUrl: (x, y, z) => { return `https://webst01.is.autonavi.com/appmaptile?style=7&x=${x}&y=${y}&z=${z}`; } }); // 将路网图层设置为默认图层 this.map.setLayers([this.roadNetLayer]); } ``` 这样就可以在 Vue 中实现切换高德地图图层了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值