vue3中使用deck.gl

news2024/11/25 20:16:14

deck,gl网址:Home | deck.gl

因为deck.gl是国外的技术,国外最流行的框架是react,所以deck.gl有为react提供的地图组件,没有为vue提供,并且还需要翻墙。所以想用vue使用这个还是有一定难度的。

除了用到deck.gl之外还需要配合mapbox.gl才能开发地图,所以需要在你的vue项目的命令行中引入mapbox:

npm install mapbox-gl@1.13.0

这里安装的版本最好是1版本,更高的版本需要用到mapbox的密钥有一丢麻烦所以暂时不考虑,1版本也能实现功能

基本地图

安装好之后,在vue的任意一个组件都可以使用地图了:

1.首先地图需要一个容器:

<template>
  <div id="viewDiv"></div>
</template>

2.在<script>中部分引入mapbox:

import mapboxgl from 'mapbox-gl';

3.在vue的mounted生命周期函数中使用mapbox:

  const map = new mapboxgl.Map({
    container: 'viewDiv',//容器的id
    style: 'https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json',
    center: [121, 31.5],//地图中心
    zoom: 4,//高度
    pitch: 0,//上下倾斜度
    bearing: 0,//左右倾斜度
  });

好了,地图已经有了,运行项目看看

安装deck.gl

很简单吧,接下来使用deck.gl

需要先安装这两个:

npm install @deck.gl/mapbox@8.8.0
npm install @deck.gl/layers@8.8.0
画点

安装完成之后,来画一个点

1.接着再引入@deck.gl/mapbox 和 @deck.gl/layers;

画点用到的是ScatterplotLayer图层:

import { MapboxOverlay } from '@deck.gl/mapbox';
import { ScatterplotLayer } from '@deck.gl/layers';

2.在刚才new mapboxgl.Map的下边加上:

  const dotDeck = new MapboxOverlay({
    layers: [
      new ScatterplotLayer({
        id: 'scatterplot-layer',
        data: [
          { coordinates: [121, 31.5],color:[255,0,0] },//点的数据包括方位,颜色和其他信息
          { coordinates: [121, 30],color:[0,255,0] },
          { coordinates: [121, 28],color:[0,0,255] },
        ],
        pickable: true,
        opacity: 0.8,//透明度
        stroked: true,//边框
        lineWidthMinPixels: 1,//边框的宽度
        radiusScale: 60000,//大小
        getPosition: d => d.coordinates,//点的位置,这里的d得到的是data里的每一项
        // getFillColor: [255, 0, 0],//颜色,这是一种固定写法,颜色写在数组里,对应的是rgba四个值,数组第四位是透明度
        getFillColor: d => d.color,//还有一种是函数写法,同理,d是deta中的每一项
      })
    ],
  });
  map.addControl(dotDeck);//把new的图层添加给地图

使用方法我写上了注释,可以根据需要调整样式和方位,运行结果:

画线

你已经学会画点了,接下来画线条

1.画线用到的是LineLayer图层,接着引入:

import { ScatterplotLayer, LineLayer } from '@deck.gl/layers';

2.接着画点的代码的下边加上:

  const lineDeck = new MapboxOverlay({
    layers: [
      new LineLayer({
        id: "line-layer",
        //线条的数据,这里花了两条线段,所以data数组里有两个对象代表两个线段
        data:
          [
            {
              sourcePosition: [ //起始定位度点
                121.88909498914057,
                30.868038309579234
              ],
              targetPosition: [ //目的经纬度点
                121.97087101435295,
                40.72449413146839
              ],
              color:[255,0,0]
            },
            {
              sourcePosition: [
                140.97087101435295,
                30.72449413146839
              ],
              targetPosition: [
                121.97087101435295,
                40.72449413146839
              ],
              color:[0,255,0]
            }
          ],
        getWidth: 1,
        // getColor: [255, 0, 0],//这里颜色同样有两种写法,固定写法
        getColor: (d)=>d.color,//和函数写法,函数写法可以给每个线条上不同颜色
      })
    ],
  });
  map.addControl(lineDeck)//把new的图层添加给地图

基本用法我都写到注释里了,详细的用法还要看原文档

运行结果:

画平面

你也学会画线条了 ,接下来画一个平面

用到的是GeoJsonLayer图层,这个图层不止能用来画面,也可以画点和线甚至3d图,这里演示如何画平面

1.接着引入:

import { ScatterplotLayer, LineLayer, GeoJsonLayer } from '@deck.gl/layers';

2.接着在画的线的代码下边加上:

  const geoDeck = new MapboxOverlay({
    layers: [
      new GeoJsonLayer({
        data:
          [
            {
              geometry: {
                type: "Polygon",//代表要画的是多边形
                coordinates: [  //位置,把所有的经纬度按顺序链接形成一个面
                  [
                    [
                      105.87971496582372,
                      30.79384208679484
                    ],
                    [
                      115.16398620605918,
                      30.765525659152004
                    ],
                    [
                      105.91954040527622,
                      20.5410601775432
                    ]
                  ]
                ],
                color: [ 255, 0, 0, 100 ]//颜色
              }
            },
          ],
        getFillColor: (d) => d.geometry.color, //面的颜色,d是deta中的每一项,同样也可以写成固定值
      })
    ],
  });
  map.addControl(geoDeck)//把new的图层添加给地图

运行结果:

就多出来了一个平面,可以用来圈一个地域

添加图片

点线面都完成了,再来看看往地图上添加图片,用到的是 IconLayer 图层

图片我用的是这个图:

1.把图片放在 src/assets 目录中引入图片: 

import airport from "./assets/airport.png";

2.在画面的代码下面加上:


  const iconDeck = new MapboxOverlay({
    layers: [
      new IconLayer({
        data:   //图片的数据,数组中的每一个都是一个图片
          [
            {
              coordinates: [
                130.82632367727643,
                29.53386357277182
              ],
              size:'small'
            },
            {
              coordinates: [
                125.82632367727643,
                29.53386357277182
              ],
              size:'small'
            }
          ],
        iconAtlas: airport,//要放那张图片
        iconMapping: {
        // !!!!一定要注意的是这个width和height要随着图片的大小改一下!!!!
          small: { x: 0, y: 0, width: 200, height: 200 },//图片所有的尺寸
        },
        getIcon: (d) => d.size,//选择尺寸
        getPosition: (d) => d.coordinates,//方位
        getSize: (d) => 60,//大小
      })
    ],
  });
  map.addControl(iconDeck)//把new的图层添加给地图

运行效果:

 两个图片就加到了地图上

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

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

相关文章

使用Serv-U FTP服务器共享文件,实现无公网IP的外网访问

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天&#xff0c;移动电子设备似乎成了我们生活的主角&#xff0c;智能…

vue项目打包时按一定的名称规范生成对应的压缩包

在项目部署中经常需要将打包的dist按一定的名称压缩成压缩包&#xff0c;今天记录一下打包时生成压缩包的过程。其中有用到的npm包需要自己安装一下。 js文件放置的目录如下 compress.js内容如下&#xff1a; // compress.jsimport fs from "fs"; import shell fro…

电商价格数据监测接口|淘宝商品价格接口|天猫商品价格接口|京东商品价格接口|拼多多商品价格接口|API接口申请指南

电商价格数据监测接口是一种可以实时监测电商平台上商品价格的接口工具。通过这个接口&#xff0c;可以获取到各个电商平台的商品价格信息&#xff0c;并且可以设置价格监控频率、智能数据绑定、破价提醒机制等功能。 以下是电商价格数据监测接口的一些特点&#xff1a; 商城…

“恒山光量子”首秀!玻色量子联合移动云发表物理1区Top期刊SCPMA论文

2023年5月&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;联合移动云在我国知名科技期刊平台《中国科学&#xff1a;物理学 力学 天文学》英文版上发表了以“Optical experimental solution for the multiway number partitioning problem …

网络工程师进阶课:华为HCIP认证课程介绍

微思网络HCIP VIP试听课程&#xff1a;DHCP协议原理与配置https://www.bilibili.com/video/BV1cy4y1J7yg/?spm_id_from333.999.0.0 【微|信|公|众|号&#xff1a;厦门微思网络】 【微思网络http://www.xmws.cn&#xff0c;成立于2002年&#xff0c;专业培训21年&#xff0c;思…

获评AI基础软件「领导者」,九章云极DataCanvas公司技术创新能力最强!

近日&#xff0c;弗若斯特沙利文&#xff08;Frost & Sullivan&#xff0c;简称“沙利文”&#xff09;正式发布《中国AI基础软件市场研究报告&#xff08;2023&#xff09;》&#xff0c;公布当下对中国AI基础软件发展创新的最新洞察。九章云极DataCanvas公司获评AI基础软…

@所有人,城市燃气信息化与信息安全建设方法

关键词&#xff1a;城市燃气信息化、智慧燃气建设、城市燃气安全、智慧燃气、智慧燃气平台 近几年&#xff0c;燃气作为一种新兴的燃料迅速普及开来&#xff0c;和燃气有关的企业之间的竞争也不可避免。身处在互联网的时代&#xff0c;企业只有顺应时代的潮流&#xff0c;将城…

zookeeper集群选举机制

Zookeeper选举机制——第一次启动 zookeeper集群三个重要的参数&#xff08;决定选举结果&#xff09; SID &#xff1a; 服务器 ID 。 用来唯一标识一台 ZooKeeper集群中的机器&#xff0c;每台机器不能重 &#xff0c; 和 myid 一致 。 ZXID &#xff1a;事务 ID 。 ZXID 是…

室内外导航一体化技术原理与成品展示

随着人们对出行需求的不断提升&#xff0c;室内外导航一体化技术变得越来越重要。该技术可以帮助用户在建筑物内、外部空间以及城市范围内进行精确导航&#xff0c;提升出行体验。 室内外一体化导航实现技术原理 室内外导航技术主要依赖于定位技术、地图数据以及空间建模等手段…

YOLOV8 NANO手势识别

采用YOLOV8 NANO训练&#xff0c;得到pt模型&#xff0c;然后转换成ONNX模型&#xff0c;OPENCV DNN调用&#xff0c;支持C,PYTHON,ANDROID开发。CPU每帧20MS左右&#xff0c;可以达到实时性 YOLOV8NANO手势识别

保护隐私,打造独特的个人图床——cpolar+Qchan轻量级搭建——“cpolar内网穿透”

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

文言一心中将C语言归类为低级语言,这对么?

文言一心中将C语言归类为低级语言&#xff0c;这对么? 以下是文言一心中的回答&#xff1a;C语言属于低级语言。低级语言通常指的是接近于机器语言的编程语言&#xff0c;它们与计算机硬件的交互更加直接&#xff0c;能够更高效地利用计算机资源。最近很多小伙伴找我&#xff…

SSM使用OpenOffice+Adobe acrobat实现Office文件的在线预览

文章迁移自语雀。 也许Java天生不适合处理Office文件吧&#xff0c;POI的使用一堆问题&#xff0c;现在SpringMVCSpringMybatis的web项目想实现在线预览也是问题一大堆。马的,开始时打算使用OpenOfficeSWFToolsFlexPaper的&#xff0c;但是该方案是使用flash的&#xff0c;众所…

葡萄酒是如何从葡萄园到你的酒杯的?

根据定义&#xff0c;我们称葡萄酒的美味花蜜是葡萄酒精发酵的产物。也有果酒&#xff0c;或乡村酒&#xff0c;是由发酵的水果制成的。然而&#xff0c;传统意义上的葡萄酒是由酿酒葡萄制成的。好吧&#xff0c;一切都是在几个步骤中完成的&#xff0c;来自云仓酒庄品牌雷盛红…

【Linux】进程创建

文章目录 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程创建 fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 include <unistd.h> …

【EI会议征稿】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)

第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;EIBDCT 2024&#xff09; 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;…

PHP版本升级后,PHPExcel导出下载文件失败,白屏或ERR_INVALID_RESPONSE(网页暂时无法连接,或者它已永久性地移动到了新网址)

PHP版本升级后&#xff0c;PHPExcel导出下载文件失败&#xff0c;白屏或ERR_INVALID_RESPONSE&#xff08;网页暂时无法连接&#xff0c;或者它已永久性地移动到了新网址&#xff09; 这里因为PHP版本过高导致PHPExcel下载失败&#xff1b; 解决方法&#xff1a;打开 PHPExce…

分享一下商城小程序怎么做

随着移动互联网的普及&#xff0c;越来越多的用户开始使用商城小程序进行购物。商城小程序不仅方便快捷&#xff0c;还能享受更多的优惠和福利。本文将探讨如何打造一个成功的商城小程序&#xff0c;并分享一些实用的策略和案例。 了解用户需求是打造商城小程序的第一步。我们需…

利用云计算和微服务架构开发可扩展的同城外卖APP

如今&#xff0c;同城外卖APP已经成为了人们点餐的主要方式之一。然而&#xff0c;要构建一款成功的同城外卖APP&#xff0c;不仅需要满足用户的需求&#xff0c;还需要具备可扩展性&#xff0c;以适应快速增长的用户和订单量。 一、了解同城外卖APP的需求 在着手开发同城外卖…

FastDFS+Nginx搭建本地服务器并实现远程访问

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…