摘要:百度地圖百度地圖作為項(xiàng)目中地圖可視化最重要的一部分,不止其為國(guó)人自己的地圖,還因?yàn)槠渫晟频募夹g(shù)文檔案例和多樣化的開(kāi)源插件等上有的組件可以直接使用,有興趣的同學(xué)可以直接上手這里不采用已經(jīng)封裝好的地圖組件,而是從零開(kāi)始,采用原生的百度地圖一
百度地圖
百度地圖作為項(xiàng)目中地圖可視化最重要的一部分,不止其為國(guó)人自己的地圖,還因?yàn)槠渫晟频募夹g(shù)文檔案例和多樣化的開(kāi)源插件(echarts、Mapv等)
github上有vue-baidu-map的組件可以直接使用,有興趣的同學(xué)可以直接上手
https://github.com/Dafrok/vue...
這里不采用已經(jīng)封裝好的地圖組件,而是從零開(kāi)始,采用原生的百度地圖api,一步步組合封裝
項(xiàng)目引入地圖
網(wǎng)上教程多數(shù)為index.html加入百度地圖api,然而這種寫(xiě)法并不符合我們的組件化思想,我的思想是先抽取百度地圖為多帶帶組件.vue,在需要地圖的業(yè)務(wù)中加載
參考vue-baidu-map動(dòng)態(tài)獲取百度地圖api
baiduMap.vue
// 初始化 reset () { const {getMapScript, initMap} = this getMapScript().then(initMap) }, // 獲取baidumap getMapScript () { if (!global.BMap) { const ak = this.ak || this._BMap().ak global.BMap = {} global.BMap._preloader = new Promise((resolve, reject) => { global._initBaiduMap = function () { resolve(global.BMap) global.document.body.removeChild($script) global.BMap._preloader = null global._initBaiduMap = null } const $script = document.createElement("script") global.document.body.appendChild($script) $script.src = `https://api.map.baidu.com/api?v=2.0&ak=${ak}&callback=_initBaiduMap` }) return global.BMap._preloader } else if (!global.BMap._preloader) { return Promise.resolve(global.BMap) } else { return global.BMap._preloader } }, // 獲取BMap, 初始化地圖 initMap (BMap) { this.BMap = BMap this.init(BMap) }, init (BMap) { let $el = this.$refs.basicMap const map = new BMap.Map($el) this.map = map this.setMapOptions() map.centerAndZoom(this.initCenter, this.initZoom) this.$emit("ready", {BMap, map}) }, // 設(shè)置地圖配置 setMapOptions () { }
某業(yè)務(wù)組件
效果如圖:
加入可視化工具
地圖上常規(guī)的可視化需求可以分成3種,分別是點(diǎn)線面
點(diǎn)(定位、數(shù)據(jù)打點(diǎn))
在百度地圖api官網(wǎng)實(shí)例中,可以通過(guò)addOverlay()將標(biāo)點(diǎn)添加到地圖上,因此在vue中,只要我們獲取到BMap和map構(gòu)造函數(shù)就可以滿足我們的操作
在組件中,我通過(guò)$emit父子組件間廣播事件,并將BMap、map傳到業(yè)務(wù)組件
baiduMap.vue
this.$emit("ready", {BMap, map})
業(yè)務(wù)組件
initReady ({BMap, map}) { let point = new BMap.Point(116.404, 39.915) map.centerAndZoom(point, 15) let marker = new BMap.Marker(point) map.addOverlay(marker) }
效果圖:
----------
線(導(dǎo)航、遷移路線)
業(yè)務(wù)組件
map.centerAndZoom(new BMap.Point(116.404, 39.915), 15) let myP1 = new BMap.Point(116.380967, 39.913285) let myP2 = new BMap.Point(116.424374, 39.914668) let driving = new BMap.DrivingRoute(map, {renderOptions: {map: map, autoViewport: true}}) driving.search(myP1, myP2)
效果圖:
----------
面(區(qū)域選定、覆蓋物、熱力圖)
業(yè)務(wù)組件
map.centerAndZoom(new BMap.Point(116.404, 39.915), 15) map.enableScrollWheelZoom() // 創(chuàng)建多邊形 let polygon = new BMap.Polygon([ new BMap.Point(116.387112, 39.920977), new BMap.Point(116.385243, 39.913063), new BMap.Point(116.394226, 39.917988), new BMap.Point(116.401772, 39.921364), new BMap.Point(116.41248, 39.927893) ], {strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.5}) // 增加多邊形 map.addOverlay(polygon) polygon.enableEditing()
效果圖:
上面簡(jiǎn)單舉了幾個(gè)實(shí)例,真實(shí)環(huán)境中還會(huì)很多其他的API,比如方向、定位、搜索、放大縮小等控件
但我們也發(fā)現(xiàn)在不同業(yè)務(wù)重復(fù)調(diào)用同一模塊時(shí),上面的代碼就顯得過(guò)于累贅,因此我們需要把添加到地圖上的圖層(點(diǎn)線面工具)都抽取封裝成組件(需要用到slot插槽分發(fā)內(nèi)容),之后業(yè)務(wù)只需引用組件并傳遞所需參數(shù)即可
待續(xù),持續(xù)更新......
下一篇文章: vue 地圖可視化(2) mapbox地圖篇
完整項(xiàng)目地址: https://github.com/hty7/vue-d...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94082.html
MapBox 項(xiàng)目中用到MapBox也是偶然的機(jī)會(huì),項(xiàng)目中需要采用3D地圖,當(dāng)現(xiàn)有的工具(百度地圖)無(wú)法滿足我們的需求,我們肯定需要更高級(jí)開(kāi)源的地圖,無(wú)奈谷歌地圖無(wú)法在國(guó)內(nèi)使用,已是便找到Leafle,一開(kāi)始驚艷于leafle的開(kāi)源程度和其與眾不同的地圖風(fēng)格,后來(lái)順藤摸瓜,找到一個(gè)商業(yè)性地圖,它便是我們的主角-MapBoxshowImg(https://segmentfault.com/img/b...
以下為個(gè)人目前接觸到的前端技術(shù),歡迎大家補(bǔ)充。 一、前端技術(shù)框架 1、Vue.js 官網(wǎng):https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鳥(niǎo)教程:http://www.runoob.com/w3cnote... Nuxt.js:https://zh.nuxtjs.org/ 桌面應(yīng)用Electron:https:...
摘要:首先利用搭建一個(gè)項(xiàng)目,然后寫(xiě)一段的。如果對(duì)項(xiàng)目的創(chuàng)建比較熟悉,可以跳過(guò)步驟一,直接看步驟二。輸入保存的模板名字,進(jìn)入項(xiàng)目初始化構(gòu)建,等待構(gòu)建完成。二安裝刪除,新建,輸入如下代碼地圖初始化,應(yīng)寫(xiě)在函數(shù)中,以保證掛載點(diǎn)先于地圖渲染。 Maptalks 項(xiàng)目是一個(gè) HTML5 的地圖引擎, 基于原生 ES6 Javascript 開(kāi)發(fā): 二三維一體化地圖, 通過(guò)二維地圖的旋轉(zhuǎn) /傾斜增加三維視...
摘要:接上篇全家桶百度地圖,搭建數(shù)據(jù)可視化系統(tǒng)前言業(yè)務(wù)場(chǎng)景實(shí)現(xiàn)數(shù)據(jù)監(jiān)控的系統(tǒng)。有線圖柱狀圖地圖,并具有定時(shí)刷新的功能。本篇將介紹一下剩下的部分。 接上篇vue全家桶+Echarts+百度地圖,搭建數(shù)據(jù)可視化系統(tǒng) 1 前 言 1.1 業(yè)務(wù)場(chǎng)景 實(shí)現(xiàn)數(shù)據(jù)監(jiān)控的系統(tǒng)。有線圖、柱狀圖、地圖,并具有定時(shí)刷新的功能。 1.2 業(yè)務(wù)分析 上一篇分析的步驟大致有: 系統(tǒng)搭建vue-cli vuex...
閱讀 3679·2021-11-24 09:39
閱讀 1288·2021-09-30 09:48
閱讀 3276·2021-09-09 11:51
閱讀 2900·2021-09-08 10:41
閱讀 1340·2019-08-30 14:06
閱讀 2809·2019-08-30 14:01
閱讀 884·2019-08-29 17:11
閱讀 3183·2019-08-29 15:37