Vite + Vue3 + OpenLayers 彈窗

Vite + Vue3 + OpenLayers 彈窗

一柏副、本文簡介

tanchuan

鼠標(biāo)在地圖上點擊會出現(xiàn)一個彈窗,并且出現(xiàn)在鼠標(biāo)指針上方道川。

如果在地圖邊緣點擊午衰,會保證彈窗能完整顯示出來,所以會稍微移動底圖冒萄。



二臊岸、開發(fā)環(huán)境

Vite + Vue3 + ol6


# 1、使用 Vite 創(chuàng)建項目尊流;取個好聽的項目名帅戒;拉取 vue 的代碼模板
npm init vite@latest

# 2、初始化項目
cd you-project
npm install

# 3、安裝 ol
npm i ol -S

# 4逻住、啟動項目
npm run dev


使用 Vite 初始化項目并安裝 ol 钟哥,更詳細(xì)做法可以查看 『Vite + Vue3 + OpenLayers 起步』



三、思路與編碼

思路

  1. 初始化地圖
  2. 地圖點擊事件瞎访,并獲取當(dāng)前點擊的坐標(biāo)位置
  3. 彈出窗口


初始化地圖

初始化地圖詳細(xì)操作可以查看 『Vite + Vue3 + OpenLayers 起步』

  • 要初始化地圖腻贰,首先需要引入 ol 提供的基礎(chǔ)服務(wù)
  • 還需要一個地圖容器(我使用的是一個 div 標(biāo)簽)
  • 然后通過 ol 提供的方法綁定這個容器
  • 配置基礎(chǔ)參數(shù),渲染地圖


地圖點擊事件

  • ol 提供了一系列的交互事件扒秸,其中就有 鼠標(biāo)點擊底圖 事件

  • 利用這個事件獲取到當(dāng)前點擊的坐標(biāo)位置


彈出窗口

  • 彈窗需要一個容器來展示信息(我使用了一個 div 標(biāo)簽)

  • 通過"地圖點擊事件“獲取到的坐標(biāo)位置來定位彈窗出現(xiàn)的位置

本例使用了 ol 提供的方法播演,把 彈窗容器 放入 ol的“覆蓋物”’ 中管理。

彈窗展示了現(xiàn)在所點擊的坐標(biāo)軸信息伴奥,還有一個關(guān)閉按鈕写烤。



編碼

<template>
    <!-- 地圖容器 -->
    <div id="map" class="map__x" ref="mapCom"></div>
    
    <!-- 彈窗容器 -->
    <div ref="popupCom" class="popup">
       <!-- 關(guān)閉按鈕 -->
      <span class="icon-close" @click="closePopup">?</span>
      <!-- 彈窗內(nèi)容(展示坐標(biāo)信息) -->
      <div class="content">{{currentCoordinate}}</div>
    </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { Map, View } from 'ol' // 引入容器綁定模塊和視圖模塊
import Tile from 'ol/layer/Tile' // 瓦片加載器
import XYZ from 'ol/source/XYZ' // 引入XYZ地圖格式
import Overlay from 'ol/Overlay'// 引入覆蓋物模塊
import 'ol/ol.css' // ol提供的css樣式(必須引入)

const mapCom = ref(null) // 地圖容器

const popupCom = ref(null) // 彈窗容器

const map = ref(null) // 地圖實例

const overlay = ref(null) // 覆蓋物實例
const currentCoordinate = ref('') // 彈窗信息

// 初始化地圖
function initMap() {
  // 注冊一個覆蓋物
  overlay.value = new Overlay({
    element: popupCom.value, // 彈窗標(biāo)簽,在html里
    autoPan: true, // 如果彈窗在底圖邊緣時拾徙,底圖會移動
    autoPanAnimation: { // 底圖移動動畫
      duration: 250
    }
  })
  map.value = new Map({
    target: mapCom.value,
    layers: [
      new Tile({ // 加載瓦片
        name: 'defaultLayer',
        source: new XYZ({ // 瓦片底圖地址
          url: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}'
        })
      })
    ],
    view: new View({
      projection: 'EPSG:4326', // 投影坐標(biāo)系
      center: [113.1206, 23.034996], // 地圖中心點
      zoom: 12 // 地圖縮放級別(打開頁面時默認(rèn)級別)
    }),
    overlays: [overlay.value] // 綁定一個覆蓋物
  })

  mapClick() // 在地圖初始化完成后再綁定點擊事件
}

// 點擊地圖事件
function mapClick() {
  map.value.on('singleclick', evt => { // 綁定一個點擊事件
    const coordinate = evt.coordinate // 獲取坐標(biāo)
    currentCoordinate.value = coordinate // 保存坐標(biāo)點
    overlay.value.setPosition(coordinate) // 設(shè)置覆蓋物出現(xiàn)的位置
  })
}

// 關(guān)閉彈窗
function closePopup () {
  overlay.value.setPosition(undefined) // setPosition 傳入undefined會隱藏彈窗元素
  currentCoordinate.value = '' // 把彈窗內(nèi)容清空
}

onMounted(() => {
  // 在元素加載完之后再執(zhí)行地圖初始化
  initMap()
})
</script>

<style lang="scss" scoped>
.map__x {
  width: 600px;
  height: 600px;
  border: 1px solid #eee;
}

.popup {
  width: 300px;
  height: 100px;
  background: #fff;
  position: absolute;
  top: -115px;
  left: -150px;
  box-sizing: border-box;
  padding: 10px;

  &::after {
    content: '';
    display: block;
    position: absolute;
    width: 20px;
    height: 20px;
    background: #fff;
    bottom: -10px;
    left: 50%;
    transform: translateX(-50%) rotate(45deg);
  }

  .icon-close {
    position: absolute;
    top: 0px;
    right: 8px;
    cursor: pointer;
  }

  .content {
    margin-top: 14px;
  }
}
</style>



四洲炊、推薦

本例展示地址(vite+vue3+ol)

本例展示地址(備份鏈接)

本例倉庫(vite+vue3+ol)


ol在vue2中使用(預(yù)覽)

ol在vue2中使用(倉庫)


OpenLayers 官網(wǎng)

《WebGIS之OpenLayers全面解析(第2版)》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尼啡,隨后出現(xiàn)的幾起案子选浑,更是在濱河造成了極大的恐慌,老刑警劉巖玄叠,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拓提,居然都是意外死亡读恃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門代态,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寺惫,“玉大人,你說我怎么就攤上這事蹦疑∥魅福” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵歉摧,是天一觀的道長艇肴。 經(jīng)常有香客問我,道長叁温,這世上最難降的妖魔是什么再悼? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮膝但,結(jié)果婚禮上冲九,老公的妹妹穿的比我還像新娘。我一直安慰自己跟束,他們只是感情好莺奸,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布丑孩。 她就那樣靜靜地躺著,像睡著了一般灭贷。 火紅的嫁衣襯著肌膚如雪温学。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天氧腰,我揣著相機與錄音枫浙,去河邊找鬼。 笑死古拴,一個胖子當(dāng)著我的面吹牛箩帚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黄痪,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼紧帕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桅打?” 一聲冷哼從身側(cè)響起是嗜,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挺尾,沒想到半個月后鹅搪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡遭铺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年丽柿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂挂。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甫题,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涂召,到底是詐尸還是另有隱情坠非,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布果正,位于F島的核電站炎码,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舱卡。R本人自食惡果不足惜辅肾,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轮锥。 院中可真熱鬧矫钓,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至概龄,卻和暖如春还惠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背私杜。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工蚕键, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衰粹。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓锣光,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铝耻。 傳聞我的和親對象是個殘疾皇子誊爹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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

  • 一、本文簡介 本文案例使用 Vite 搭建項目瓢捉,在 Vue 3 的基礎(chǔ)上使用 OpenLayers 频丘。 閱讀本文需...
    德育處主任閱讀 2,294評論 2 7
  • 在使用openlayers作為地圖前端展示層的時候,用戶經(jīng)常需要點擊具體某個feature之后彈出該feature...
    jjxliu306閱讀 1,429評論 0 1
  • 這個效果是點擊地圖泡态,彈出坐標(biāo)信息搂漠。 點擊地圖邊緣時,底圖會跟著移動某弦,使彈窗能完整顯示出來状答。 用法請看代碼注釋,如基...
    德育處主任閱讀 1,810評論 3 3
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月刀崖,有人笑有人哭,有人歡樂有人憂愁拍摇,有人驚喜有人失落亮钦,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,535評論 28 53
  • 首先介紹下自己的背景: 我11年左右入市到現(xiàn)在蜂莉,也差不多有4年時間,看過一些關(guān)于股票投資的書籍混卵,對于巴菲特等股神的...
    瞎投資閱讀 5,724評論 3 8