首页 > 其他分享 >56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息

56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息

时间:2025-01-03 12:00:35浏览次数:3  
标签:moveend Vue 56 地图 ol OpenLayers 坐标

前言

在现代 Web 开发中,地图应用越来越成为重要的组成部分。OpenLayers 是一个功能强大的 JavaScript 地图库,它提供了丰富的地图交互和操作功能,而 Vue 3 是当前流行的前端框架之一。在本篇文章中,我们将介绍如何在 Vue 3 中集成 OpenLayers,并使用 moveend 事件来获取地图的左上角和右下角坐标信息。

通过获取这些坐标,你可以实现地图的视野限制、统计分析等多种功能。我们将详细讲解如何在 Vue 3 中完成这一功能的实现,并通过代码示例演示具体步骤。


1. 环境准备

首先,我们需要在项目中引入 Vue 3 和 OpenLayers 库。

安装 Vue 3

如果你还没有一个 Vue 3 项目,可以通过 Vue CLI 快速创建一个新项目:

npm install -g @vue/cli vue create vue-openlayers cd vue-openlayers

在创建过程中选择 Vue 3 配置。

安装 OpenLayers

接下来,安装 OpenLayers:

npm install ol

2. 创建 Vue 组件

在这个项目中,我们将创建一个 Vue 组件,该组件初始化了 OpenLayers 地图,并使用 moveend 事件来获取地图视图的左上和右下坐标。

组件代码

<!--
 * @Author: 彭麒
 * @Date: 2025/1/3
 * @Email: 1062470959@qq.com
 * @Description: 此源码版权归吉檀迦俐所有,可供学习和借鉴或商用。
 -->
<template>
  <div class="container">
    <div class="w-full flex justify-center flex-wrap">
      <div class="font-bold text-[24px]">在Vue3中使用OpenLayers通过moveend事件获取地图左上和右下的坐标信息</div>
    </div>
    <h4 style="color: orangered">
      左上坐标:{{ lt }};右下坐标:{{ rb }}
    </h4>
    <div id="vue-openlayers"></div>
  </div>
</template>

<script setup>
import {ref, onMounted} from 'vue';
import 'ol/ol.css';
import Map from 'ol/Map';
import View from 'ol/View';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/layer/Tile';
import {getTopLeft, getBottomRight} from 'ol/extent';
const lt = ref([]); // 左上坐标
const rb = ref([]); // 右下坐标
const map = ref(null); // 地图对象
// 初始化地图
const initMap = () => {
  map.value = new Map({
    layers: [
      new TileLayer({
        source: new OSM(),
      }),
    ],
    target: 'vue-openlayers',
    view: new View({
      center: [116, 39],
      projection: 'EPSG:4326',
      zoom: 2,
      extent: [-180, -85, 180, 85],
    }),
  });
  moveendEvent(); // 绑定 moveend 事件
};

// 处理 moveend 事件
const moveendEvent = () => {
  map.value.on('moveend', () => {
    const extent = map.value.getView().calculateExtent(map.value.getSize());
    const gtl = getTopLeft(extent);
    lt.value = [Number(gtl[0].toFixed(2)), Number(gtl[1].toFixed(2))];
    const grb = getBottomRight(extent);
    rb.value = [Number(grb[0].toFixed(2)), Number(grb[1].toFixed(2))];
  });
};
// 在组件挂载时初始化地图
onMounted(() => {
  initMap();
});

</script>

<style scoped>
.container {
  width: 840px;
  height: 570px;
  margin: 50px auto;
  border: 1px solid #42b983;
}

#vue-openlayers {
  width: 800px;
  height: 400px;
  margin: 0 auto;
  border: 1px solid #42b983;
  position: relative;
}
</style>

代码说明

1. 引入依赖

我们通过 import 语句引入了 ol/ol.css 和 OpenLayers 中需要使用的模块(如 Map, View, TileLayer, OSM 等)。这将确保地图可以正确渲染。

2. 组件中的 refonMounted
  • ltrb 分别是存储左上角和右下角坐标的响应式变量。
  • map 用来保存 OpenLayers 地图对象。

onMounted 生命周期钩子中,我们初始化了地图,并绑定了 moveend 事件。

3. 事件处理

moveendEvent 方法中,我们使用 map.value.getView().calculateExtent() 获取当前视图的范围(即地图的显示区域)。然后通过 getTopLeftgetBottomRight 方法获取左上和右下的坐标。


3. 运行效果

将上述代码放入一个新的 Vue 组件中,并确保你的项目已经正确安装了 OpenLayers。运行 npm run serve 启动项目后,访问页面,移动地图视图后,页面上会实时显示地图左上和右下的坐标。


4. 总结

通过本篇文章的示例代码,我们实现了在 Vue 3 中集成 OpenLayers,并通过 moveend 事件获取地图视图的左上角和右下角坐标。这对于进行地图定位、视野管理等功能非常有用。

希望这篇文章能帮助你更好地理解如何在 Vue 3 中使用 OpenLayers,并掌握地图事件的处理方式。如果你有任何问题或进一步的需求,欢迎在评论区留言交流。


作者:彭麒

联系方式: 1062470959@qq.com


通过这篇博文,你可以帮助读者更好地了解如何使用 Vue 3 和 OpenLayers 集成地图,处理地图事件以及如何在前端获取地图的坐标信息。

标签:moveend,Vue,56,地图,ol,OpenLayers,坐标
From: https://blog.csdn.net/Miller777_/article/details/144907183

相关文章

  • 前端学习openLayers配合vue3(偏移动画效果,限制范围)
    我们原来的偏移感觉比较生硬,我们来学习一下偏移的动画,先列一下这节的知识点限制经纬度范围和缩放范围(view层)view=newView({center:[114.305469,30.592876],zoom:10,projection:'EPSG:4326',extent:[113.999999,30.25,114.666667,30.833333],//限制地图......
  • 前端学习openLayers配合vue3(图层中心点的偏移)
    有了上一步的学习,我们知道了如何创建一个地图,现在我们来尝试更改一下图层的中心点关键代码letview=map.getView();//获取视图层letcenter=view.getCenter();//表示当前中心点的位置,调增经纬度就可以进行位置的便宜,下移,左移右移也同理console.log(center);//[......
  • nodejs+vue+expressd协同过滤算法的毕业生租房平台java+python+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • 前端学习openLayers配合vue3(简单的创建一个地图)
    首先搭建一个vue工程化环境,首先我们先来创建一个地图吧首先我们需要下载npmiol其次我们需要在main.js里面引入相关的cssimport'ol/ol.css'到现在我们就可以开始敲击我们的代码了,直接复制就可以展示出一个简单的地图啦,相关备注已经在代码中标注,有什么不懂的可以留言哦......
  • 请使用vue实现一个图片懒加载
    在Vue.js中实现图片懒加载可以通过多种方式完成,其中一种常见且简单的方法是使用v-lazy指令(通常借助第三方库如vue-lazyload),也可以手动实现。以下是使用vue-lazyload库的步骤:使用vue-lazyload库安装vue-lazyload库你可以使用npm或yarn来安装这个库。npminstallvue-lazyload......
  • 使用vue-seamless-scroll实现el-table表格滚动
    需求实现 <divclass="appeal-table"style="display:inline-block;width:100%;"><el-table:data="tableData1"stripestyle="width:100%;"@row-click="......
  • 深入浅出 Vue 3:新特性与最佳实践
    Vue3是Vue.js框架的最新版本,带来了诸多重要的新特性与性能提升。本文将带您深入了解Vue3的核心特性,并结合一些最佳实践帮助您更高效地开发Vue3应用。Vue3与Vue2的区别Vue3是对Vue2的重构和优化,整体保留了Vue2的核心概念,但在性能、可维护性、灵活性等......
  • vue-router的原理是什么?
    vue-router的原理主要涉及两个方面:Hash模式和History模式。这两种模式都是用于在单页面应用(SPA)中实现前端路由,即URL与UI之间的映射关系,使得URL变化能够引起UI的更新而无需刷新页面。1.Hash模式原理:Hash模式利用URL中的hash(#)部分来实现路由功能。hash是URL的锚点,用于指示页面中......
  • 使用vue-router你踩过哪些坑?
    在使用VueRouter进行前端开发时,我遇到过以下几个常见的坑:路由模式问题:VueRouter提供了两种路由模式:hash和history。hash模式使用URL的hash(#后面的部分)来模拟一个完整的URL,不需要服务器配置即可使用。然而,它在URL中包含了一个#,这可能不符合某些应用的需求。hist......
  • (免费源码)计算机毕业设计必学必看 java、python、php、node.js、c#、APP、小程序、大数
     摘 要疫情之下,实体经济面临下行压力。2019年以来,新冠肺炎疫情卷土而来,各地地疫情防控形势严峻,许多中小微企业经营发展屡次遭受打击。面对疫情常态化的社会现实,为纾困中小企业,助力经济复苏,保障社会稳定运行,国家有关部门相继出台一系列政策“组合拳”,加大纾困支持力度,提振......