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

织梦商城网站模板免费下载湖南网站建设设计

织梦商城网站模板免费下载,湖南网站建设设计,页面设计怎么样,有没有专业帮忙做ppt的网站前言 在 WebGIS 开发中,OpenLayers 是一个功能强大的开源地图库,能够帮助开发者快速构建地图应用。在 Vue 3 组合式 API (Composition API) 的加持下,我们可以更优雅地封装 OpenLayers,并实现炫酷的地图交互功能。 本文将介绍如…

前言

在 WebGIS 开发中,OpenLayers 是一个功能强大的开源地图库,能够帮助开发者快速构建地图应用。在 Vue 3 组合式 API (Composition API) 的加持下,我们可以更优雅地封装 OpenLayers,并实现炫酷的地图交互功能。

本文将介绍如何在 Vue 3 项目中使用 OpenLayers 实现 地图定位动画,包括 平移、弹性平移、飞行 三种效果,并通过 Vue 3 的 setup 语法优化代码结构,使代码更加清晰、易维护。


效果演示

最终效果如下:

  • 平移:地图视图平滑地移动到指定位置。
  • 弹性平移:使用缓动函数 (easing) 使地图带有缓冲的移动效果。
  • 飞行:通过缩放动画模拟飞行效果,让视角从远处逐渐拉近目标点。


项目初始化

我们使用 Vue 3 + Vite 创建一个新的 Vue 项目,并安装 Element Plus 组件库来支持按钮交互。

1. 创建 Vue 3 项目

npm create vite@latest vue3-openlayers-demo --template 
vue cd vue3-openlayers-demo 
npm install

2. 安装 Element Plus

npm install element-plus

3. 安装 OpenLayers

npm install ol

核心代码实现

接下来,我们将在 src/components 目录下创建一个 OpenLayersMap.vue 组件,实现地图初始化和定位动画。

完整代码

<!--* @Author: 彭麒* @Date: 2025/3/19* @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实现定位动画(平移-弹性平移-飞行)</div></div><h4><el-button type="primary" size="small" @click="pan">平移</el-button><el-button type="primary" size="small" @click="elastic">弹性平移</el-button><el-button type="primary" size="small" @click="fly">飞行</el-button></h4><div id="vue-openlayers"></div></div>
</template><script setup>
import { ref, onMounted } from "vue";
import "ol/ol.css";
import { Map, View } from "ol";
import Tile from "ol/layer/Tile";
import BingMaps from "ol/source/BingMaps";
import * as olEasing from "ol/easing";const map = ref(null);const pan = () => {map.value?.getView().animate({center: [119, 39],duration: 2000,});
};const elastic = () => {map.value?.getView().animate({center: [-36, -22],easing: olEasing.easeOut,});
};const fly = () => {flyTo([-55, 36]);
};const flyTo = (location, done = () => {}) => {let view = map.value?.getView();if (!view) return;let duration = 2000;let zoom = view.getZoom();let parts = 2;let called = false;function callback(complete) {--parts;if (called) return;if (parts === 0 || !complete) {called = true;done(complete);}}view.animate({ center: location, duration }, callback);view.animate({ zoom: zoom - 1, duration: duration / 2 },{ zoom: zoom, duration: duration / 2 },callback);
};const bing = () => {map.value?.getLayers().getArray().forEach((layer) => {if (layer) map.value.removeLayer(layer);});let nsource = new BingMaps({key: "AqQf9nX6PZKkFZOkdOqBOh3vg8xwGV1AYWGqC6EsOoJ0OHSUwm8CN8AhaFpT7mfR",imagerySet: "RoadOnDemand",});let bingMapLayer = new Tile({ source: nsource });map.value?.addLayer(bingMapLayer);
};const initMap = () => {map.value = new Map({target: "vue-openlayers",layers: [],view: new View({center: [122, 47],zoom: 4,projection: "EPSG:4326",}),loadTilesWhileAnimating: true,});bing();
};onMounted(() => {initMap();
});
</script><style scoped>
.container {width: 840px;height: 590px;margin: 50px auto;border: 1px solid #42b983;
}#vue-openlayers {width: 800px;height: 400px;margin: 0 auto;border: 1px solid #42b983;position: relative;
}
</style>

代码解析

1. 初始化地图

我们使用 onMounted 生命周期,在组件加载后执行 initMap() 初始化 OpenLayers 地图:

const initMap = () => {map.value = new Map({target: "vue-openlayers",layers: [],view: new View({center: [122, 47],zoom: 4,projection: "EPSG:4326",}),loadTilesWhileAnimating: true,});bing();
};

2. Bing 地图加载

const bing = () => {map.value?.getLayers().getArray().forEach((layer) => {if (layer) map.value.removeLayer(layer);});let nsource = new BingMaps({key: "AqQf9nX6PZKkFZOkdOqBOh3vg8xwGV1AYWGqC6EsOoJ0OHSUwm8CN8AhaFpT7mfR",imagerySet: "RoadOnDemand",});let bingMapLayer = new Tile({ source: nsource });map.value?.addLayer(bingMapLayer);
};

这里使用 Bing 地图服务 作为底图,你可以替换成其他地图源,如 OpenStreetMap (OSM)

3. 定位动画

const pan = () => {map.value?.getView().animate({center: [119, 39],duration: 2000,});
};

animate() 方法可以平滑移动地图视图。

4. 飞行动画

const flyTo = (location, done = () => {}) => {let view = map.value?.getView();if (!view) return;let duration = 2000;let zoom = view.getZoom();let parts = 2;let called = false;function callback(complete) {--parts;if (called) return;if (parts === 0 || !complete) {called = true;done(complete);}}view.animate({ center: location, duration }, callback);view.animate({ zoom: zoom - 1, duration: duration / 2 },{ zoom: zoom, duration: duration / 2 },callback);
};

这里通过 缩放动画 模拟飞行效果。


总结

本文介绍了如何在 Vue 3 + OpenLayers 中实现 定位动画,并使用 Composition API 优化代码。希望对大家有所帮助!如果喜欢的话,记得点赞、收藏、关注哦!🚀🚀🚀


文章转载自:

http://S5i1D6w1.nyqxy.cn
http://HZeE22Vq.nyqxy.cn
http://UbAOg7li.nyqxy.cn
http://Uh2nPQ4Z.nyqxy.cn
http://GaWz6ypK.nyqxy.cn
http://j1itdjDD.nyqxy.cn
http://23lskQXf.nyqxy.cn
http://UAx2W0Qg.nyqxy.cn
http://IfhVCzWS.nyqxy.cn
http://asT8a48B.nyqxy.cn
http://gOL58z3f.nyqxy.cn
http://rR4bqNJN.nyqxy.cn
http://rAPfipDl.nyqxy.cn
http://RrkrH3LT.nyqxy.cn
http://K6l8OQEB.nyqxy.cn
http://cjrxenUx.nyqxy.cn
http://wvvjCD3A.nyqxy.cn
http://Qg9iNODh.nyqxy.cn
http://zqFHdHzY.nyqxy.cn
http://fjUul6si.nyqxy.cn
http://z18mMSXJ.nyqxy.cn
http://SnxQJ9A3.nyqxy.cn
http://gCGSi3TM.nyqxy.cn
http://046Qx390.nyqxy.cn
http://Gy9BCFfZ.nyqxy.cn
http://C1YOoNQn.nyqxy.cn
http://K84OMcgu.nyqxy.cn
http://P3mAtwa2.nyqxy.cn
http://P9y6Fljj.nyqxy.cn
http://UkOVCTVX.nyqxy.cn
http://www.dtcms.com/wzjs/773336.html

相关文章:

  • 重庆价格低建设网站公司网上买保险有哪些平台
  • 云主机 怎么做网站怎么自己制作网页
  • 提供信息门户网站搭建海口网站建设网站制作
  • 灵璧有做公司网站的吗兰州落地防疫
  • 商洛做网站注册公司需要提供的资料及公司注册流程
  • 赤峰市做网站建设的公司杭州建设工程招投标
  • 郑州做网站首选九零后网络网页详情页设计
  • 网站后台帐号密码破解vi设计手册模板ppt
  • 上海好的网站设计公司有哪些wordpress科技网站模板
  • 阿里云网站怎么做自己做的网站被封了
  • 简易网站做广告公司网站建设
  • 厦门制作网站企业网站开发会议议程范文
  • 专业网站设计哪家好推荐友情链接
  • 做网站需要备案吗2016年做水果行业专业网站
  • 网站怎么建设在哪里接单免费做图网站有哪些
  • 宁波工商注册咨询电话站长工具seo综合查询隐私查询导航
  • 湖南响应式网站哪家好莱芜双休女工招聘信息
  • 特殊教育学校网站建设方案深圳网站建设小江
  • 大型网站设计首页实例济南网站优化哪里做的好
  • 农业公司网站建设免费seo快速排名工具
  • 电脑网站建设服务器北京网站开发人员
  • 专业做网站优化价格展厅公司
  • 巴中学校网站建设佛山网站维护
  • 导航网站制作手机音乐制作软件
  • 游戏直播网站怎么做免费网站下载软件免费
  • windows优化大师好用吗免费的关键词优化工具
  • 网站换空间 seo买商标
  • 做网站怎样做全页面石家庄房产信息网查询系统
  • 淘宝购物网站官网和网站的区别
  • 网站做的好是不是影响就大网站规划文字说明