ol 學習 | openlayers 你在做什麼~?

閱讀時間約 6 分鐘

openlayers 是什麼?它就是個 JavaScript library,用來在瀏覽器上顯示地圖的。

這次練習使用 Nuxt 建立一個地圖專案,並且使用強力支援 Vue3 的 vue3-openlayers,所以還不會 Nuxt 的先去看前一篇文章喔!



安裝 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
:loadTilesWhileAnimating="true"
:loadTilesWhileInteracting="true"
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>

現在啟動網頁,就會看到一張世界地圖,這算是另類的 "Hello, world!" 吧!

raw-image

解析 <script setup> 內容

上面直接套用了官網的例子畫出了一張世界地圖,但這洋洋灑灑 30 多行的程式碼到底在衝啥?我們來稍微理解一下,先從 <script setup> 開始,這裡的響應式資料是要帶給後面 ol-view 使用的。

  1. center:這代表的地圖起始中心點座標,改改看,滿好玩的,台灣大概是在 [841, 24] 的地方。
  2. projection:表示地圖投影方式,預設的 EPSG:4326 是一種經緯度座標系統。
  3. zoom:地圖的縮放級別,數字越小可以看到範圍越廣的地圖。
  4. rotation:地圖旋轉角度

解析 ol-map

這是 ol 提供的地圖容器,可以理解成圖畫的畫框,我們在這裡給它設定了高度為 400px

:loadTilesWhileAnimating:loadTilesWhileInteracting分別代表在動畫和互動過程中是否繼續載入地圖,這跟UX 比較有關連性,是屬於地圖閱覽流暢度的問題。

解析 ol-view

如果說 ol-map 是畫框,ol-view 就是畫布的部分。他決定了這張地圖的縮放、中心、旋轉等配置,前面在 <script setup> 中作的設定就是給它用的

解析 ol-tile-layer 與 ol-source-osm

現在想像,這是一幅拼貼畫,我們給了畫框和畫布,那接下來就是要把一塊塊畫片給貼上畫布,這個畫片就是 ol-tile-layer

那追根究柢,畫片上的色彩也要有畫家提供對吧?所以這個原始的內容來源就是 ol-source-osm,而後面的 osm 表示資料來自 OpenStreetMap,這之後會有另外文章說明怎麼替換來源。現在,大可以把這段刪掉試試看,會看到一張白又白的地圖 www。



上面這些是使用 ol 的基礎元素,基本上就是你要畫張地圖所必須的四項東西。怎麼說呢,就是缺一不可。

到此為止我們只是嘗試照著範例印出一張可以有一點點互動性的地圖,我們當然不可能止步於此,要這一張世界地圖幹嘛,航海喔?所以接下來會有 ol 的進階學習,來試試如何客製我們的地圖。



參考資料

  1. vue3-openlayers 官方網站
  2. How to add vue3-openlayers plugin to nuxt
18會員
37Content count
這個專題用來存放我在學習網頁開發時的心得及知識。
留言0
查看全部
發表第一個留言支持創作者!
Jeremy Ho的沙龍 的其他內容
Vue3 筆記,指令進階篇
Vue3 學習筆記,vue-router 篇。
Vue3 學習筆記,用 Pinia 管理資料與邏輯
Vue3 學習筆記,元件與資料傳遞篇
Vue3 學習筆記,專案建立與基礎響應式篇
AWS 佈署簡單操作以及 RDS 建立篇
Vue3 筆記,指令進階篇
Vue3 學習筆記,vue-router 篇。
Vue3 學習筆記,用 Pinia 管理資料與邏輯
Vue3 學習筆記,元件與資料傳遞篇
Vue3 學習筆記,專案建立與基礎響應式篇
AWS 佈署簡單操作以及 RDS 建立篇
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
南韓戲劇《當你沉睡時》是燒腦愛情故事,由秀智、李鐘碩、丁海寅主演,「三龍」檢察官丁宰璨、記者南洪珠、巡警韓宇卓都可透過夢境預知未來的能力,聯手偵破許多殺人案件。想要跟李鐘碩一樣逆齡嘛?快看到文末,將送出市價6,300元的Samsonite RED CLOVEL後背包 由於劇中飾演檢察官,李鐘碩的上班
Thumbnail
  在略暗的吧台前,席淡月細軟的黑髮散放在她的肩頭,灑落台面。   一支孤單的空酒杯,在她的髮絲之間隱隱反射著室內昏黃的燈光,玻璃杯裡早已乾涸,那屬於美酒的深邃餘香,仍飄蕩在這個並不算太大的空間裡。   陸仁昕雙手盤胸,望著眼前一動也不動的席淡月,微微皺起了眉頭。
Thumbnail
  葉冠凜沉著一張臉,坐在家裡的晚餐桌前一副悶悶不樂的樣子。   「冠凜,難得儀潔來我們家吃飯,你扳著一張臉做什麼呢?」   聽見父親的提問,他只是眼神空洞地看了看表情嚴肅但語調平和的父親。   他的心中毫無波瀾,相比之下,母親緊張兮兮的樣子,反而讓人有點浮躁。   「我只是沒有食慾而已。」
Thumbnail
  雖然對方這麼說了,但葉冠凜的心裡還是七上八下的。   一開始的拜訪就沒有按照計畫走,在走廊上的相遇也十分混亂。另一方面,本來通知是安管科派員會面,怎麼就變成公司的老大直接上陣?   「話說回來……哪有談業務直接讓執行長和董事長來的,這間公司到底有沒有問題啊?」心急如焚的葉冠凜小聲地嘟噥著……
Thumbnail
  驅車來到淵行的辦公大樓主棟,葉冠凜讓乘客先下車,隨後獨自前往停車場。   在他停車的這段期間,李葭吟環顧四周,一次又一次對這個公司的活力發出驚嘆。
Thumbnail
  經過業務科全體成員的努力,轉眼之間,準備前往拜會「淵行」資訊技術股份有限公司的時間終於悄悄來到。   「資料收集完備,整整三個種類的保全方案,以及合理的價位區間策略……」李葭吟在車上讀著預備多時的資料,望著已經檢查了無數次的備詢資料,心裡還是七上八下,彷彿無論再怎麼準備都不夠似的。
Thumbnail
  【妳的朋友:〔深淵行者〕上線了。】   「終於等到你了。」韓湘吟透過手機,對著螢幕上的遊戲人物說道。   「抱歉久等了〔羽毛筆〕,因為我正在工作,不好找到適當的時間。」   「像你這樣的高手,也需要工作嗎?」韓湘吟饒富興致地問道。   「妳這麼精明的人,不也在工作嗎?」
Thumbnail
  「啊!遲到了!」   李葭吟披頭散髮地從床上醒來,拿起手機一看,時間竟然已經十一點鐘。   「鬧鐘怎麼沒有響……嗯?」   仔細一看,螢幕上明明白白地標示著「星期日」。   她長長地吁了一口氣,「嘭」地一聲倒回軟綿綿的床上。   (原來今天休假啊……)
Thumbnail
    李葭吟與捧著紙箱的席淡月一前一後走在光潔明亮的通道上,忙碌的氣息如滿盈的沸水,屬於職場的蒸騰熱度從每一扇開啟的辦公室門口散逸而出。在雷走的總部,大部分科室的氣氛和業務科差別並不大……
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
南韓戲劇《當你沉睡時》是燒腦愛情故事,由秀智、李鐘碩、丁海寅主演,「三龍」檢察官丁宰璨、記者南洪珠、巡警韓宇卓都可透過夢境預知未來的能力,聯手偵破許多殺人案件。想要跟李鐘碩一樣逆齡嘛?快看到文末,將送出市價6,300元的Samsonite RED CLOVEL後背包 由於劇中飾演檢察官,李鐘碩的上班
Thumbnail
  在略暗的吧台前,席淡月細軟的黑髮散放在她的肩頭,灑落台面。   一支孤單的空酒杯,在她的髮絲之間隱隱反射著室內昏黃的燈光,玻璃杯裡早已乾涸,那屬於美酒的深邃餘香,仍飄蕩在這個並不算太大的空間裡。   陸仁昕雙手盤胸,望著眼前一動也不動的席淡月,微微皺起了眉頭。
Thumbnail
  葉冠凜沉著一張臉,坐在家裡的晚餐桌前一副悶悶不樂的樣子。   「冠凜,難得儀潔來我們家吃飯,你扳著一張臉做什麼呢?」   聽見父親的提問,他只是眼神空洞地看了看表情嚴肅但語調平和的父親。   他的心中毫無波瀾,相比之下,母親緊張兮兮的樣子,反而讓人有點浮躁。   「我只是沒有食慾而已。」
Thumbnail
  雖然對方這麼說了,但葉冠凜的心裡還是七上八下的。   一開始的拜訪就沒有按照計畫走,在走廊上的相遇也十分混亂。另一方面,本來通知是安管科派員會面,怎麼就變成公司的老大直接上陣?   「話說回來……哪有談業務直接讓執行長和董事長來的,這間公司到底有沒有問題啊?」心急如焚的葉冠凜小聲地嘟噥著……
Thumbnail
  驅車來到淵行的辦公大樓主棟,葉冠凜讓乘客先下車,隨後獨自前往停車場。   在他停車的這段期間,李葭吟環顧四周,一次又一次對這個公司的活力發出驚嘆。
Thumbnail
  經過業務科全體成員的努力,轉眼之間,準備前往拜會「淵行」資訊技術股份有限公司的時間終於悄悄來到。   「資料收集完備,整整三個種類的保全方案,以及合理的價位區間策略……」李葭吟在車上讀著預備多時的資料,望著已經檢查了無數次的備詢資料,心裡還是七上八下,彷彿無論再怎麼準備都不夠似的。
Thumbnail
  【妳的朋友:〔深淵行者〕上線了。】   「終於等到你了。」韓湘吟透過手機,對著螢幕上的遊戲人物說道。   「抱歉久等了〔羽毛筆〕,因為我正在工作,不好找到適當的時間。」   「像你這樣的高手,也需要工作嗎?」韓湘吟饒富興致地問道。   「妳這麼精明的人,不也在工作嗎?」
Thumbnail
  「啊!遲到了!」   李葭吟披頭散髮地從床上醒來,拿起手機一看,時間竟然已經十一點鐘。   「鬧鐘怎麼沒有響……嗯?」   仔細一看,螢幕上明明白白地標示著「星期日」。   她長長地吁了一口氣,「嘭」地一聲倒回軟綿綿的床上。   (原來今天休假啊……)
Thumbnail
    李葭吟與捧著紙箱的席淡月一前一後走在光潔明亮的通道上,忙碌的氣息如滿盈的沸水,屬於職場的蒸騰熱度從每一扇開啟的辦公室門口散逸而出。在雷走的總部,大部分科室的氣氛和業務科差別並不大……