vue+leaflet示例:矢量瓦片展示(附源码下载)

news/2025/3/28 14:11:14/文章来源:https://www.cnblogs.com/giserhome/p/18791462

demo源码运行环境以及配置

  • 运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。
  • 运行工具:vscode或者其他工具。
  • 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令:
    (1)下载demo环境依赖包命令:npm i
    (2)启动demo命令:npm run dev
    (3)打包demo命令: npm run build:release

示例效果


本篇主要利用 leaflet 的插件 leaflet.vectorgrid 实现两种不同数据源的矢量瓦片渲染加载效果:
调用 geoserver 发布的 pbf 矢量瓦片服务
加载 geojson 数据源渲染矢量瓦片
leaflet.vectorgrid 插件 github 地址:https://github.com/Leaflet/Leaflet.VectorGrid

  • 实现方式1:调用geoserver发布的pbf矢量瓦片服务
  1. geoserver 安装矢量瓦片插件,用来拓展支持发布矢量瓦片服务,具体可以参考以下资料:
    https://www.jianshu.com/p/6d0cb4d0e432
    https://blog.csdn.net/qq_36061233/article/details/84751073
    https://blog.csdn.net/qq_28418387/article/details/82823725
  2. geoserver安装好矢量瓦片以及发布矢量瓦片服务之后,可以利用leaflet.vectorgrid插件来调用矢量瓦片服务渲染加载
  • 实现方式2:加载geojson数据源渲染矢量瓦片
  • 核心源码
<template><div id="map"></div><div class="titleContainer center"><span>vue+leaflet示例:矢量瓦片展示</span></div>
</template><script setup>
import { onMounted, reactive, ref } from "vue";
import L from "leaflet";
import "leaflet.vectorgrid"; //引用矢量瓦片插件
import config from "../config";
let map = null;
let myConfig = {};
let spothighlight = null;
let geojsonData = null; // demo由于数据保密性,模拟geojson数据源需要自己去构造
//矢量瓦片高亮样式符号style
const highlightstyle = {fillColor: "#e6d933",fillOpacity: 0.1,stroke: true,fill: true,color: "#00bfff",opacity: 1,weight: 3,dashArray: "5",
};
onMounted(() => {initMap();
});
const initMap = () => {// 创建地图对象map = L.map("map", {attributionControl: false,}).setView(config.mapInitParams.center, config.mapInitParams.zoom);//创建底图切换数据源const baseLayer2 = L.tileLayer(config.baseMaps[1].Url); //ArcGIS影像图map.addLayer(baseLayer2);//加载项目红线矢量瓦片loadGeojsonVectorLayer();//加载扰动图斑矢量瓦片loadVectorPbfLayer();//清空图斑高亮效果map.on('click', clearSpotHighlight);
};
//设置图斑的样式
const getSpotVectorStyles = async (layerName) => {let style = {};style[layerName] = function (properties, zoom) {const symbol = {color: "#ffd700",fillColor: "#e6d933",fillOpacity: 0.1,fill: true,opacity: 1,weight: 3,dashArray: "5",};return symbol;};return style;
};
//清空扰动图斑高亮效果
const clearSpotHighlight = async () => {if (spothighlight) {myConfig.spotPbfLayer.resetFeatureStyle(spothighlight);}spothighlight = null;
};
//加载Pbf形式矢量瓦片函数
const loadVectorPbfLayer = async () => {// var localUrl = "http://localhost:8080/geoserver/gwc/service/wmts?" +// "REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=ZKYGIS:bs_spot_t" +// "&STYLE=&TILEMATRIX=EPSG:900913:{z}&TILEMATRIXSET=EPSG:900913&" +// "FORMAT=application/x-protobuf;type=mapbox-vector&TILECOL={x}&TILEROW={y}";var localUrl ="http://localhost:8080/geoserver/gwc/service/tms/1.0.0/ZKYGIS:bs_spot_t@EPSG:900913@pbf/{z}/{x}/{-y}.pbf";var localVectorTileOptions = {rendererFactory: L.canvas.tile, //渲染方式 canvas//rendererFactory: L.svg.tile,interactive: true, //设置true,允许鼠标交互事件getFeatureId: function (f) {return f.properties.map_num;},vectorTileLayerStyles: getSpotVectorStyles("bs_spot_t"), //设置矢量渲染的样式符号};myConfig.spotPbfLayer = L.vectorGrid.protobuf(localUrl, localVectorTileOptions).on("mouseover", function (e) {const attr = e.layer.properties;clearSpotHighlight();spothighlight = e.layer.properties.map_num;myConfig.spotPbfLayer.setFeatureStyle(e.layer.properties.map_num,highlightstyle);let content = "图斑编号:" + attr.map_num + "</br>";content += "项目ID:" + attr.project_id + "</br>";myConfig.spotPbfLayer.unbindPopup();myConfig.spotPbfLayer.bindPopup(content);myConfig.spotPbfLayer.openPopup(e.latlng);}).addTo(map);
};
……
</script><style scoped>
#map {width: 100vw;height: 100vh;
}
.titleContainer {position: absolute;top: 0;background: rgba(0, 0, 0, 0.45);height: 50px;width: 100vw;z-index: 999;font-size: 14px;color: #fff;font-size: 28px;
}
.center {display: flex;flex-direction: column;align-items: center;justify-content: center;
}
</style>

geojsonData,geojson模拟数据,由于单位的geoserver地图服务数据保密性,geoserver发布的矢量瓦片数不公开,源码是共享的

下载源码:GIS之家的学习交流圈

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+leaflet示例:图层管理控件样式优化(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

2025西安交大集训Day4:单调栈,单调队列,线段树

2025西安交大集训Day4:单调栈,单调队列,线段树 引入 何为单调栈?顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。 为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例。 过程 插入 将一个元素插入单调栈时,为了维护栈的单调性,需要…

日事清甘特图制作工具:一键生成,精准管理项目周期

还在为制作甘特图而焦虑吗?别担心,日事清甘特图重磅登场,轻松帮你完美化解难题,让复杂任务规划变得简单高效!在工作中,我们很多岗位都经常需要对项目进度进行追踪,例如人事经理需要要追踪招聘进度或员工培训计划, 项目经理负责监督项目的各个阶段以保证按计划执行, 软…

网站自动备份同步工具,自动备份同步工具有哪些?

网站自动备份同步工具是保障网站数据安全的关键,需兼顾实时性、可靠性、易用性。以下是分场景推荐的工具及部署方案:一、工具分类推荐80KM备份软件 功能:支持多种备份方式,如系统备份、磁盘备份、文件备份等,支持定时备份。 步骤:管理端点新增,不管选择从管理端备份到客…

智慧运维如何赋能现代医院?看某中西医结合医院的数字化转型之路

在医疗信息化浪潮中,某中西医结合医院作为一家集医疗、教学、科研于一体的三甲医院,始终走在创新前沿。面对业务系统庞杂、跨部门协作效率待提升等挑战,医院携手采和科技,以“智慧运维”为核心理念,开启了一场数字化转型的深度实践。 痛点破局:从“人找服务”到“服务找人…

day:29 断点

一、断点介绍 1.为什么要打断点呢? 接口测试可以不需要管前端的,主要测后端的功能 2.断点的作用: 1.开发人员,调试,出错后在某个位置打断点调试代码; 2.测试人员,测试,绕过前端的限制,测试后端的反应; 3.测试人员,构造数据,设置断点可篡改请求和返回的数据包。根据测…

UE5--002--EnhancedInput

1. IA_Pause 输入动作2. IMC_Default 输入映射上下文3. BP_FirstPersonCharacter蓝图3. 1 给PlayerController动态配置MappingContext3. 2 事件响应4. BP_FirstPersonGameMode蓝图4. Project Settings

信用消费的血栓问题-逾期订单诊断指南

在信用消费场景中,用户最怕看到的两个字莫过于“逾期”,但现实中,有相当一部分逾期记录源于系统协同中的技术误差。在本篇文章中我将揭示逾期订单的形成机制,并给出一些常见问题的解决方式,希望能帮助到大家。在信用消费场景中,用户最怕看到的两个字莫过于“逾期”——它…

Linux软件无法获取IGPV3的udp数据问题

问题 tcpdump能获取到数据,但是其他进程(内部获取udp)无法获取此udp数据 源是来自IGPV3的组播源,添加之前已经试过加入组播,但是还是无法接收到数据 解决 使用命令 systcl -a |grep rp_filter发现设备开启了严格的反向过滤关闭 net.ipv4.conf.all.rp_filter和net.ipv4.co…

如何通过接口测试驱动PLM效能提升?2025年禅道等工具实践白皮书

一、PLM系统测试的行业痛点与转型机遇 全球PLM市场规模预计2025年突破500亿美元,但企业调研显示,73%的PLM系统测试问题集中在接口兼容性与数据流断层。某汽车零部件厂商因BOM变更未触发ERP同步,导致生产线停摆4小时损失超千万。这暴露出传统测试方法的三大致命短板:数据孤岛…