项目中使用AntV L7地图(五)添加飞线

news2025/5/14 8:30:10

项目中使用AntV L7地图,添加 飞线

文档地址:https://l7.antv.antgroup.com/zh/examples/line/animate/#trip_animate

一、初始化地图
  • 使用的地图文件为四川地图JSON,下载地址:https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=31.769817845138945&lng=104.29901249999999&zoom=4
import { ref, onMounted } from "vue";
import { Scene } from "@antv/l7";
import { Map } from "@antv/l7-maps";


const scene: any = ref(null); //地图实例

function initMap() {
  scene = new Scene({
    id: "map",
    logoVisible: false, //logo 是否可见
    map: new Map({
      center: [104.065735, 30.659462], //中心点
      zoom: 5.4, //初始化缩放等级
      interact: false, // 高德地图是否允许地图可拖动,默认为true
      pitch: 30,
    }),
  });
  scene.setMapStatus({
    dragEnable: false, //是否允许地图拖拽
    keyboardEnable: false, // 是否允许形键盘事件
    doubleClickZoom: false, // 双击放大
    zoomEnable: false, // 滚动缩放
    rotateEnable: false, // 旋转
  });
  scene.on("loaded", () => {
    addPolygonLayer();
    addLineLayer()
  });
}

onMounted(() => {
  initMap();
});
二、添加地图面图层
import sichuanJson from "@/assets/json/sichuan.json";
import sichuanAreaJson from "@/assets/json/scArea.json"; //将地图下载存放在本地文件中,并引入

function addPolygonLayer() {
  //边线
  const sichuanLineShapeMap = new LineLayer({ zIndex: 10 })
    .source(sichuanJson)
    .shape("line")
    .size(0)
    .color("rgb(175, 222, 255)")
    .style({
      // raisingHeight: 200000,
    });
  const sichuanLineMap = new LineLayer({ zIndex: 10 })
    .source(sichuanAreaJson)
    .shape("wall")
    .size(150000)
    .style({
      heightfixed: true,
      opacity: 0.6,
      sourceColor: "rgba(0,0, 0,.5)",
      targetColor: "rgb(175, 222, 255)",
    });
  let polygonLayer = new PolygonLayer() //{ autoFit: true }
    .source(sichuanAreaJson)
    .size(150000)
    .shape("extrude")
    .color("rgba(0,0, 0,.5)")
    .active({
      color: "rgb(100,230,255)",
    })
    .style({
      //  mapTexture: mapBg,
      heightfixed: true,
      pickLight: true,
      raisingHeight: 10000,
      opacity: 0.8,
    });

  const texts: any = [];
  sichuanAreaJson.features.map((option: any) => {
    const { name, center } = option.properties;
    const [lng, lat] = center;
    texts.push({ name, lng, lat });
    return "";
  });

  const scPointLayer = new PointLayer({ zIndex: 10 })
    .source(texts, {
      parser: {
        type: "json",
        x: "lng",
        y: "lat",
      },
    })
    .shape("name", "text")
    .size(10)
    .color("#fff")
    .style({
      textAnchor: "center", // 文本相对锚点的位置 center|left|right|top|bottom|top-left
      spacing: 2, // 字符间距
      padding: [1, 1], // 文本包围盒 padding [水平,垂直],影响碰撞检测结果,避免相邻文本靠的太近
      stroke: "#fff", // 描边颜色
      strokeWidth: 0.3, // 描边宽度
      textAllowOverlap: true,
      raisingHeight: 10000,
    });
  scene.addLayer(polygonLayer);
  scene.addLayer(sichuanLineShapeMap);
  scene.addLayer(scPointLayer);
  scene.addLayer(sichuanLineMap);
}


三、添加地图飞线

1、引入需要渲染飞线的数据

//数据格式如下:
[
{ 
    "startLongitude":"104.080989",
    "startLatitude":"30.657689",
    "endLongitude":"101.964057",
    "endLatitude":"30.050738"
    }
]

2、

import flyData from "@/assets/json/flyData.json"
function addLineLayer(){
  const layer = new LineLayer({
        blend: 'normal',
      })
        .source(flyData, {
          parser: {
            type: 'json',
            x: 'startLongitude',
            y: 'startLatitude',
            x1: 'endLongitude',
            y1: 'endLatitude',
          },
        })
        .size(2)
        .shape('arc3d')
        .color('#fff')
        .animate({
          interval:0.5,
          trailLength: 1,
          duration: 3,
        })
        .style({
          opacity:1,
          raisingHeight: 10000,
        });
        
      scene.addLayer(layer);
}

function addChinaLineLayer() {
  moveLineLayer.value = new LineLayer({
    blend: "normal",
  })
    .source(dailyFlyData, {
      parser: {
        type: "json",
        x: "startLongitude",
        y: "startLatitude",
        x1: "endLongitude",
        y1: "endLatitude",
      },
    })
    .size(3)
    .shape("arc3d")
    .color("rgb(249, 252, 22)")
    .animate({
      interval: 0.5,
      trailLength: 1,
      duration: 3,
    })
    .style({
      opacity: 1,
      raisingHeight: 10000,
    });

  movePointLineLayer.value = new PointLayer({
    autoFit: false,
    zIndex:10
  })
    .source(dailyFlyData, {
      parser: {
        type: "json",
        x: "endLongitude",
        y: "endLatitude",
      },
    })
    .shape("name", "text")
    .size(14)
    .active(true)
    .color("#18ecef")
    .style({
      raisingHeight: 35000,
    });

  scene.value.addLayer(moveLineLayer.value);
  scene.value.addLayer(movePointLineLayer.value);
}
四、完整代码如下
<script lang="ts" setup>
import { onMounted } from "vue";
import { Scene, PolygonLayer, LineLayer, PointLayer } from "@antv/l7";
import { Map } from "@antv/l7-maps";
import sichuanJson from "@/assets/json/sichuan.json";
import sichuanAreaJson from "@/assets/json/scArea.json";
// import mapBg from "@/assets/images/screen/home/bg_screen.png"
import flyData from "@/assets/json/flyData.json"

let scene: Scene; //地图实例

//初始化地图
function initMap() {
  scene = new Scene({
    id: "map",
    logoVisible: false, //logo 是否可见
    map: new Map({
      center: [104.065735, 30.659462], //中心点
      zoom: 5.4, //初始化缩放等级
      interact: false, // 高德地图是否允许地图可拖动,默认为true
      pitch: 30,
    }),
  });
  scene.setMapStatus({
    dragEnable: false, //是否允许地图拖拽
    keyboardEnable: false, // 是否允许形键盘事件
    doubleClickZoom: false, // 双击放大
    zoomEnable: false, // 滚动缩放
    rotateEnable: false, // 旋转
  });
  scene.on("loaded", () => {
    addPolygonLayer();
    addLineLayer()
  });
}

function addPolygonLayer() {
  //边线
  const sichuanLineShapeMap = new LineLayer({ zIndex: 10 })
    .source(sichuanJson)
    .shape("line")
    .size(0)
    .color("rgb(175, 222, 255)")
    .style({
      // raisingHeight: 200000,
    });
  const sichuanLineMap = new LineLayer({ zIndex: 10 })
    .source(sichuanAreaJson)
    .shape("wall")
    .size(150000)
    .style({
      heightfixed: true,
      opacity: 0.6,
      sourceColor: "rgba(0,0, 0,.5)",
      targetColor: "rgb(175, 222, 255)",
    });
  let polygonLayer = new PolygonLayer() //{ autoFit: true }
    .source(sichuanAreaJson)
    .size(150000)
    .shape("extrude")
    .color("rgba(0,0, 0,.5)")
    .active({
      color: "rgb(100,230,255)",
    })
    .style({
      //  mapTexture: mapBg,
      heightfixed: true,
      pickLight: true,
      raisingHeight: 10000,
      opacity: 0.8,
    });

  const texts: any = [];
  sichuanAreaJson.features.map((option: any) => {
    const { name, center } = option.properties;
    const [lng, lat] = center;
    texts.push({ name, lng, lat });
    return "";
  });

  const scPointLayer = new PointLayer({ zIndex: 10 })
    .source(texts, {
      parser: {
        type: "json",
        x: "lng",
        y: "lat",
      },
    })
    .shape("name", "text")
    .size(10)
    .color("#fff")
    .style({
      textAnchor: "center", // 文本相对锚点的位置 center|left|right|top|bottom|top-left
      spacing: 2, // 字符间距
      padding: [1, 1], // 文本包围盒 padding [水平,垂直],影响碰撞检测结果,避免相邻文本靠的太近
      stroke: "#fff", // 描边颜色
      strokeWidth: 0.3, // 描边宽度
      textAllowOverlap: true,
      raisingHeight: 10000,
    });
  scene.addLayer(polygonLayer);
  scene.addLayer(sichuanLineShapeMap);
  scene.addLayer(scPointLayer);
  scene.addLayer(sichuanLineMap);
}

function addLineLayer(){

  const layer = new LineLayer({
        blend: 'normal',
      })
        .source(flyData, {
          parser: {
            type: 'json',
            x: 'startLongitude',
            y: 'startLatitude',
            x1: 'endLongitude',
            y1: 'endLatitude',
          },
        })
        .size(2)
        .shape('arc3d')
        .color('#fff')
        .animate({
          interval:0.5,
          trailLength: 1,
          duration: 3,
        })
        .style({
          opacity:1,
          raisingHeight: 10000,
        });
        
      scene.addLayer(layer);
}

onMounted(() => {
  initMap();
});
</script>

<template>
  <div class="map-content">
    <div id="map"></div>
  </div>
</template>

<style lang="scss" scoped>
.map-content {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  position: relative;
  overflow-y: hidden;

  #map {
    width: 100%;
    height: 100%;
  }
}


</style>

五、效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2258040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于FPGA的智能电子密码指纹锁(开源全免)

基于FPGA的智能电子密码指纹锁 一、功能描述硬件资源需求 二、整体框架知识准备AS608指纹模块4*4数字键盘模块 三、Verilog代码实现以及仿真验证1.AS608_data模块2.check_hand模块3.four_four_key模块4.check_mima模块5.change_mima模块6.seg_ctrl模块7.uart_top模块8.key_debo…

【Vue2+Element-ui】el-dialog宽度适配

1、不适配问题 分辨率100%-页面 分辨率150%-页面 在项目中&#xff0c;我开发分辨率一直是100%&#xff0c;但是客户使用的分辨率不相同&#xff0c;所以宽度要适配 2、解决-封装mixins.js 1)、封装的mixins 我将宽度设置成动态的&#xff0c;因为我的项目中需求不同。 expor…

css矩形样式,两边圆形

废话不多说&#xff0c;代码如下&#xff0c;直接拷贝即可使用&#xff1a; index.vue文件 <template><view class"wrap"><view class"tabs"><view class"tab active"><view class"name">标签</view…

【OpenCV】图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

使用微信小程序调用飞桨PaddleX平台自行训练的模型——微信小程序用训练的牡丹花模型Demo测试

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Wordpress设置固定链接形式后出现404错误

比如固定连接设置为 /archives/%post_id%.html 这种形式&#xff0c;看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态

JavaWeb学习--cookie和session,实现登录的记住我和验证码功能

目录 &#xff08;一&#xff09;Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​&#xff08;Cookie的生命&#xff09; &#xff08;二&#xff09; Cookie的API 1.创建Cookie&#xff1a;new 构造方法 2.保存到客户端浏…

Linux网络测试指令

Ping Ping命令是一个网络工具&#xff0c;用于测试主机之间的可达性。它通过发送ICMP&#xff08;Internet Control Message Protocol&#xff09;回声请求消息到目标主机&#xff0c;并等待接收ICMP回声应答消息来判断目标是否可达以及测量往返时间。Ping命令对于诊断网络连接…

【伪代码】数据结构-期末复习 线性表

目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1&#xff0e;构造空表 2&#xff0e;插入 3&#xff0e;删除 4&#xff0e;定位 顺序表的优点&#xff1a; 顺序表的缺点&#xff1a; 例…

<C++11> 智能指针

目录 前言 C11和boost中智能指针的关系 一、智能指针的使用及原理 1. 智能指针介绍 2. 智能指针的使用 3. 智能指针的原理 二、C中的智能指针 1. auto_ptr 2. unique_ptr 3. shared_ptr std::shared_ptr的基本设计 shared_ptr的线程安全问题 定制删除器 4. weak_ptr shared_pt…

书生实战营第四期-进阶岛第六关-MindSearch 快速部署

一、开发环境配置 1、打开codespace主页&#xff0c;选择Blank模板进行创建 Codespaces 2、创建conda环境隔离并安装依赖 conda create -n mindsearch python3.10 -y conda init 因为是新建的codespace&#xff0c;在第一次创建conda环境时&#xff0c;需要conda init 然后再…

ViT学习笔记(二) Patch+Position Embedding阶段的详细推演与理解

我认为讲得最好的一个文章&#xff1a;Vision Transformer详解-CSDN博客 有很多文章&#xff0c;自己并没有完全正确理解。 我的笔记&#xff0c;以ViT的标准应用为例&#xff1a; • 输入图像&#xff1a;输入图像的尺寸是224x224&#xff0c;且是RGB图像&#xff0c;因此输…

JS听到了强运的回响

正则表达式 介绍 正则表达式是用于匹配字符串中字符组合的模式&#xff0c;在JS中&#xff0c;正则表达式也是对象 通常用来查找&#xff0c;替换那些符合正则表达式的文本 就是筛选出符合条件的一类人 比如说 有人喜欢玩艾斯爱慕&#xff0c;那他喜欢的就是这一类人&…

工业4.0下的IT网络与OT网络

https://zhuanlan.zhihu.com/p/498984722 随着“中国制造2025”的深入推进&#xff0c;制药行业以手工为主的传统生产方式正在被以“工业4.0 ”为核心的自动化生产方式逐步替代。 为了实现生产自动化&#xff0c;很多制药企业都引入了由PLC&#xff08;可编程逻辑控制器 &am…

C# MVVM 牛牛的实现依赖注入和MVVM绑定(DependencyInjection+CommunityToolkit)

这段时间在网上发现搜索MVVM数据绑定时&#xff0c;发现很多都是最基本的数据绑定&#xff0c;完全没有考虑依赖注入的问题&#xff0c;这里实现一下我们的方法&#xff0c;让我们的数据绑定和依赖注入都变得简单起来。 安装资源包 首先我们要下载一下资源包DependencyInject…

gitee常见命令

目录 1.本地分支重命名 2.更新远程仓库分支 3.为当前分支设置远程跟踪分支 4.撤销已经push远程的代码 5.idea->gitee的‘还原提交’ 需要和本地当前的代码解决冲突 解决冲突 本地工作区的差异代码显示 本地commit和push远程 6.idea->gitee的‘将当前分支重置到此…

【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制

在高并发系统中&#xff0c;限流是一项非常重要的技术手段&#xff0c;用于保护后端服务&#xff0c;防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流&#xff0c;以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…

Python画泰勒图

1. 安装画泰勒图的库 pip install SkillMetricsSkillMetrics库在图的设置细节&#xff08;模型标记符号、colorbar&#xff09;有很多不足&#xff0c;比如无法按颜色区分每个散点。 注意&#xff01;&#xff01;&#xff01; 提前算好数据的标准差、相关系数和中心化均方根…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…

【MySQL】——​​用一文领悟表的增删查改

目录 前言 &#x1f343;1.表的增加 &#x1f359;1.1增——insert &#x1f359;1.2插入否则更新 &#x1f364;1.2.1影响行说明 &#x1f342;2.表的查询 &#x1f358;2.1查询——select &#x1f358;2.2特殊表查询 &#x1f365;2.2.1添加表达式 &#x1f365;…