OpenLayers入门(二)

前言

好久不见,距离OpenLayers入门第一篇已经过了很久,为什么迟迟没有后续呢,主要有两个原因,一是因为近期项目里使用地图的部分比较少,二是因为很多时候即使功能做出来了,但是还是不能完全理解,不是很明白的东西除了贴代码之外也写不了啥,其实第一篇也是很基础很简单的,但是意外的是看的人是最多的,这让我意识到可能即使是贴一下代码对一些人也是有帮助的,这就是这一篇的主要目的,可能有一些地方会看不懂,但是不要问,问我也不知道,如果你恰好了解的话十分欢迎在评论里分享,感谢~

首先来分享一个我无意中找到的教程,http://linwei.xyz/ol3-primer/index.html。虽然是基于v3版本介绍的,很多api可能变了,但还是值得一看,除了OpenLayers本身的介绍,还会有一些地理基础知识的分享,这种相对全面的中文教程真的很稀有,且看且珍惜。

接下来分享一些常用的在线地图瓦片资源:

1.高德瓦片,最大支持放大到20级,字体比较大,但是最近好像又只能到19级了。

http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7

2.高德瓦片,最大支持放大到20级,颜色偏灰绿色。

http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}

3.高德瓦片,最大支持放大到18级,最常用的样式。

http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8

4.谷歌地图瓦片,最大支持放大到22级,颜色偏绿色。

https://mt0.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}

绘制多边形

import Feature from 'ol/Feature'
import Polygon from 'ol/geom/Polygon'
import { Vector as VectorSource } from 'ol/source'
import { Style, Strok
### Vue3 中集成和使用 OpenLayers入门教程 #### 1. 安装依赖 在 Vue3 项目中集成 OpenLayers 需要先安装必要的依赖包。可以通过 npm 或 yarn 来完成安装。 运行以下命令来安装 OpenLayers 和其样式文件: ```bash npm install ol @openlayers/vue --save ``` 如果需要自定义样式,也可以单独引入 CSS 文件[^2]。 --- #### 2. 创建地图容器 在 `App.vue` 或其他组件中创建一个用于显示地图的 DOM 容器。通常会设置一个固定的宽高以便正常渲染地图。 以下是 HTML 结构的一个简单示例: ```html <template> <div id="map-container" class="map"></div> </template> <style scoped> .map { width: 100%; height: 400px; } </style> ``` --- #### 3. 初始化地图实例 在 Vue 组件的生命周期钩子函数(如 `mounted()`)中初始化 OpenLayers 地图对象。下面是一个完整的代码示例: ```javascript <script setup> import { onMounted } from 'vue'; import Map from 'ol/Map'; // 导入核心模块 import View from 'ol/View'; // 导入视图模块 import TileLayer from 'ol/layer/Tile'; // 导入瓦片层模块 import OSM from 'ol/source/OSM'; // 导入开源地图源模块 onMounted(() => { const map = new Map({ target: 'map-container', // 设置目标容器 ID layers: [ new TileLayer({ source: new OSM() }) // 添加开放街道地图作为底图 ], view: new View({ center: [0, 0], // 初始中心坐标 (WGS84 投影单位为米) zoom: 2 // 初始缩放级别 }) }); }); </script> ``` 上述代码展示了如何在一个简单的 Vue3 组件中加载并展示一张基于 OpenStreetMap 数据的地图[^3]。 --- #### 4. 动态更新地图属性 Vue3 支持响应式数据绑定,在实际应用中可能需要动态调整地图的一些参数,比如中心点、缩放等级等。这可以通过监听数据变化实现。 例如,当用户输入新的经纬度时自动更新地图中心点: ```javascript <script setup> import { ref, watchEffect, onMounted } from 'vue'; import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import OSM from 'ol/source/OSM'; const coordinates = ref([0, 0]); // 响应式的中心点坐标 const zoomLevel = ref(2); // 响应式的缩放级别 let map; onMounted(() => { map = new Map({ target: 'map-container', layers: [new TileLayer({ source: new OSM() })], view: new View({ center: coordinates.value, zoom: zoomLevel.value }) }); watchEffect(() => { if (!map) return; // 如果地图未初始化则跳过 map.getView().setCenter(coordinates.value); map.getView().setZoom(zoomLevel.value); }); }); // 提供方法让用户修改坐标或缩放级别 function updateCoordinates(lat, lon) { coordinates.value = [lon * 1e6, lat * 1e6]; // 转换为 WGS84 单位 } function increaseZoom() { zoomLevel.value += 1; } </script> <template> <button @click="updateCoordinates(39.9042, 116.4074)">定位北京</button> <button @click="increaseZoom">放大</button> </template> ``` 此部分演示了如何利用 Vue3 的响应式特性实时同步地图状态与界面交互行为[^4]。 --- #### 5. 扩展功能支持 对于更复杂的功能需求,可以考虑引入第三方扩展库,例如 `ol-ext` 或者 `ol-geocoder` 等工具集。这些插件能够帮助开发者轻松实现高级功能,如地理编码查询、路径规划等功能[^1]。 --- ### 总结 以上内容介绍了如何在 Vue3 项目中快速集成 OpenLayers 并实现基本的地图展示功能。通过合理配置组件结构以及结合 Vue3 的响应式机制,可以使地图操作更加灵活高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值