Vite + Vue3 + OpenLayers

一失球、本文簡介

本文案例使用 Vite 搭建項(xiàng)目,在 Vue 3 的基礎(chǔ)上使用 OpenLayers 霸奕。

閱讀本文需要有一定 Vue 3 基礎(chǔ)溜宽。

Vite 是構(gòu)建項(xiàng)目的一個(gè)工具,即使沒有 Vite 基礎(chǔ)也沒關(guān)系质帅,一步步跟著本文做即可輕松把項(xiàng)目搭起來适揉。

OpenLayers簡介

OpenLayers 可以輕松地在任何網(wǎng)頁中放置動(dòng)態(tài)地圖留攒。它可以顯示從任何來源加載的地圖圖塊、矢量數(shù)據(jù)和標(biāo)記嫉嘀。OpenLayers 的開發(fā)旨在進(jìn)一步使用各種地理信息炼邀。它是完全免費(fèi)的開源 JavaScript。

以上是官網(wǎng)對 OpenLayers (以后簡稱“ol”)的介紹剪侮。

為什么選擇ol拭宁?

ol 其實(shí)非常使用內(nèi)網(wǎng)環(huán)境,我的工作方向是政務(wù)系統(tǒng)開發(fā)瓣俯,開發(fā)的很多項(xiàng)目都是在內(nèi)網(wǎng)運(yùn)行(無法訪問互聯(lián)網(wǎng))杰标,而 ol 作為一款免費(fèi)的地圖渲染庫,很適合我的項(xiàng)目降铸。

如果項(xiàng)目是互聯(lián)網(wǎng)方向的在旱,可以選擇百度、高德之類的地圖庫推掸,這類的文檔桶蝎、問答資源、api等各方面在國內(nèi)都比較完善谅畅。



二登渣、環(huán)境搭建

Vite + Vue3 + ol6

步驟

  1. 使用 Vite 創(chuàng)建一個(gè) Vue 項(xiàng)目
  2. 初始化項(xiàng)目
  3. 使用 npm 安裝 ol
  4. 啟動(dòng)項(xiàng)目


【step 1】創(chuàng)建 Vue 項(xiàng)目

npm init vite@latest

輸入完上面的命令,會(huì)詢問是否繼續(xù)毡泻,輸入 y 然后按回車即可胜茧。

Ok to proceed?(y)


輸入項(xiàng)目名,本文使用了“ol-demo”這個(gè)項(xiàng)目名仇味。

Project name: ol-demo


選擇要使用的框架呻顽,這里選擇 vue 即可(我選的是不使用 ts)。

Select a framework:
    vanilla
    vue
    react
    preact
    lit-element
    svelte


【step 2】進(jìn)入項(xiàng)目丹墨,使用命令初始化項(xiàng)目

cd ol-demo
npm install

【step 3】安裝 ol

npm i ol -S

【step 4】啟動(dòng)項(xiàng)目

npm run dev



三廊遍、起步,實(shí)際編碼階段

步驟

  1. 引入 ol
  2. 創(chuàng)建地圖容器
  3. 編寫渲染方法
  4. 執(zhí)行渲染方法

【step 1】引入 ol

在項(xiàng)目新建一個(gè)頁面(xxx.vue)引入贩挣。

import { ref, onMounted } from 'vue' // vue相關(guān)方法
import { Map, View } from 'ol'      // 地圖實(shí)例方法喉前、視圖方法
import Tile from 'ol/layer/Tile'    // 瓦片渲染方法
import OSM from 'ol/source/OSM'    // OSM瓦片【OSM不能在實(shí)際開發(fā)中使用,因?yàn)镺SM里中國地圖的邊界有點(diǎn)問題M醪啤B延亍!绒净!】
import 'ol/ol.css'                 // 地圖樣式

【step 2】創(chuàng)建地圖容器

地圖需要渲染到一個(gè) HTML 元素中见咒,并且需要手動(dòng)設(shè)置地圖容器的寬高(通常使用 css 來設(shè)置)。

地圖容器需要有一個(gè) id 挂疆,如果是 Vue 項(xiàng)目可以使用 ref 來代替 id论颅。

<template>
  <div id="map" class="map__x"></div>
</template>

<style scoped>
.map__x {
  width: 600px;
  height: 600px;
  border: 1px solid #eee;
}
</style>

【step 3】創(chuàng)建渲染地圖的方法

const map = ref(null) // 存放地圖實(shí)例

function initMap () {
  // 地圖實(shí)例
  map.value = new Map({
    target: 'map',                         // 對應(yīng)頁面里 id 為 map 的元素
    layers: [                              // 圖層
      new Tile({                           // 使用瓦片渲染方法
        source: new OSM()                  // 圖層數(shù)據(jù)源
      })
    ],
    view: new View({                       // 地圖視圖
      projection: "EPSG:4326",             // 坐標(biāo)系哎垦,有EPSG:4326和EPSG:3857
      center: [114.064839, 22.548857],     // 深圳坐標(biāo)
      minZoom:10,                          // 地圖縮放最小級(jí)別
      zoom: 12                             // 地圖縮放級(jí)別(打開頁面時(shí)默認(rèn)級(jí)別)
    })
  })
}

關(guān)鍵字解釋

  • Map: 一個(gè)地圖容器最最最核心的部分可以加載各類地圖與功能控件,也用于渲染恃疯、表現(xiàn)動(dòng)態(tài)地圖。每一個(gè)地圖都是一個(gè) Map 對象墨闲。今妄。
  • View:是地圖視圖,控制地圖縮放等基礎(chǔ)交互鸳碧,以及地圖投影坐標(biāo)系盾鳞、地圖中心、分辨率瞻离、旋轉(zhuǎn)角度等腾仅。
  • Tile: 翻譯成中文就是 “瓦片”。這項(xiàng)是必須的套利。Tile 用來承放所需的底圖推励。
  • OSM: 是 ol 提供的一個(gè)底圖,可以作為練習(xí)使用肉迫。【正式開發(fā)不能用 OSM 验辞,因?yàn)?OSM 的中國邊界有點(diǎn)問題】
  • ol/ol.css: 引入所需的 css喊衫,這項(xiàng)是必須的跌造。如果沒引入此文件,地圖渲染出來的樣子會(huì)很奇怪的族购,甚至無法交互壳贪。

【step 4】在 mounted 后渲染地圖

在元素掛載到頁面后才執(zhí)行渲染函數(shù)。onMountedVue3 提供的一個(gè)生命周期函數(shù)寝杖。

onMounted(() => {
  initMap()
})

? 點(diǎn)擊跳轉(zhuǎn)到真實(shí)環(huán)境預(yù)覽 ?



四违施、項(xiàng)目倉庫 和 官方文檔

?【本文案例倉庫】? ???? 歡迎Star(求您了)

? 本文案例預(yù)覽 ?

OpenLayers 官網(wǎng)

OpenLayers GitHub倉庫

OpenLayers npm倉庫

Vite 官網(wǎng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市朝墩,隨后出現(xiàn)的幾起案子醉拓,更是在濱河造成了極大的恐慌,老刑警劉巖收苏,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿卤,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹿霸,警方通過查閱死者的電腦和手機(jī)排吴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懦鼠,“玉大人钻哩,你說我怎么就攤上這事屹堰。” “怎么了街氢?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扯键,是天一觀的道長。 經(jīng)常有香客問我珊肃,道長荣刑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任伦乔,我火速辦了婚禮厉亏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烈和。我一直安慰自己爱只,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布招刹。 她就那樣靜靜地躺著恬试,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔗喂。 梳的紋絲不亂的頭發(fā)上忘渔,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音缰儿,去河邊找鬼畦粮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乖阵,可吹牛的內(nèi)容都是我干的宣赔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞪浸,長吁一口氣:“原來是場噩夢啊……” “哼儒将!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起对蒲,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤钩蚊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蹈矮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砰逻,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年泛鸟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝠咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刚操,靈堂內(nèi)的尸體忽然破棺而出闸翅,到底是詐尸還是另有隱情,我是刑警寧澤菊霜,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布坚冀,位于F島的核電站,受9級(jí)特大地震影響鉴逞,放射性物質(zhì)發(fā)生泄漏遗菠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一华蜒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豁遭,春花似錦叭喜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闪幽,卻和暖如春啥辨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盯腌。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工溉知, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腕够。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓级乍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帚湘。 傳聞我的和親對象是個(gè)殘疾皇子玫荣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容