在线地图叠加WMS服务,配合WFS数据服务实现图层叠加,属性查看功能

在线地图叠加WMS服务,配合WFS数据服务实现图层叠加,属性查看功能

  • 实现思路
    • 实现方式
    • 备注:计算bbox参数值网上还提供了以下方式

实现思路

根据WFS服务参数可以看出,一种是空间查询(一定范围内的数据查询)、还有一种数据查询(类似于sql查询,使用关键字filter),以上两种查询配合返回的数据量count就可以确定查询的数据范围,可以解决数据量大带来的卡顿问题。
1、WMS配合WFS实现属性查询,为了更加流畅的在地图中展示并叠加地图服务,先通过wms瓦片服务进行地图展示,然后通过点击地图中的要素,计算bbox范围数据,通过wfs服务进行查询范围查询(包括交叉),可以返回要素的属性信息。
2、直接通过WFS进行图层展示和属性查询,该方式可以根据当前屏幕的坐标范围和返回的数据量解决数据叠加卡顿问题,获取当前屏幕的左上角右下角的坐标值给bbox,同时根据当前的地图级别,一般在要素能够清晰显示的最大图层下设置数量和bbox即可。

实现方式

示例地址:http://localhost:8081/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&outputFormat=application/json&typename=xx:xxxx&count=50&bbox=xx.xxxxxxx,xxx.xxxxxxxx,xx.xxxxxx,xxx.xxxxxxxx
参数介绍:
count:返回的数据量,根据实际情况定义即可。
typename:图层名称,通过geoserver预览页查看。
bbox:查询范围(左上角,右下角坐标),两个坐标组成的矩形范围。

一、空间查询

1、计算bbox范围,通过点击地图,获取坐标,根据当前获取的坐标计算bbox,方法如下:

假设点击坐标点经纬度为 (lat_center, lon_cente),矩形的宽度为width,矩形的高度为 height,则矩形的左上角和右下角的经纬度可以通过以下方式计算 :
计算左上角的纬度: lat_top_left = lat_center +(height / 2.0)
计算左上角的经度: lon_top_left = lon center -(width /2.0)
计算右下角的纬度: lat_bottom_right = lat center - (height / 2.0)
计算右下角的经度: lon_bottom_right = lon center + (width / 2.0)
因此,矩形的左上角经纬度为 (lat_top_left, lon _top_left),
右下角经纬度为 (lat_bottom_right, lon _bottom_right)。

2、根据bbox的范围调用wfs服务,获取属性信息,完成业务展示。

二. 数据查询

1、获取屏幕或者可视范围内的矩形的左上角,右下角经纬度坐标信息,赋值给bbox,一般地图的api都支持获取。
2、将地图放缩到合适的级别(即能够看清要查询的要素,例如展示路线图层,应该清楚的看到每条路线,不能重叠,同时点击时不会出现同时点击多条路线)。
3、根据获取的级别,设置返回的数据量count值,由于地图级别限制此时的值不会很大,完全可以流畅叠加。
4、添加图层的点击事件,获取属性实现业务展示。

备注:计算bbox参数值网上还提供了以下方式

(https://blog.csdn.net/qcmy980/article/details/131737089),可以自行测试,具体如下:
/**
计算用户坐标应该减去的差值
/ function getZoomBbox(zoom){
let level0 = 142.03125
let box = level0 / Math.pow(2,zoom)
box = box / 2
return box } /

*根据用户点击的坐标计算 bbox参数
*/ function bbox(latlng,zoom) {
let box = this.getZoomBbox(zoom)
let boxMin = {
lat: latlng.lat - box,
lng: latlng.lng - box
}
let boxMax = {
lat: latlng.lat + box,
lng: latlng.lng + box
}
// console.table({zoom,box,latlng,boxMin, boxMax })
return ${boxMin.lng},${boxMin.lat},${boxMax.lng},${boxMax.lat} }

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

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

相关文章

微服务的流量管理-服务网格

对于单体应用来说,一般只有流入和流出两种流量。而微服务架构引入了跨进程的网络通信,流量发生在服务之间。由许多服务组成了复杂的网络拓扑结构,每次请求都会产生流量。 这些流量如果没有妥善的管理,整个应用的行为和状态将会不…

全局变量为什么没有野指针

全局变量为什么没有野指针? 全局变量是指在程序的任何地方都可以访问的变量,它们通常存储在静态内存区域,也称为数据段。野指针是指指向非法或不可用内存地址的指针,它们可能会导致内存泄漏、程序崩溃或数据损坏。 全局变量没有野…

封装Servlet使用自定义注解进行参数接收

文章目录 前言一、前后对比✨二、具体实现🎇三、效果展示🎏 前言 先说项目背景,本项目是本人在校期间老师布置的作业(就一个CRUD),课程是后端应用程序设计,其实就是servlet和jsp那一套&#xf…

【c】课程满意度计算

我们不好直接比较二维数组中任意多个元素的值是否相等,我们可以创建一维数组,首先将一维数组的值全部设为0,一维数组的下标代表你喜欢课程的量,一维数组的各个元素的值代表你喜欢的次数 例如 你输入3 5,代表你喜欢第三…

好用的挂耳式蓝牙耳机有哪些?分享几款热门好用的蓝牙耳机

挂耳式蓝牙耳机已经成为我们日常生活中的一部分,无论是在通勤、运动还是日常休闲时,它们都发挥着不可替代的作用,随着技术的不断进步,挂耳式蓝牙耳机的音质、连接稳定性以及续航时间都有了显著的提升,下面,…

纯C读取文件实现解析H264裸流每一帧数据

最近研究硬解解码,需要解码H264流文件。 imx的例程是设置一个大的缓冲区,一次性读入不超过10M字节数据,然后全部送到解码器进行解码,对于小于10M字节的视频数据确实很方便的解码了,但是文件大了这种方式就不行了。 如果…

【C++初阶】六、类和对象(初始化列表、static成员、友元、内部类)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【C初阶】五、类和对象 (日期类的完善、流运算符重载函数、const成员、“&”取地址运算符重载)-CSDN博客 目录 ​​​​​​​一 . 初始化列表 构造函数…

三分钟快速了解Python中的判断语句!

三分钟快速了解Python中的判断语句! 在Python中,判断语句用于根据条件执行不同的代码块。Python提供了两种类型的判断语句:if语句和if-else语句。本文将详细介绍这两种判断语句的用法,并通过实例代码进行演示。 一、if语句 if语…

06 g2o 学习

文章目录 06 g2o 学习6.1 概念6.2 框架简介6.3 代码示例 06 g2o 学习 6.1 概念 g2o(General Graphic Optimization)是基于图优化的库。图优化是把优化问题表现成图的一种方式。一个图由若干个顶点(Vertex),以及连接这这些顶点的边(Edge)组成。用顶点表示优化变量&…

【python】——函数

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

P8 删除链表指定节点

前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ &#x1f4…

【灵魂 |数据结构与算法】 数据结构必备经法(开山篇),一起修炼算法经法!

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

Go to do list

go 语言中怎么实现分布式系统? 在Go语言中实现分布式系统需要考虑以下几个方面: 通信协议:在分布式系统中,各个节点需要通过网络进行通信。Go语言提供了丰富的网络编程库,如net/http、net/rpc等,可以方便…

Python-错误与异常处理

在 Python 中,错误和异常处理是编写健壮程序的重要组成部分。下面是一些关于错误和异常处理的基本知识: 错误(Errors)和异常(Exceptions): 错误: 错误是程序的语法或逻辑错误&#…

【Qt】QDialog的成员函数exec()的返回值

2023年12月4日,周一上午 目录 返回值有哪些 怎么给QDialog的按钮设置按下后让exec()返回QDialog::Accepted或QDialog::Rejected呢? 返回值有哪些 QDialog::exec()函数在Qt中是用于显示对话框的一种方法,它会阻塞调用线程,直到用…

LeetCode463. Island Perimeter

文章目录 一、题目二、题解 一、题目 You are given row x col grid representing a map where grid[i][j] 1 represents land and grid[i][j] 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounde…

基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xf…

Inno Setup使用

功能需要,出一个安装包并写入相关的注册表,在此整理了注册表启动项相关的参考文档。多个资料整合在了一起。 [Registry] Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#M…

【开源】基于Vue和SpringBoot的音乐偏好度推荐系统

项目编号: S 012 ,文末获取源码。 \color{red}{项目编号:S012,文末获取源码。} 项目编号:S012,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

RabbitMQ避免重复消费

在Java中,可以使用消息队列来实现消息的异步处理,其中常用的消息队列有 RabbitMQ、ActiveMQ、Kafka 等。 什么是幂等性? 幂等性是指无论操作执行多少次,都是得到相同的结果,而不会产生其他副作用。 在rabbitMQ中 什…