当前位置:   article > 正文

Vite + Vue3 + OpenLayers 手动控制缩放级别

vue3实现openlayers缩放和发达功能
Vite + Vue3 + OpenLayers 手动控制缩放级别

一、本文简介

Vite + Vue3 + OpenLayers 手动控制缩放级别

除了用鼠标滚轮在地图上缩放外,还可以使用 ol 提供的 api 设置地图缩放级别。

  • 获取当前缩放级别:View.getZoom()
  • 设置缩放级别:View.setZoom()

【注意:本文使用的图源是 OSM ,正式开发不能用 OSM ,因为 OSM 的中国边界有点问题!!!】

二、环境搭建

Vite + Vue3 + ol6

  1. # 1、使用 Vite 创建项目;取个好听的项目名;拉取 vue 的代码模板
  2. npm init vite@latest
  3. # 2、初始化项目
  4. cd you-project
  5. npm install
  6. # 3、安装 ol
  7. npm i ol -S
  8. # 4、启动项目
  9. npm run dev

使用 Vite 初始化项目并安装 ol ,更详细做法可以查看 『Vite + Vue3 + OpenLayers 起步』

三、思路与编码

  1. 获取当前缩放级别
  2. 点击放大或缩小按钮,原缩放级别加一或减一
  1. <template>
  2. <!-- 地图容器 -->
  3. <div id="map" class="map__x"></div>
  4. <!-- 提示信息 -->
  5. <div class="zoom__info">
  6. <p>当前zoom: {{currentZoom}}</p>
  7. <p>minZoom: {{minZoom}}</p>
  8. <p>maxZoom: {{maxZoom}}</p>
  9. </div>
  10. <!-- 控制按钮 -->
  11. <div>
  12. <button @click="zoomIn">放大</button>
  13. <button @click="zoomOut">缩小</button>
  14. </div>
  15. </template>
  16. <script setup>
  17. import { ref, computed, onMounted } from 'vue'
  18. import { Map, View } from 'ol'
  19. import Tile from 'ol/layer/Tile'
  20. import OSM from 'ol/source/OSM'
  21. import 'ol/ol.css'
  22. const map = ref(null)
  23. const zoom = 12 // 初始化zoom
  24. const minZoom = 10 // 最小zoom
  25. const maxZoom = 14 // 最大zoom
  26. // 初始化
  27. function initMap () {
  28. // 地图实例
  29. map.value = new Map({
  30. target: 'map', // 对应页面里 id 为 map 的元素
  31. layers: [ // 图层
  32. new Tile({
  33. source: new OSM() // 图层数据源
  34. })
  35. ],
  36. view: new View({ // 地图视图
  37. projection: "EPSG:4326", // 坐标系,有EPSG:4326和EPSG:3857
  38. center: [114.064839, 22.548857], // 中心坐标
  39. zoom, // 地图缩放级别(打开页面时默认级别)
  40. minZoom, // 地图缩放最小级别
  41. maxZoom // 地图缩放最大级别
  42. })
  43. })
  44. }
  45. // 实时获取当前地图的 zoom
  46. const currentZoom = computed(() => {
  47. if (map.value) {
  48. return map.value.getView().getZoom()
  49. }
  50. return zoom
  51. })
  52. // 放大1级
  53. function zoomIn() {
  54. let view = map.value.getView() // 获取当前视图
  55. let zoom = view.getZoom() // 获取当前缩放级别
  56. view.setZoom(zoom + 1) // 设置缩放级别
  57. }
  58. // 缩小1级
  59. function zoomOut() {
  60. let view = map.value.getView() // 获取当前视图
  61. let zoom = view.getZoom() // 获取当前缩放级别
  62. view.setZoom(zoom - 1) // 设置缩放级别
  63. }
  64. onMounted(() => {
  65. // 在元素加载完之后再执行地图初始化
  66. initMap()
  67. })
  68. </script>
  69. <style lang="scss" scoped>
  70. .map__x {
  71. width: 600px;
  72. height: 600px;
  73. border: 1px solid #eee;
  74. }
  75. .zoom__info {
  76. display: flex;
  77. p {
  78. margin-right: 60px;
  79. }
  80. }
  81. </style>

本例分别创建了放大和缩小的控制函数,但实际开发中其实只需写成一个函数,通过传参的方式进行控制即可。

四、推荐

本例展示地址(vite+vue3+ol)

本例仓库(vite+vue3+ol)

ol在vue2中使用(预览)

ol在vue2中使用(仓库)

OpenLayers 官网

《WebGIS之OpenLayers全面解析(第2版)》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/110023?site
推荐阅读
相关标签
  

闽ICP备14008679号