当前位置: 首页 > news >正文

OpenLayers:extent与view extent 介绍

一、范围的概念

1.什么是范围?

在Openlayers中范围(Extent)是用于表示地理空间区域的一种概念。它通常由一个数字数组构成,数组中的内容为:[最小x坐标,最小y坐标,最大x坐标,最大y坐标]

Extent实际上表示了一个矩形的空间范围:

2.什么是视图范围?

视图范围可以理解为Openlayers的map在浏览器视口中所显示的地理空间范围,这个范围被map所关联的view(视图)来存储和管理,所以称之为视图范围。

二、视图范围的使用

1.设置视图范围

想要设置视图范围可以在实例化View时通过extent属性来设置。

但是在实例化完成后似乎就没有办法去修改一个视图的extent了。

2.获取视图范围

获取地图当前的视图范围是一个常见的操作,当前的视图范围可以帮助我们去甄别一些要素是否应该被现实从而实现要素的“懒加载”。这个范围一般可以通过view.calculateExtent()方法计算得到。

  // 当前的视图范围const extent = map.getView().calculateExtent();

如果map已经与view进行了绑定,则直接调用calculateExtent()就可以计算出视图的范围。但是在一些特殊情况下(如,map没有与view相绑定或者view绑定了多个map)想要获取视图范围,此时就要给calculateExtent()传递一个box size 作为参数,最终计算出来的范围将适配这个size,可以使用map.getSize()方法获取地图的尺寸用来作为参数计算视图范围。

// 如果map没有与view相绑定
const extent = view.calculateExtent( map.getSize() );

三、其它类型中的范围

1.图层、数据源和几何的范围

Openlayers中 Layer(图层)、Source(数据源)、Geometry(几何)等重要的类型都有自己的 extent属性,通常用于表示包含其内容的地理范围。调用它们的getExtent()方法就可以获取到它们的范围。

// 获取图层的范围
layer.getExtent()// 获取数据源的范围
source.getExtent()// 获取几何图形的范围
point.getExtent()
polyline.getExtent()
polygon.getExtent()

在实际的开发中,我经常会使用这些范围来实现图层的定位或几何图形的定位。

// 视角切换到图层范围
map.getView.fit(layer.getExtent())// 视角切换到某个几何图形
map.getView.fit(pointFeature.getGeometry().getExtent())

2.投影坐标系的范围

投影坐标系也有自己的范围,例如 EPSG:4326 的范围就是 [-180, -90, 180, 90]。投影坐标系的范围同样也是通过它们的getExtent()方法获取。

import { get as getProjection } from "ol/proj";getProjection("EPSG:4326").getExtent(),

在创建切片数据源的tileGrid时就有可能会用到投影范围。

const tileGrid = new createXYZ({extent: getProjection("EPSG:4326").getExtent(),maxZoom: 18,
}),

四、常用的范围方法

Openlayers中封装了一批专门用来操作Extent的方法,这些方法可以辅助我们在实际开发中实现很多的功能。

1.获取范围的特征信息的方法

前面提到过范围可以理解为就是一个“矩形框”,有一些方法专门用来计算矩形框的特征信息:

方法

描述

getSize

获取范围的尺寸

getArea

获取范围的面积

getWidth

获取范围的宽度

getHeight

获取范围的高度

getCenter

获取范围的中心点

getTopLeft

获取范围的左上角点

getTopRight

获取范围的右上角点

getBottomLeft

获取范围的左下角点

getBottomRight

获取范围的右下角点

2.范围查询方法

范围最常用的一种场景就是进行范围查询。containsCoordinate(extent, coordinate)containsXY(extent, x, y)containsExtent(extent1, extent2) 三个方法可以用来进行范围查询。其中前两个方法用于检查坐标是否位于范围内,最后一个方法则用于检查一个范围是否包含于另一个范围内。

下面这个例子就展示了如何利用containsExtent方法检查一个Featrue要素是否位于范围内:

const extent = [...]; // 范围
const feature = new Feature(...); //要素// 检查要素是否位于范围内
const res = containsExtent(extent, feature.getGeometry().getExtent())

3.范围工厂方法

还有一些方法可以创建一个范围,例如boundingExtent(coordinates)方法,它可以创建一个包含所有给定坐标的范围。

下面的例子展示如何使用boundingExtent()方法创建一个包含所有点要素的范围:

const pointFeatures = [...];// 创建一个包含所有点要素的范围
const extent = boundingExtent(pointFeatures.map(r => r.getGeometry().getCoordinates())
);

参考资料

  1. OpenLayers v10.5.0 API - Class: View
  2. OpenLayers v10.5.0 API - Module: ol/extent

相关文章:

OpenLayers:extent与view extent 介绍

一、范围的概念 1.什么是范围? 在Openlayers中范围(Extent)是用于表示地理空间区域的一种概念。它通常由一个数字数组构成,数组中的内容为:[最小x坐标,最小y坐标,最大x坐标,最大y坐…...

Python开发一个简单的软件系统

用Python语言实现,具备录入学生成绩、查询成绩和显示所有成绩等基本功能。以下是代码: # 用于存储学生成绩的字典,键是学生姓名,值是成绩 student_scores {} # 录入学生成绩的函数 def input_scores(): name input("…...

小草GrassRouter多5G聚合路由设备在应急公安消防行业的解决方案及重要作用

小草GrassRouter多5G聚合路由设备在应急、公安、消防等行业的解决方案及重要作用主要体现在以下几个方面,这些领域对通信的高可靠性、高带宽、低时延需求尤为突出,尤其在复杂环境或突发事件中需要保障指挥调度的实时性和稳定性: ** 一、行业…...

冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序

目录 冒泡排序插入排序快速排序(未优化版本)快速排序(优化版本)堆排序希尔排序归并排序各排序时间消耗对比 冒泡排序 冒泡排序核心逻辑就是对数组从第一个位置开始进行遍历,如果发现该元素比下一个元素大,则交换位置,如果不大,就…...

JVM知识

JVM 内存模型 JVM的内存模型介绍一下 根据 JVM8 规范,JVM 运行时内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 JVM的内存结构主要分为以下几个部分: 方法区:存放类对象 Java 虚拟机栈:存放方法之间的调…...

Docker 中多个容器之间的通信

在 Docker 中,多个容器之间的通信可以通过以下几种主要方式实现,具体选择取决于网络需求、隔离性及管理复杂度: 一、自定义 Bridge 网络(推荐) 通过创建自定义的 Docker 网络,容器可以加入同一网络并通过容…...

docker desktop for windows 登录国内镜像仓库

在使用 Docker Desktop for Windows 时,如果你希望连接到国内的 Docker 镜像仓库(例如阿里云、腾讯云等),你可以通过配置 Docker 镜像加速器来实现。以下是一些步骤和示例,帮助你设置 Docker Desktop for Windows 以使…...

【blender小技巧】使用blender的Cats Blender Plugin插件将3D人物模型快速绑定或者修复为标准的人形骨骼

文章目录 前言绑定或者修复人形骨骼1、下载模型2、导入模型到blender中3、删除无用的相机和灯光3、导出模型并在unity中使用 专栏推荐完结 前言 有时候我们下载的3D人物模型,可能不带骨骼信息,或者带一些错乱的骨骼信息。这时候我们就可以使用blender将…...

视频压缩技术学习(不高明版本)

1. 压缩的本质与核心目标​​ 视频压缩的核心在于​​去除冗余信息​​,包括空间冗余(相邻像素相关性)、时间冗余(连续帧相似性)以及视觉冗余(人眼感知特性)。通过算法优化,在保持可…...

在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具: 一、使用 npm 1. 直接过滤依赖树 npm ls --depth0 | grep "1.1.9"说明: npm ls --depth0:仅显示直接依赖&#xf…...

【Web前端技术】第一节—HTML简介

做出一个属于自己的网站! 云边有个稻草人-个人主页 为你,千千万万遍 ——哈桑 目录 一、网页 1.什么是网页? 2. 什么是 HTML? 3. 网页的形成 二、常用浏览器 1. 常用浏览器 2. 浏览器内核 三、Web标准(重点&…...

LINUX 416 路由转发1

那干脆先配置一下 boot目录必然是标准分区 配路由转发实验 路由器 计划新建3个虚拟机,分别是主机、节点a、节点b,都时间仅主机模式 路由器网卡IP: 节点a路由表 这次装载了附件,桌面安装模式,不用像 最小化安装模式那样折…...

【音视频开发】第四章 SDL音视频渲染

【音视频开发】第四章 SDL音视频渲染 文章目录 【音视频开发】第四章 SDL音视频渲染一、简介1.什么是 SDL 二、Windows 环境搭建三、SDL 子系统四、Window 显示1.SDL 视频显示函数简介2.窗口渲染结构体 五、SDL 事件1.通用事件结构体 SDL_Event2.事件类型 六、SDL 线程1.常用线…...

音频基础概念

声音 物体在一定的振动频率下产生了声音。声音可以被分解为不同频率不同强度正弦波的叠加。 声音三要素 声调 音调: 由发声体振动的频率决定,频率越高(振动越快)则音调越高,听起来就越“刺耳”,反之音调越低、听起…...

rust编程学习(二):复合数据类型

复合数据类型是由其他类型组合而成的类型。Rust的复合数据类型有元组、数组、结构体、枚举等, 通过一些简单的例子帮助大家快速了解Rust复合类型。 1 元组类型 元组类型是由一个或多个类型的元素组合成的复合类型,使用小括号“()”把所有元素放在一起。…...

学习笔记十四——一文看懂 Rust 迭代器

🌀 一文看懂 Rust 迭代器 📚 目录导航 什么是迭代器?为什么 Rust 到处都在用它?Rust 迭代器的底层逻辑是什么?适配器 vs 消费者:谁是主角?常见适配器:加工数据的全能工厂常见消费者…...

H.265硬件视频编码器xk265代码阅读 - 帧内预测

源代码地址: https://github.com/openasic-org/xk265 帧内预测具体逻辑包含在代码xk265\rtl\rec\rec_intra\intra_pred.v 文件中。 module intra_pred() 看起来是每次计算某个4x4块的预测像素值。 以下代码用来算每个pred_angle的具体数值,每个mode_i对应…...

贪心算法学习C++

1,跳跃游戏II 题目连接:45. 跳跃游戏 II - 力扣(LeetCode) 【题目描述】 在给定的一个nums数组中,nums[i]表示从当前i位置最多可以向后跳跃nums[i]个位置。问跳跃到最后 数组最后一个元素的最少跳跃次数?…...

Go 语言实现的简单 CMS Web

Go 语言实现的简单 CMS Web 以下是一个使用 Go 语言实现的简单 CMS Web 演示代码示例, 包含基本的内容管理功能: 项目结构 ### 项目结构 cms-demo/ ├── main.go ├── handlers/ ├── models/ ├── views/ │ ├── home.html │ ├─…...

Zookeeper选举机制

一、选举机制的核心原理 ZooKeeper的选举机制基于ZAB协议(ZooKeeper Atomic Broadcast),这是一种为分布式系统设计的原子广播协议。其核心目标是快速选举出Leader节点,并确保数据一致性。以下为关键原理: 1. 选举触发…...

安卓自定义build的apk文件名

android studio打包应用默认生成的apk名称是:app-release.apk 。 如果我们想修改生成的apk文件名,比如想放入版本号,比如想放入渠道号,又比如和打包时间有关联,那我们就需要能自动化生成可自定义的apk文件名&#xff…...

【Web APIs】JavaScript 操作多个元素 ④ ( 表格全选复选框案例 )

文章目录 一、核心要点解析 - 表格全选复选框案例1、案例需求2、复选框设置3、获取 全选复选框 和 普通复选框4、设置 全选复选框 逻辑5、设置 普通复选框 逻辑 二、完整代码示例1、代码示例2、执行结果 一、核心要点解析 - 表格全选复选框案例 1、案例需求 在表格中 , 设置 多…...

Lua 第6部分 函数

在 Lua 语言中,函数( Function )是对语句和表达式进行抽象的主要方式。 函数既可以用 于完成某种特定任务(有时在其他语言中也称为过程 ( procedure )或子例程 ( s ubroutine) ), 也可以只是进行…...

OpenCv高阶(五)——SIFT特征提取

目录 SIFT特征提取 一、原理核心步骤 1. 尺度空间极值检测 2. 关键点定位 3. 方向分配 4. 描述子生成 二、SIFT算法具有的特点 三、SIFT特征提取器的简单使用 1、特征检测器的创建 2、 检测图像中的关键点 3、绘制关键点 4、计算关键点描述符 四、SIFT 算法的优缺点…...

基于Spring MVC的客户端真实IP获取方案解析

文章目录 基于Spring MVC的客户端真实IP获取方案解析概述核心方法解析代码实现工作流程 IP获取优先级策略IP有效性验证异常处理与日志使用场景注意事项扩展建议 基于Spring MVC的客户端真实IP获取方案解析 概述 在Web应用开发中,准确获取客户端真实IP地址是常见的…...

JavaScript爬虫基础篇:HTTP 请求与响应

在互联网的世界里,数据无处不在。无论是新闻资讯、商品信息,还是社交媒体动态,这些数据都以各种形式存储在服务器上。而爬虫,就是我们获取这些数据的得力助手。今天,我们就来聊聊爬虫的基础——HTTP 请求与响应&#x…...

【Java基础】Java集合遍历方式

前言 在Java编程中,集合(Collection)是存储和操作对象的核心工具。遍历集合是开发者最频繁的操作之一,但不同场景下选择合适的遍历方式至关重要。 一、基础遍历方式 1. 基本for循环 适用场景:仅适用于List等有序集…...

KWDB创作者计划—深度解析:AIoT时代的分布式多模型数据库新标杆

在AIoT(人工智能物联网)快速发展的今天,数据的多样性、实时性和复杂性对数据库提出了前所未有的挑战。传统的数据库架构往往难以同时满足时间序列数据的高效处理、关系型数据的复杂查询以及多模型数据的无缝集成需求。而KWDB 2.2.0版本的发布…...

智慧城市大数据整体建设方案,数据中台方案(word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章…...

Nginx:轻量级高性能的Web服务器与反向代理服务器

目录 一.引言 二.Nginx的核心特点 2.1高性能与高并发 2.2低资源消耗 2.3功能丰富 2.4高度扩展性 三.Nginx的应用场景 3.1静态资源服务器 3.2反向代理服务器 3.3API网关 3.4Nginx的配置与使用 四.总结 一.引言 在互联网高速发展的今天,Web服务器的性能与…...

【Pandas】pandas DataFrame pop

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...

Spring Boot集成MinIO的详细步骤

1. 安装MinIO 使用Docker部署MinIO 拉取MinIO镜像: docker pull minio/minio 这将从Docker Hub中获取最新的MinIO镜像。 创建目录: mkdir -p /home/minio/config mkdir -p /home/minio/data 这些目录将用于持久化MinIO的数据和配置文件 创建MinIO…...

【文献笔记】SatLM: Satisfiability-Aided Language Models Using Declarative Prompting

SatLM: Satisfiability-Aided Language Models Using Declarative Prompting 原文代码 标题翻译:SATLM:使用声明式提示的语言模型SAT辅助 1. 简介 1.1. 研究问题 文章提出了SATLM方式,使用LLM生成声明性任务规范,而不是命令式…...

LRU算法

package LRU缓存;import java.util.Arrays; import java.util.HashMap;//建立一个双向队列 class MyQueueNode{int key;int value;MyQueueNode pre;MyQueueNode next;public MyQueueNode(int key,int value){this.key key;this.valuevalue;} } class MyQueue{MyQueueNode head…...

二进制和docker两种方式部署Apache pulsar(standalone)

#作者:闫乾苓 文章目录 1、二进制安装部署Pulsar(standalone)1.1 安装配置JDK1.2 下载解压pulsar安装包1.3 启动独立模式的Pulsar 集群1.4 创建主题测试1.5 向主题写入消息测试1.6 从主题中读取消息测试 2.docker安装部署Pulsar(standalone)2.1 使用docker 启动Pul…...

【物联网】基于LORA组网的远程环境监测系统设计

基于LORA组网的远程环境监测系统设计 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数…...

k8s+有状态nacos账户密码安全认证开启+springcloud 配置

nacos 账号密码登录,默认未开启验证权限,不登录也能访问nacos控制台配置文件,生产环境非常不安全。所以需要手动开启安全认证。本地启动nacos的 application.properties配置文件更改如下: ### The auth system to use, currently only nacos …...

《分布式软总线赋能老旧设备高效通信》

在数字化转型的浪潮中,分布式软总线技术成为实现设备互联互通的关键力量。然而,当面对大量老旧设备时,其性能受限的现状对分布式软总线提出了严峻挑战。如何在这些性能瓶颈下,让老旧设备实现高效连接与通信,是亟待解决…...

07-云原生安全深度剖析:从 Kubernetes 集群防护到微服务安全加固

云原生安全深度剖析:从 Kubernetes 集群防护到微服务安全加固 一、云原生时代的安全挑战 1.1 云原生架构的复杂性引入新风险 在云原生架构下,Kubernetes 集群管理着大量动态变化的容器化应用,微服务通过 API 频繁交互,传统安全…...

Object.create(null)`和`{}`创建的对象有什么区别?

在 JavaScript 中,使用 Object.create(null) 和 {} 创建的对象有以下核心区别: 1. 原型链的差异 创建方式原型链([[Prototype]])继承关系const obj {}继承自 Object.prototype拥有 Object 的原型方法const obj Object.create(n…...

Sherpa简介

Sherpa 是一个由 K2-FSA 团队 开发的 开源语音处理框架,旨在解决传统语音识别工具(如 Kaldi)在模型部署和跨平台适配中的复杂性问题。它通过整合现代深度学习技术和高效推理引擎,提供了从语音识别、合成到说话人识别的一站式解决方…...

【MySQL】索引事务

索引 1.索引概念 数据库使用select查询需要将表中所有的数据都遍历一遍筛选出满足where条件的,如果表中数据非常多,遍历一遍就需要O(n)复杂度是非常高的,为此就引入了索引的概念。 索引是查询的优化手段,避免对表进行遍历&…...

STL详解 - list

目录 一、List容器概述 1.1 什么是list? 1.2 核心特点 二、List的定义与初始化 三、List 的基本操作 3.1 插入操作 🌵头插和尾插 🌵指定位置插入 3.2 删除操作 🍋头删和尾删 🍋指定位置删除 四、List 的迭代…...

LinkedList<Integer> 常用方法通俗讲解

LinkedList<Integer> linkedList new LinkedList<>(); 创建了一个整数类型的链表。链表就像一列火车&#xff0c;每节车厢(节点)都连接着下一节车厢。下面我用通俗易懂的方式讲解它的主要方法&#xff1a; 1. 添加元素 add(5) - 在链表末尾添加数字5&#xff0c…...

[250416] GitHub Action 新升级,支持 Windows on Arm

目录 GitHub Actions 更新&#xff1a;Windows arm64 托管运行器现已推出公共预览版 GitHub Actions 更新&#xff1a;Windows arm64 托管运行器现已推出公共预览版 现在&#xff0c;GitHub 为公共代码仓库免费提供了基于 Windows arm64 架构的托管运行器&#xff08;Hosted R…...

Spring Boot 整合 Redis 实现点赞功能:从基础到实践

在当今互联网应用开发中&#xff0c;点赞功能几乎成为了各类内容平台的标配。它不仅能增加用户与内容之间的互动&#xff0c;还能直观地反映内容的受欢迎程度。本文将详细介绍如何使用 Spring Boot 整合 Redis 来实现一个简单的文章点赞功能&#xff0c;让你轻松掌握这一实用技…...

深入解析布尔注入:原理、实战与防御

目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例&#xff1a;获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入&#xff08;Boolean-Based Blind SQL Injection&#xff09;是一种…...

1.2 使用RawInputSharp来取得键盘硬件信息以及虚拟码

RawInputSharp 是一个 C# 库&#xff0c;用于处理 Windows 的原始输入(Raw Input) API&#xff0c;它允许开发者直接访问键盘、鼠标等输入设备的底层数据。 本例介绍如何读取键盘的虚拟码以及键盘硬件信息。效果如下图&#xff1a; 示例中&#xff1a;开始是1键的按下与抬起&am…...

C++23 中的可选扩展浮点类型:std::float{16|32|64|128}_t 和 std::bfloat16_t

文章目录 1. 扩展浮点类型概述2. 如何使用这些类型3. 编译器支持4. 特性测试宏5. 类型转换和重载决议6. 标准库支持7. 应用场景8. 总结 C23 引入了可选的扩展浮点类型&#xff0c;包括 std::float16_t、 std::float32_t、 std::float64_t、 std::float128_t 和 std::bfloa…...

JVM 内存调优

内存调优 内存泄漏&#xff08;Memory Leak&#xff09;和内存溢出&#xff08;Memory Overflow&#xff09;是两种常见的内存管理问题&#xff0c;它们都可能导致程序执行不正常或系统性能下降&#xff0c;但它们的原因和表现有所不同。 内存泄漏 内存泄漏&#xff08;Memo…...