vue實(shí)現(xiàn)離線地圖+leaflet+高德瓦片的詳細(xì)代碼
準(zhǔn)備工作
1、我是通過(guò)leaflet和高德的瓦片實(shí)現(xiàn)的離線地圖
2、可以通過(guò)npm、CDN和直接下載zip包實(shí)現(xiàn)引入leaflet,附上leaflet中文網(wǎng)
3、高德的瓦片是找了很多帖子無(wú)意看到的一份合適的瓦片下載項(xiàng)目(忘了原帖在哪),不過(guò)這個(gè)項(xiàng)目是Java項(xiàng)目,是通過(guò)后端大哥幫忙下載的,附上項(xiàng)目原地址
4、地圖支持1-18層級(jí)縮放,全部下載的話(huà)文件量太大了(估算三千多萬(wàn)個(gè)文件,幾十G存儲(chǔ)),我這邊只下載了1-12層級(jí)也比較清晰了(圖片資源需要放在public文件夾下)
開(kāi)發(fā)代碼
1、HTML部分
<template> <div class="main"> <!-- 地圖 --> <div id="container"></div> </div> </template>
2、JS部分
<script> import icon from '@/assets/pointIcon.png' import '@/leaflet/leaflet.js' export default { name: 'CenterMap', props: { mapPointList: { type: Array, default: [] } }, mounted() { //地圖初始化 this.initMap(this.mapPointList) }, methods: { //DOM初始化完成進(jìn)行地圖初始化 initMap(list) { // 設(shè)置iocn var myIcon = L.icon({ iconUrl: icon, //圖標(biāo) iconSize: [25, 34], //大小 iconAnchor: [12.5, 34] //偏移量 }) // 初始化地圖 var map = L.map('container').setView([28.697005, 115.885607], 8) // 瓦片圖層 L.tileLayer('/staticImg/{z}/{x}/{y}.png', { minZoom: 7, //最小縮小層級(jí) maxZoom: 12, //最大放大層級(jí) attribution: '<b style="color:#40a9ff">高德地圖</b>' //版權(quán)信息 }).addTo(map) // 通過(guò)數(shù)據(jù)標(biāo)注icon if (list.length > 0) { list.forEach(v => { // 這里是緯度在前 【緯度,經(jīng)度】 var marker = L.marker(v.point, { icon: myIcon //icon }) .addTo(map) // Tooltip 工具提示 https://leafletjs.cn/reference.html#tooltip .bindTooltip(v.deviceName, { permanent: true, //是永久打開(kāi) Tooltip 還是只在鼠標(biāo)移動(dòng)時(shí)打開(kāi)。 direction: 'bottom', //打開(kāi) Tooltip 的方向 offset: [0, 5], //Tooltip 位置的可選偏移 opacity: 1, //Tooltip 容器透明度 autoPlan: true //跟隨縮放變化 好像沒(méi)有起作用 }) marker.on('click', function(e) { L.popup({ offset: [0, -25] //popup 位置的可選偏移 }) .setLatLng(v.point) .setContent( `<p style='text-align:center'>${v.deviceName}</p> <p>設(shè)備編碼:${v.deviceCode}</p> <p>設(shè)備地址:${ v.address }</p> <p>設(shè)備狀態(tài):<span style="background-color:${v.state == 0 ? 'green' : 'red'};color: #fff; padding: 2px 4px;">${v.state == 0 ? '在線' : '離線'}</span></p>` ) .openOn(map) }) }) } }, // 父組件調(diào)用 接口更新地圖隨之更新 setMapData(list) { //地圖初始化 this.initMap(list) } } } </script>
3、css部分
<style lang="less" scoped> .main { width: 100%; height: 100%; } #container { padding: 0px; margin: 0px; width: 100%; height: 100%; } </style>
最后
我是下載的zip引入的leaflet,代碼整體寫(xiě)的比較亂,可能會(huì)出現(xiàn)瑕疵,遇到問(wèn)題請(qǐng)及時(shí)反饋
- 記得一定要引入leaflet.css文件,不然你的地圖會(huì)很瘋狂
- 記得一定要引入leaflet.css文件,不然你的地圖會(huì)很瘋狂
- 記得一定要引入leaflet.css文件,不然你的地圖會(huì)很瘋狂
到此這篇關(guān)于vue實(shí)現(xiàn)離線地圖+leaflet+高德瓦片的文章就介紹到這了,更多相關(guān)vue離線地圖+leaflet+高德瓦片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
keep-Alive搭配vue-router實(shí)現(xiàn)緩存頁(yè)面效果的示例代碼
這篇文章主要介紹了keep-Alive搭配vue-router實(shí)現(xiàn)緩存頁(yè)面效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能
這篇文章主要介紹了vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能,需要的朋友可以參考下2020-12-12vue+Java后端進(jìn)行調(diào)試時(shí)解決跨域問(wèn)題的方式
今天在開(kāi)發(fā)中遇到有點(diǎn)小問(wèn)題,vue+Java后端進(jìn)行調(diào)試時(shí)如何解決跨域問(wèn)題,下面小編給大家分享解決方法,感興趣的朋友一起看看吧2017-10-10vue請(qǐng)求本地自己編寫(xiě)的json文件的方法
這篇文章主要介紹了vue請(qǐng)求本地自己編寫(xiě)的json文件,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Vue的子組件props如何設(shè)置多個(gè)校驗(yàn)類(lèi)型
這篇文章主要介紹了Vue的子組件props如何設(shè)置多個(gè)校驗(yàn)類(lèi)型問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說(shuō)明
這篇文章主要介紹了Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08vue中如何實(shí)時(shí)監(jiān)聽(tīng)本地存儲(chǔ)
這篇文章主要介紹了vue中如何實(shí)時(shí)監(jiān)聽(tīng)本地存儲(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04