OpenLayer系列——【一】初识OpenLayer与OpenLayer视图操作

news/2024/7/19 13:09:02 标签: js, openlayer, gis, vue2

初识OpenLayer

1、初始化地图渲染

安装openlayer依赖

js">npm i ol

首先准备一个容器用来渲染地图

<div id="map" ref="map" style="width: 100%; height: 100%" />

导入依赖初始化地图

js">import 'ol/ol.css';
import OSM from 'ol/source/OSM.js';
import { Map, View } from 'ol';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';

this.map = new Map({
  target: "map",
  layers: [
    new TileLayer({
      source: new XYZ({
        url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.jpg"
      })
    })
  ],
  view: new View({
    center: [116.403218, 39.92372],
    zoom: 0,
    minZoom: 1,
    maxZoom: 12,
    // 视角旋转
    rotation: Math.PI / 5,
    // 视图约束
    extent: [110, 20, 120, 30]
    // 地图坐标系的类型
    projection: "EPSG:4326"
  })
});

在这里插入图片描述

其中视图View对象全部可以使用的属性如下

属性名说明
center地图视图的中心点坐标。它是一个包含经度和纬度的数组,例如[116.403218, 39.92372]
zoom地图的缩放级别
minZoom地图的最小缩放级别
maxZoom地图的最大缩放级别
rotation地图视图的旋转角度。它以弧度为单位,例如Math.PI / 5表示逆时针旋转36度
extent地图视图的可见范围。它是一个包含最小经度、最小纬度、最大经度和最大纬度的数组,例如[110, 20, 120, 30]。这个属性定义了地图可见区域的边界
projection地图视图的投影方式。它定义了地图坐标系的类型,例如"EPSG:4326"表示使用WGS84坐标系
resolutions地图的分辨率数组。它定义了每个缩放级别对应的地图分辨率。数组元素的顺序应该与缩放级别一致
constrainResolution布尔值,表示是否约束地图分辨率。当该属性设置为true时,地图将自动根据可用的分辨率调整缩放级别
enableRotation布尔值,表示是否允许旋转地图。当该属性设置为false时,禁止用户旋转地图视图
enableZoom布尔值,表示是否允许缩放地图。当该属性设置为false时,禁止用户缩放地图视图
enablePan布尔值,表示是否允许平移地图。当该属性设置为false时,禁止用户平移地图视图
smoothExtentConstraint布尔值,表示是否使用平滑约束范围。当该属性设置为true时,地图平移和缩放时会平滑过渡到约束范围内
smoothResolutionConstraint布尔值,表示是否使用平滑约束分辨率。当该属性设置为true时,地图缩放时会平滑过渡到约束分辨率

openlayer当中还提供了一个地图图层OSM

js">this.map = new Map({
  target: "map",
  layers: [
    new TileLayer({
      source: new OSM()
    })
  ],
  view: new View({
    center: [0, 0],
    zoom: 2
  })
});

2、获取当前视图的属性

js">// 当前层级
this.map.getView().getZoom()
// 当前中心点
this.map.getView().getCenter()

3、层级切换

openlayer当中我们可以发现zoom就是用来控制层级的,所以我们可以直接通过获取View之后直接修改Zoom用来实现层级切换,

js">this.map.getView().setZoom(10)

但是这样是直接切换层级放大缩小没有动画效果,看起来交互就不是很好,我们可以给这个层级加上一个延时动画,通过view,animate传递一个对象进去用来控制,当然这里不单单只是可以控制zoom、还可以控制其他View里面的属性。

js">const view = this.map.getView();
const zoom = view.getZoom();
const duration = 2000;

view.animate({
  zoom: zoom + 1,
  center: [16.403218, 39.92372],
  rotation: Math.PI / 3,
  duration
});

4、区域定位

在实际开发过程当中,比方说在地图上展示了20个点,而后我们想刚刚好让这20个点在某个层级之下刚刚好全部展示,这时我们即不知道中心位置,也不知道它到底要放大到什么层级,这个时候可以通过区域定位来实现,也就是地图视图聚焦

js">const bounds = [116, 28, 125, 34];
const width = this.map.getSize()[0];
const height = this.map.getSize()[1];

// 将地图视图聚焦至初始范围
this.map.getView().fit(bounds, {
  size: [width, height],
  padding: [50, 50, 50, 50],
  minResolution: 0,
  duration: 2000,
  easeOut: function (t) {
	return 1 - Math.pow(1 - t, 2);
  }
});

这里的属性配置在下面简单说明一下

属性说明默认值
bounds数组,聚焦的四个顶点
size数组,地图视图的宽度和高度
padding设置了地图视图与边界的间距,单位(px)
minResolution地图视图的最小分辨率
duration数字,表示动画过渡的持续时间,单位(毫秒)undefined
easing函数,表示动画过渡的缓动函数undefined
maxZoom数字,表示最大缩放级别
nearest布尔值,表示是否使用最近的分辨率false
constrainResolution布尔值,表示是否限制分辨率true

http://www.niftyadmin.cn/n/5188791.html

相关文章

给定一个整数,写一个函数来判断它是否是 4 的幂次方。

题意&#xff1a; 给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 4 的幂次方需满足&#xff1a;存在整数 x 使得 n 4x 示例 1&#xff1a; 输入&#xff1a;n 16 输出…

CTFhub-RCE-过滤cat

查看当前目录&#xff1a;输入:127.0.0.1|ls 127.0.0.1|cat flag_42211411527984.php 无输出内容 使用单引号绕过 127.0.0.1|cat flag_42211411527984.php|base 64 使用双引号绕过 127.0.0.1|c""at flag_42211411527984.php|base64 使用特殊变量绕过 127.0.0.…

【教学类-40-06】A4骰子纸模制作6.0(3CM嵌套骰子6条+记录表带符号6条 -油墨打印A4铅画纸)

作品展示 幼儿手掌1/3大小&#xff0c;a4纸大小的铅画纸&#xff0c;打印6份 用了4K&#xff08;26*38CM&#xff09;湿拓纸&#xff0c;切成4K&#xff08;21*29.7CM&#xff09;大小&#xff0c;有颜色的一面&#xff0c;打印骰子图案 &#xff08;湿拓纸制作&#xff1a;水…

Go 字符串处理:fmt.Sprintf与string.Builder的比较

在Go语言中&#xff0c;我们通常会遇到两种主要的方式来处理和操作字符串&#xff1a;使用fmt.Sprintf函数和string.Builder类型。尽管两者都可以实现字符串的格式化和连接&#xff0c;但它们在性能和用法上有一些关键区别。 1. fmt.Sprintf fmt.Sprintf是一个函数&#xff0c…

OpenShift 4 - 就地调整 Pod 资源使用量

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 的环境中验证 文章目录 为什么需要就地调整 Pod 资源启动 InPlacePodVerticalScaling 特性实现就地调整 Pod 资源参考 为什么需要就地调整 Pod 资源 以往在 Kubernetes 中调整 Pod 的 …

听GPT 讲Rust源代码--library/core/src(6)

题目来自 A Gentle Introduction To Rust[1] File: rust/library/core/src/num/dec2flt/common.rs 在Rust源代码中&#xff0c;rust/library/core/src/num/dec2flt/common.rs的作用是定义了一些用于十进制到浮点数转化的共享逻辑。以下是对该文件内容的详细介绍&#xff1a; Bi…

Android App 启动流程学习

App启动 壹、App启动流程图贰、流程图详细解读2.1、系统操作Zygote 进程的孵化应用资源和类加载App在启动后立即显示应用的空白启动窗口创建应用进程 2.2、进程开始步骤3、ActivityThread 被加载到内存中步骤3.2、ActivityThread.main()步骤4、ActivityManagerService.attachAp…

蓝牙运动耳机哪个好?适合运动时戴的蓝牙耳机有哪些?

​在各式各样的耳机当中&#xff0c;运动耳机可以说是使用场景最广的一类了。毕竟运动耳机对于某些方面性能要求会比非运动耳机要高很多&#xff0c;就比如户外运动、健身、骑行等方面。面对这么多运动耳机&#xff0c;哪款更值得入手&#xff1f;今天就来给大家推荐几款很不错…