高德地圖的Marker和MarkerCluster的應(yīng)用場景分析

一庶橱、需求描述

表格中每一行數(shù)據(jù)均對應(yīng)地圖上一個坐標(biāo)點贮勃,要求:
1贪惹、在表格中選中一行時苏章,在地圖上對應(yīng)坐標(biāo)點被同步點亮,以區(qū)別其他坐標(biāo)點
2奏瞬、點擊地圖上坐標(biāo)點時枫绅,在表格中對應(yīng)數(shù)據(jù)行被同步選中,以區(qū)別表格中其他數(shù)據(jù)行硼端。
3并淋、地圖上多個坐標(biāo)點重合時,被點亮坐標(biāo)點自動顯示在最頂層珍昨;點擊此重合坐標(biāo)點县耽,等同于點擊該重合坐標(biāo)點中最頂層的那一個坐標(biāo)點。

1镣典、下圖為點標(biāo)記方式下的需求示意圖:

說明:點亮就是上圖中選中對應(yīng)行數(shù)據(jù)的點標(biāo)記顏色變?yōu)榧t色兔毙。

2、下圖為點聚合方式下的需求示意圖:

說明:上圖中有表格有8行數(shù)據(jù)兄春,對應(yīng)地圖上8個坐標(biāo)點澎剥,其中有3個坐標(biāo)點是重合的。

二赶舆、可選方案

解決以上需求哑姚,可選擇的方案有兩個:

1祭饭、點標(biāo)記Marker

所謂點標(biāo)記Marker,就是在地圖上指定的一個坐標(biāo)上打上一個Marker(如顯示一個水滴圖形叙量,或者自定義的其他任何圖形式)倡蝙,一個地圖上可以定義很多個Marker。

//1宛乃、創(chuàng)建Marker并顯示到地圖上悠咱,每個點創(chuàng)建一個Marker,放置到數(shù)組變量array_point中
征炼。析既。。谆奥。眼坏。。
array_point[i] = new window.AMap.Marker({
? ?position: [dataRes.data.data.rows[i].lon, dataRes.data.data.rows[i].lat],
? ? icon: "/statics/default.png",
? ? map: this.sys_map
?});
酸些。宰译。。魄懂。沿侈。。
//2市栗、啟用每個Marker上的click事件偵聽
array_point[i].on('click', function(e) {
? ? console.log(e.lnglat) ;
});

這種方式的優(yōu)點:可以清晰區(qū)分每個點缀拭,數(shù)據(jù)行和點標(biāo)記之間可以聯(lián)動。

這種方式的缺點:如果幾個坐標(biāo)相互之間非常近填帽,導(dǎo)致點標(biāo)記Marker重疊蛛淋,很難識別重疊了幾個坐標(biāo)點,分別是哪幾個點篡腌。

2褐荷、點聚合MarkerCluster

所謂點聚合MarkerCluster就是,在地圖縮小的一定比例時嘹悼,預(yù)定距離內(nèi)的點會自動合并成一個點顯示【上圖中有3數(shù)字的點就是一個聚合點叛甫,說明有3個坐標(biāo)合并的,并通過地圖提供的方法可以獲取到這個3個坐標(biāo)的清單】杨伙。點聚合本質(zhì)上是若干個點的集合其监,可以隨時往其中增、減點缀台,但無法針對其中的特定一個點進行個性化(如點亮)棠赛。

【注意,JSAPI1.0版本下點聚合不好用,2.0版本就能正常使用了】

//1睛约、創(chuàng)建點集合
.鼎俘。。辩涝。贸伐。。怔揩。
points.push({
?????weight: i,? ? //權(quán)重捉邢,可以不用
? ? ?lnglat: [dataRes.data.data.rows[i].lon, dataRes.data.data.rows[i].lat]
?});
。商膊。伏伐。。晕拆。藐翎。
//2、清楚點聚合示例中的點數(shù)據(jù)
if (this.sys_cluster) {
? ? this.sys_cluster.setData(null);
?};
//3实幕、創(chuàng)建并在地圖上顯示點聚合
that.sys_cluster = new window.AMap.MarkerCluster(that.sys_map, points, {
? ? ?gridSize: 80
});
//4吝镣、啟用點聚合上的click事件偵聽
this.sys_cluster.on("click", (e) => {
? ? console.log(e.clusterData);? //顯示單擊點標(biāo)記,顯示該點的坐標(biāo)清單昆庇,顯然對于單獨點末贾,則只顯示一個坐標(biāo),如果是一個聚合點整吆,則顯示坐標(biāo)清單?
?});

這種方式的優(yōu)點:地圖上可以清晰看出哪些是單獨點拱撵?哪些是聚合點?每個聚合點聚合了多少個坐標(biāo)掂为?

這種方式的缺點:在地圖上無法點亮任意指定的一個坐標(biāo)點(這個坐標(biāo)點可能是一個單獨的坐標(biāo)點裕膀,也可能是一個聚合點中的某一個坐標(biāo)點)

三员串、解決方法

? ? 通過分析以上可選擇的方案勇哗,發(fā)現(xiàn)兩個方案都不能完全滿足需求:Marker方式難以取到重合點的點清單;MarkerColuster方式難以點亮指定一個坐標(biāo)點寸齐∮担【此事古難全,對于完美主義者來說渺鹦,這種揚棄性質(zhì)的選擇最是痛苦】

? ? 最終筆者選擇了Marker的方案扰法,思路如下:

? 1、點亮標(biāo)記毅厚,表格選中行的同時塞颁,對應(yīng)坐標(biāo)點的圖標(biāo)變?yōu)榧t色

? ?2、標(biāo)記置頂,點亮的標(biāo)記通過setzIndex置頂(對于單獨點沒有意義祠锣,但對于重合點酷窥,就有價值了)

? ?3、關(guān)閉點亮伴网,將上一個選中的點置暗蓬推,即恢復(fù)正常,不再處于點亮狀態(tài)澡腾。

? ? 對于重合點沸伏,在地圖上的無法選中指定一個點,也無法顯示點清單动分,更無法顯示重合點內(nèi)包含的點數(shù)量毅糟。但是可以通過表格選中某一行的方式,點亮地圖上的對應(yīng)坐標(biāo)點澜公,并將該坐標(biāo)點置頂留特,以便于在地圖上可以選中該點(選中的目的是方便后續(xù)邏輯,如通過彈出信息窗方式顯示該點的詳細(xì)信息)玛瘸。

? 如果有通過MarkerCluster能夠解決以上需求的方法蜕青,歡迎各位可以在留言區(qū)探討。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糊渊,一起剝皮案震驚了整個濱河市右核,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渺绒,老刑警劉巖贺喝,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宗兼,居然都是意外死亡躏鱼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門殷绍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來染苛,“玉大人,你說我怎么就攤上這事主到〔栊校” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵登钥,是天一觀的道長畔师。 經(jīng)常有香客問我,道長牧牢,這世上最難降的妖魔是什么看锉? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任姿锭,我火速辦了婚禮,結(jié)果婚禮上伯铣,老公的妹妹穿的比我還像新娘艾凯。我一直安慰自己,他們只是感情好懂傀,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布趾诗。 她就那樣靜靜地躺著,像睡著了一般蹬蚁。 火紅的嫁衣襯著肌膚如雪恃泪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天犀斋,我揣著相機與錄音贝乎,去河邊找鬼。 笑死叽粹,一個胖子當(dāng)著我的面吹牛览效,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虫几,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锤灿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辆脸?” 一聲冷哼從身側(cè)響起但校,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啡氢,沒想到半個月后状囱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡倘是,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年亭枷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀崭。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡叨粘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出门坷,到底是詐尸還是另有隱情宣鄙,我是刑警寧澤袍镀,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布默蚌,位于F島的核電站,受9級特大地震影響苇羡,放射性物質(zhì)發(fā)生泄漏绸吸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锦茁。 院中可真熱鬧攘轩,春花似錦、人聲如沸码俩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿存。三九已至笨篷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓣履,已是汗流浹背率翅。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袖迎,地道東北人冕臭。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像燕锥,于是被迫代替她去往敵國和親辜贵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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