一種基于多源地圖的點位聚合方法及裝置的制造方法
【技術領域】
[0001] 本發(fā)明涉及數(shù)字地圖技術領域,具體涉及一種基于多源地圖的點位聚合方法及裝 置。
【背景技術】
[0002] 近年來,新技術的不斷涌現(xiàn),使得網(wǎng)頁功能更加豐富。數(shù)字地圖創(chuàng)造性地將傳統(tǒng)地 圖與網(wǎng)頁相結(jié)合,人們可以通過數(shù)字地圖查詢自己關注的任何地點的地理位置信息,極大 豐富和方便了人們的生活。從最初的"無縫"圖片發(fā)展到現(xiàn)在的二維、三維,數(shù)字地圖以其特 有的優(yōu)勢,得到了人們越來越多的青睞。
[0003] 在用戶體驗上,數(shù)字地圖為用戶提供了一種信息顯示更精準全面的新的信息查詢 方式,查詢結(jié)果通常都是以標記形式展現(xiàn),當在數(shù)字地圖中查找所關注的地點時,數(shù)字地圖 會將整個地區(qū)的地理范圍內(nèi)每個相應地點的位置以標記點的方式標識出來。
[0004] 然而用戶的可視區(qū)域有限,在當前縮放級別下,如果位置標記太多,則會出現(xiàn)成千 上萬個標記點的情況同時加載在地圖中的現(xiàn)象,部分標記點之間重疊覆蓋顯得雜亂無章, 無法清楚地看到地理位置信息的問題,影響地圖視覺效果和操作,并且過多的標記點會覆 蓋地圖底圖,占用系統(tǒng)資源造成地圖加載卡頓,極大影響了用戶的體驗。
[0005] 圖1為現(xiàn)有地圖中縮小的標記點在較小地圖縮放層級上的顯示示意圖,圖2為現(xiàn)有 地圖中放大的標記點在較大地圖層級上的顯示示意圖,可以看出,各標記點之間彼此覆蓋, 無法清楚地看到地理位置信息,也降低了地圖的加載速度。
[0006] 為此,需要一種聚合方法,讓標記點能根據(jù)地圖的層級,進行合理的聚合。目前,谷 歌、百度、高德等地圖提供商提供了點位聚合算法以解決上述問題。
[0007] 例如,谷歌地圖采用了基于方格和距離的點聚合算法,具體為:初始時沒有任何已 知聚合點,然后對每個點進行迭代,計算一個點的外包正方形,若此點的外包正方形與現(xiàn)有 的聚合點的外包正方形不相交,則新建聚合點;若相交,則把該點聚合到該聚合點中,若點 與多個已知的聚合點的外包正方形相交,則計算該點到到聚合點的距離,聚合到距離最近 的聚合點中,如此循環(huán),直到所有點都遍歷完畢,每個縮放級別都重新遍歷所有原始點要 素。
[0008] 但上述點位聚合算法只能比較準確或大致反應標記點的位置信息,精確度不高; 并且現(xiàn)有地圖提供商提供的點聚合算法,缺少一種對各種地圖均能進行處理的機制,使點 聚合算法能夠針對不同的地圖進行呈現(xiàn),通常只適用于一種或同種投影類型的地圖。譬如, 百度的點聚合算法,只能適用于百度投影方式的地圖,對于其他地圖,因為投影方式不同或 者不同廠商會對地圖進行地圖加密,聚合算法會出現(xiàn)很大偏差,則并不適用。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的是提供一種基于多源地圖的點位聚合方法及裝置,解決現(xiàn)有技術聚 合方法只能針對特定地圖、以及精度不高的問題。能夠適用于不同地圖,且精確度較高,能 夠較精確地反映標記點所在的位置信息
[0010] 為了實現(xiàn)上述目的,本發(fā)明技術方案如下:
[0011] -種基于多源地圖的點位聚合方法,所述聚合方法包括:
[0012] 對于待標記地圖,將標記點的經(jīng)煒度坐標轉(zhuǎn)換為地圖上的像素坐標;
[0013] 根據(jù)標記點的像素坐標以及給定的聚合距離,將標記點聚合為第一聚合類;
[0014] 根據(jù)第一聚合類之間的距離以及給定的聚合距離,對第一聚合類再次進行聚合, 得到第二聚合類,并將第二聚合類標示在待標記地圖上。
[0015] 其中,所述對于待標記地圖,將標記點的經(jīng)煒度坐標轉(zhuǎn)換為地圖上的像素坐標,包 括:
[0016] 對于待標記地圖,如果待標記地圖是已知切片方案地圖,且該切片方案地圖對應 有已知的坐標像素轉(zhuǎn)換關系,則根據(jù)已知的坐標像素轉(zhuǎn)換關系對待標記地圖進行經(jīng)煒度坐 標與像素坐標之間的轉(zhuǎn)換處理;
[0017] 對于待標記地圖,如果待標記地圖是未知切片方案地圖,則先確定一種已知的投 影方式,獲取該待標記地圖在已知投影方式下的地圖,通過待標記地圖上的樣本點與已知 投影方式下的地圖對應點的關系擬合出待標記地圖上的坐標像素轉(zhuǎn)換關系,根據(jù)擬合出的 坐標像素轉(zhuǎn)換關系對待標記地圖進行經(jīng)煒度坐標與像素坐標之間的轉(zhuǎn)換處理。
[0018] 其中,所述根據(jù)標記點的像素坐標以及給定的聚合距離,將標記點聚合為第一聚 合類,包括:
[0019] 對于每個標記點,將其像素坐標同除以聚合距離的值;
[0020] 取所得的商的整數(shù)部分作為該標記點的新坐標;
[0021] 將新坐標相同的標記點放入同一個第一聚合類。
[0022]其中,所述根據(jù)第一聚合類之間的距離以及給定的聚合距離,對第一聚合類再次 進行聚合,得到第二聚合類,包括:
[0023]計算出第一聚合類的中心坐標;
[0024] 對于每一個第一聚合類,以其中心坐標計算該第一聚合類與周圍左、左上、上、右 上、右、右下、下、左下方向上的其他第一聚合類的距離,將與該第一聚合類距離小于等于聚 合距離的其他第一聚合類合并為第二聚合類。
[0025] 其中,所述聚合距離為設定的像素數(shù)量,所述第一聚合類的中心坐標為第一聚合 類中所有標記點像素坐標的均值,所述第二聚合類在待標記地圖上的坐標為第二聚合類的 中心坐標,所述第二聚合類的中心坐標為第二聚合類中所有標記點像素坐標的均值。
[0026] 本發(fā)明還提出了一種基于多源地圖的點位聚合裝置,所述聚合裝置包括:
[0027] 坐標像素轉(zhuǎn)換模塊,用于對于待標記地圖,將標記點的經(jīng)煒度坐標轉(zhuǎn)換為地圖上 的像素坐標;
[0028]第一聚合模塊,用于根據(jù)標記點的像素坐標以及給定的聚合距離,將標記點聚合 為第一聚合類;
[0029]第二聚合模塊,用于根據(jù)第一聚合類之間的距離以及給定的聚合距離,對第一聚 合類再次進行聚合,得到第二聚合類,并將第二聚合類標示在待標記地圖上。
[0030]本發(fā)明提出了一種基于多源地圖的點位聚合方法及裝置,通過坐標像素轉(zhuǎn)換關系 將標記點的經(jīng)煒度坐標轉(zhuǎn)換為像素坐標,根據(jù)像素坐標與聚合距離對標記點進行聚合。能 夠適用于任何地圖,聚合的準確率高。
【附圖說明】
[0031]圖1為現(xiàn)有地圖中縮小的標記點在較小地圖縮放層級上的顯示示意圖;
[0032]圖2為現(xiàn)有地圖中放大的標記點在較大地圖層級上的顯示示意圖;
[0033] 圖3為本發(fā)明點位聚合方法流程圖;
[0034] 圖4為為發(fā)明實施例第一聚合類聚合示意圖;
[0035] 圖5為經(jīng)過兩次聚合后的聚合類的示意圖。
【具體實施方式】
[0036]下面結(jié)合附圖和實施例對本發(fā)明技術方案做進一步詳細說明,以下實施例不構(gòu)成 對本發(fā)明的限定。
[0037] 如圖3所示,本實施例一種基于多源地圖的點位聚合方法,包括以下步驟:
[0038] 步驟Sl、對于待標記地圖,將標記點的經(jīng)煒度坐標轉(zhuǎn)換為地圖上的像素坐標。
[0039] 經(jīng)煒度坐標與地圖上的像素坐標的轉(zhuǎn)換,根據(jù)不同的源地圖,對應的算法不同。目 前市場上采用的地圖分為兩類:一類采用標準GoogleOnline切片方案地圖,如高德、谷歌 等;另一類采用非GoogleOnline切片方案地圖,如百度地圖。其中,前者地圖上的經(jīng)煒度坐 標和像素坐標之間的相互換算較為簡單,這種坐標換算的方法十分成熟,精度也十分高,而 后者則較難,同時由于加密算法等原因,其坐標換算的算法較為復雜。
[0040] 本實施例的坐標像素轉(zhuǎn)換算法,解決全球范圍已知投影地圖坐標系與經(jīng)煒度坐標 系之間的換算問題。對于一個未知投影坐標系的地圖,或者說該地圖上的各個點對應的經(jīng) 煒度坐標和像素坐標未知,該算法能夠得出該地圖上的坐標系,對地圖上的經(jīng)煒度坐標和 像素坐標進行相互換算,即能使不同地圖提供商的地圖能夠準確地在同一個平臺中顯示。 [0041 ]其中,將標記點的經(jīng)煒度坐標轉(zhuǎn)換為地圖上的像素坐標,包括:
[0042] 對于待標記地圖,如果待標記地圖是已知切片方案地圖,且該切片方案地圖對應 有已知的坐標像素轉(zhuǎn)換關系,則根據(jù)已知的坐標像素轉(zhuǎn)換關系對待標記地圖進行經(jīng)煒度坐 標與像素坐標之間的轉(zhuǎn)換處理。
[0043] 例如,待標記地圖為GoogleOnline切片方案,GoogleOnline切片方案每張瓦片的 大小為256個像素,切片的原點為-180,85 .05 1 12877980659,根據(jù)墨卡托投影 (WebMercator)的投影特征和具體的切片方案,可以得出GoogleOnline切片方案地圖的坐 標轉(zhuǎn)換公式如下:
[0044] 像素坐標轉(zhuǎn)換至經(jīng)煒度坐標:
[0048] lng = 360*xx
[0049] 經(jīng)煒度坐標轉(zhuǎn)換至像素坐標公式為:
[0053] x = xx*mapSizeX+0 · 5
[0054] y = yy*mapSizeY+0 · 5
[0055]其中x,y為像素坐標,mapSizeX為當前層級的X方