vue中使用leaflet實(shí)現(xiàn)地圖卷簾功能

背景

最近在做一個(gè)vue項(xiàng)目里面需要實(shí)現(xiàn)一個(gè)地圖卷簾功能帮掉,本來(lái)是打算使用arcgis api 來(lái)實(shí)現(xiàn)這個(gè)功能唐含,后來(lái)發(fā)現(xiàn)leaflet中的有一個(gè)leaflet-side-by-side的插件可以直接使用,于是決定嘗試使用leaflet的插件來(lái)實(shí)現(xiàn)秕硝。本以為有插件的存在,肯定可以很快實(shí)現(xiàn)洲尊,沒(méi)想到每一步都是坑(主要原因我是菜雞)远豺。下面講一下我的爬坑之路。

卷簾效果圖.gif

官網(wǎng)使用方法

var map = L.map('map').setView([51.505, -0.09], 13);

var myLayer1 = L.tileLayer(...).addTo(map);

var myLayer2 = L.tileLayer(...).addTo(map)

L.control.sideBySide(myLayer1, myLayer2).addTo(map);

1.創(chuàng)建一個(gè)map實(shí)例
2.加載左邊的地圖
3.加載右邊的地圖
4.將兩個(gè)地圖放入到sideByside的控件中就可以了坞嘀。

就是這么簡(jiǎn)單躯护。然而實(shí)際的操作中卻是一步一坑啊。為了實(shí)現(xiàn)它丽涩,在這個(gè)過(guò)程中用到了很多其他的插件棺滞,下面具體介紹。

用到的插件

leaflet矢渊,
esri-leafle,
proj4继准, 
proj4leaflet,
leaflet-side-by-side

實(shí)現(xiàn)流程

引入插件

    import L from 'leaflet';#通過(guò)npm安裝
    import'leaflet/dist/leaflet.css';#
    import"../../assets/sliderbyslider/leaflet-side-by-side.js";#通過(guò)git地址下載直接引用
    import "proj4";#通過(guò)npm安裝
    import "proj4leaflet";#通過(guò)npm安裝
    var esri = require('esri-leaflet')#通過(guò)npm安裝矮男,直接使用import不起作用移必,只能通過(guò)這種方式。

leaflet, Proj4Leaflet這些都可以使用npm直接安裝毡鉴,為了使用Proj4leaflet時(shí)候不出現(xiàn)問(wèn)題恢氯,把proj4也直接引用到了工程中敏弃。leaflet-side-by-side.js通過(guò)git官網(wǎng)下載,記得把樣式拷入到工程文件中。我一開(kāi)始就是忘記引入樣式問(wèn)題赶站,地圖一直出不來(lái),控件錯(cuò)亂启搂。因?yàn)槲业牡貓D服務(wù)是通過(guò)arcgis server發(fā)布的地圖服務(wù)窖式,所以用到了esri-leaflet。使用的時(shí)候犯了難,不清楚是什么原因含潘,直接import,使用其中的方法都是實(shí)現(xiàn)未定義饲做,最后在網(wǎng)上找到了上述的進(jìn)行引用。

地圖參數(shù)配置

leaflet中默認(rèn)加載的地圖只有以下幾種遏弱,本項(xiàng)目中使用的地圖是CGCS2000的坐標(biāo)系盆均,需要使用proj4.js和Proj4leaflet.js來(lái)自定義坐標(biāo)系。具體可參考https://blog.csdn.net/aliasone/article/details/80355184漱逸,這種方法我只能實(shí)現(xiàn)標(biāo)準(zhǔn)的坐標(biāo)系泪姨,但是地方自定義坐標(biāo)系,沒(méi)有成功饰抒,如果有大神有更好的方法肮砾,希望熱心告知。

leaflet默認(rèn)坐標(biāo)系

本文參數(shù)配置如下:

origin: [-400.0, 399.9999999999998], //
EPSG: "EPSG:4490", //地圖空間參考值
epsginfo: '+proj=longlat +ellps=GRS80 +no_defs', //proj4描述
resolutions: [
        1.5228550437313792E-4,
        7.614275218656896E-5,
        3.807137609328448E-5,
        1.903568804664224E-5,
        9.51784402332112E-6,
        4.75892201166056E-6,
        2.37946100583028E-6,
        1.18973050291514E-6,
        5.9486525145757E-7,
        2.97432625728785E-7,
    ], //分辨率
 center: [32.05898506104946, 118.83657915219665], //地圖中心點(diǎn)
const  CRS = new L.Proj.CRS(mapConfig.EPSG,mapConfig.epsginfo,// EPSG:4490的PROJ.4描述
                        {
                            origin: mapConfig.origin,
                            resolutions: mapConfig.resolutions,
                        }
                    );

地圖實(shí)例化

this.Lmap = L.map('leafletmap',{
     crs: CRS,  // 定義的坐標(biāo)系
     center: mapConfig.center,
     zoom: 3,
});

圖層添加

使用esri-leaflt中的方法加載arcgis 發(fā)布的地圖服務(wù)袋坑,具體可以參考eari-leaflet網(wǎng)站仗处。本文加載切片服務(wù)

this.leftlayer =  esri.tiledMapLayer({url:lefturl}).addTo(this.Lmap);
this.rightlayer = esri.tiledMapLayer({url:righturl}).addTo(this.Lmap);
this.sidecontrol = L.control.sideBySide(this.leftlayer,this.rightlayer).addTo(this.Lmap);
this.Lmap.on('layeradd', function(params) {
    setTimeout(function update() {
        this.sidecontrol._updateClip();
    }, 100)
})

實(shí)現(xiàn)左右地圖動(dòng)態(tài)切換

動(dòng)態(tài)切換地圖服務(wù),實(shí)現(xiàn)多個(gè)地圖的對(duì)比枣宫。

var that = this;
var sidecontrol =that.sidecontrol;
var Lmap =that.Lmap;
var leftlayer =that.leftlayer;
if (sidecontrol && Lmap && leftlayer) {
    if ( that.lefturl== that.righturl) {
           return;
     }
    if (Lmap.hasLayer(leftlayer)) {
        Lmap.removeLayer(leftlayer);
    }
    leftlayer = esri.tiledMapLayer({url:that.lefturl});
    Lmap.addLayer(leftlayer);
    that.leftlayer = leftlayer
    that.sidecontrol.setLeftLayers(leftlayer);
};

實(shí)現(xiàn)效果

實(shí)現(xiàn)效果.png

參考

1.https://github.com/digidem/leaflet-side-by-side
2.https://blog.csdn.net/aliasone/article/details/80355184
3.https://blog.csdn.net/liyuanxiang1984/article/details/54947345
4.https://blog.csdn.net/qq_34790644/article/details/89308133
5.https://epsg.io/2439
6.http://esri.github.io/esri-leaflet/


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婆誓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子也颤,更是在濱河造成了極大的恐慌洋幻,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翅娶,死亡現(xiàn)場(chǎng)離奇詭異文留,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)竭沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門燥翅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜕提,你說(shuō)我怎么就攤上這事权旷。” “怎么了贯溅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵拄氯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我它浅,道長(zhǎng)译柏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任姐霍,我火速辦了婚禮鄙麦,結(jié)果婚禮上典唇,老公的妹妹穿的比我還像新娘。我一直安慰自己胯府,他們只是感情好介衔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著骂因,像睡著了一般炎咖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寒波,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天乘盼,我揣著相機(jī)與錄音,去河邊找鬼俄烁。 笑死绸栅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的页屠。 我是一名探鬼主播粹胯,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辰企!你這毒婦竟也來(lái)了风纠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蟆豫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后懒闷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體十减,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年愤估,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帮辟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玩焰,死狀恐怖由驹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昔园,我是刑警寧澤蔓榄,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站默刚,受9級(jí)特大地震影響甥郑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荤西,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一澜搅、第九天 我趴在偏房一處隱蔽的房頂上張望伍俘。 院中可真熱鬧,春花似錦勉躺、人聲如沸癌瘾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妨退。三九已至,卻和暖如春概说,著一層夾襖步出監(jiān)牢的瞬間碧注,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工糖赔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萍丐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓放典,卻偏偏與公主長(zhǎng)得像逝变,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奋构,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344