vue3-ol - 來畫一張地圖吧
安裝 vue3-openlayers
# install the peerDependencies
npm install ol ol-ext ol-contextmenu
# install this library
npm install vue3-openlayers
設定 plugin 檔案
在 vue3-openlayers 的官網只有使用 Vue3 的設定教學,用 Nuxt 做設定的我還是在 Stack Overflow 上看的。(詳細看這一篇)
在 Nuxt 中要使用 ol 要先設定插件,也就是 plugin 檔案。然後因為 vue3-ol 需要依賴 window,所以我們必須要把插件套到客戶端,因此檔名要使用 .client.js。
因此先在根目錄下建立一個 plugins 資料夾,然後在裡面建立一個 vue3-ol.client.js 設定檔:
import { defineNuxtPlugin } from '#app'
import OpenLayers from 'vue3-openlayers'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(OpenLayers)
})
印出第一張世界地圖
在根目錄下建立一個 components 資料夾,並建立一個 MyMap.vue 組件,這裡我們用官網的範例 code:
<script setup>
import { ref } from 'vue'
const center = ref([40, 40])
const projection = ref('EPSG:4326')
const zoom = ref(8)
const rotation = ref(0)
</script>
<template>
<ol-map
style="height: 400px"
>
<ol-view
ref="view"
:center="center"
:rotation="rotation"
:zoom="zoom"
:projection="projection"
/>
<ol-tile-layer>
<ol-source-osm />
</ol-tile-layer>
</ol-map>
</template>
<style scoped>
@import 'vue3-openlayers/dist/vue3-openlayers.css';
</style>
解析 <script setup>
內容
- center:這代表的地圖起始中心點座標,改改看,滿好玩的,台灣大概是在 [841, 24] 的地方。
- projection:表示地圖投影方式,預設的 EPSG:4326 是一種經緯度座標系統。
- zoom:地圖的縮放級別,數字越小可以看到範圍越廣的地圖 。
- rotation:地圖旋轉角度。
解析 <template>
<ol-map>
:這是 ol 提供的地圖容器,可以理解成圖畫的畫框,在這裡給它設定了高度為 400px。<ol-view>
:如果說<ol-map>
是畫框,<ol-view>
就是畫布的部分。他決定了這張地圖的縮放、中心、旋轉等配置,前面在<script setup>
中作的設定就是給它用的。<ol-tile-layer>
、<ol-source-osm>
:現在想像,這是一幅拼貼畫,給了畫框和畫布,那接下來就是要把一塊塊畫片給貼上畫布,這個畫片就是<ol-tile-layer>
。而<ol-source-osm>
就是畫片上的色彩,也就是資料來源。 osm 表示資料來自 OpenStreetMap。