leaflet 移动端h5地图开发(一) 点聚合矢量瓦片(附项目代码和数据)

2024-06-10 07:08

本文主要是介绍leaflet 移动端h5地图开发(一) 点聚合矢量瓦片(附项目代码和数据),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

leaflet 移动端h5地图开发(一) 点聚合&矢量瓦片(附项目代码和数据)

leaflet是一个轻量级的GIS前端框架,支持多种GIS服务(wfs,wms,wmts,arcgis mapserver,mvt矢量切片)。但是leaflet不支持三维,如果不考虑三维的话,leaflet是做移动端h5地图很好的选择。

技术栈

前端 : vue (uniapp) +leaflet

GIS服务器:geoserver

案例项目界面效果(仿高德):

在线预览地址:http://magic1412.gitee.io/h5_leaflet/#/

一、加载点marker,并添加点击事件

运用到markercluster插件实现点的聚合效果

插件地址:https://github.com/Leaflet/Leaflet.markercluster

封装请求wfs服务的函数

requestWFSData = (opts) => {return new Promise((resolve, reject) => {var urlString = opts.root + '/wfs'var param = {service: 'WFS',version: '1.0.0',request: 'GetFeature',typeName: opts.layerId,outputFormat: 'application/json',maxFeatures: 3200,srsName: 'EPSG:4326',}if (opts.cql_filter) param.CQL_FILTER = opts.cql_filteraxios.get(urlString + L.Util.getParamString(param, urlString)).then(res => {if (res.data) {resolve(res)} else {reject('请求wfs错误')}})})
}

将返回的点json,遍历实例化成marker,添加点击事件后,添加至markerClusterGroup中

addMakerLayer = (opts) => {this.requestWFSData(opts).then(res => {if (res.data.features.length > 0) {this._layerDict[opts.layerId] = L.markerClusterGroup({spiderfyOnMaxZoom: false,showCoverageOnHover: false,zoomToBoundsOnClick: false}).addTo(this._map)res.data.features.forEach(f => {var c = f.geometry.coordinatesvar title = f.properties[opts.idField]var marker = L.marker(new L.LatLng(c[0][1], c[0][0]))marker.on('click', evt => {this._map.flyTo(evt.latlng, 16)})marker.bindPopup(title.toString())this._layerDict[opts.layerId].addLayer(marker)})}})
}

二、加载矢量瓦片

使用Leaflet.VectorGrid插件加载geoserver矢量瓦片

插件地址:https://github.com/Leaflet/Leaflet.VectorGrid

addVectorTileLayer = (opts) => {this._layerDict[opts.layerId] = L.vectorGrid.protobuf(opts.url, {rendererFactory: L.canvas.tile,tms: true,interactive: true,vectorTileLayerStyles: opts.vectorTileLayerStyles}).addTo(this._map)
}

实现点击矢量瓦片跳转页面

定义个list,初始化图层时,存储图层信息。

addToClickSearchList = (opts) => {this._clickSearchList.push({root: opts.root, //wfs服务根地址layerId: opts.layerId, //图层ididField: opts.idField, //id字段crs: opts.crs,//坐标系added: true //是否})
}

遍历list,构造crs(坐标系) 和 cql_filter (筛选条件) 参数

getClickFeatrue = (pt) => {if (this._clickSearchList.length === 0) returnif (document.getElementById("popup")) document.getElementById("popup").remove()var content = '<a id="popup" style="text-decoration: underline;cursor: pointer;">'this._clickSearchList.forEach(l => {if (l.added) {var cptif (l.crs === 'EPSG:4326') cpt = L.CRS.EPSG4326.project(pt)if (l.crs === 'EPSG:3857') cpt = L.CRS.EPSG3857.project(pt)l.cql_filter = 'INTERSECTS(geom,POINT(' + cpt.x + ' ' + cpt.y + '))'this.requestWFSData(l).then(res => {if (res.data.features.length !== 0) {var geoObj = L.geoJSON(res.data)content += res.data.features[0].properties[l.idField] + '</a>'this._clickResLayer = geoObj.addTo(this._map)geoObj.bindPopup(content).openPopup()		}})}})
}

三、案例数据

疫情数据:

来源于腾讯疫情小区地图,原接口已不能用,现在的地址是

https://map.wap.qq.com/app/mp/online/h5-epidemic-20200203/OutMapDetail.html?hideBrowserTitle=1

上海小区边界和学校边界(国测局/高德坐标)

扫描关注 “GIS攻城狮” 公众号,回复”上海小区学校边界“,获取数据数据百度云链接
在这里插入图片描述

四、案例项目代码

https://gitee.com/magic1412/h5_leaflet

在这里插入图片描述

这篇关于leaflet 移动端h5地图开发(一) 点聚合矢量瓦片(附项目代码和数据)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047483

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组