本發(fā)明屬于webgis系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種基于web客戶端的第三方地圖瓦片服務接入方法及系統(tǒng)。
背景技術(shù):
在webgis系統(tǒng)項目的建設過程中,業(yè)主單位往往不具備基礎地圖的生產(chǎn)和發(fā)布能力。例如某市交通局建設一張地圖系統(tǒng),交通業(yè)務相關(guān)的地圖數(shù)據(jù)為局內(nèi)自建平臺發(fā)布,而基礎地理和影像地圖的數(shù)據(jù)來源于當?shù)貒辆值乃峁┑姆?。這種第三方平臺的地圖服務,接口和協(xié)議往往與開發(fā)框架預設的標準協(xié)議存在不一致的方面,導致地圖顯示錯位、級別不對、甚至無法顯示的問題。為此,開發(fā)人員需要通過技術(shù)手段將各類地圖結(jié)合起來以便可以在同一個地圖上顯示,增加了開發(fā)難度。
技術(shù)實現(xiàn)要素:
鑒于上述問題,本發(fā)明的目的在于提供一種基于web客戶端的第三方地圖瓦片服務接入方法及系統(tǒng),旨在解決由于各家第三方發(fā)布平臺的差異性,導致有時接入時存在信息缺失,地圖服務無法正確的疊加到地圖上瀏覽的技術(shù)問題。
一方面,所述基于web客戶端的第三方地圖瓦片服務接入方法,包括下述步驟:
配置文件并根據(jù)第三方地圖瓦片服務平臺提供的服務接口得到地圖鏈接模板;
當?shù)貓D平移或縮放時,根據(jù)當前地圖顯示比例尺得到瓦片級別,然后根據(jù)地圖可見視窗的地理范圍、當前級別對應的地圖分辨率、瓦片原點、單張瓦片的寬高計算得到所要獲取瓦片的行列號區(qū)間;
在所述行列號區(qū)間內(nèi),獲取所有要請求瓦片的行號和列號并代入所述地圖鏈接模板,得到所有請求瓦片的實際請求鏈接;
基于所述實際請求鏈接向第三方地圖瓦片服務平臺發(fā)起請求,獲取圖片數(shù)據(jù)并在地圖上顯示出來。
進一步的,所述方法還包括:
當?shù)貓D縮放時,檢測當前地圖顯示比例尺是否在預設的顯示最大比例尺最小顯示比例尺之間的范圍內(nèi),當超出范圍時,設置瓦片不可見。
進一步的,所述地圖鏈接模板需通過配置文件重新定義一套標準化的配置參數(shù),包括:參考系、初始化范圍、全圖范圍、單位、顯示最大比例尺、顯示最小比例尺、圖層id、樣式id、矩陣、格式、瓦片信息,其中瓦片信息包含分辨率、瓦片寬高、瓦片原點、地圖級別定義,所述地圖級別定義包括級別編號、比例尺、分辨率。
進一步的,所要獲取瓦片的行列號區(qū)間為:
row=[rowmin,rowmax],col=[colmin,colmax]
其中行號下限r(nóng)owmin=(xmin-originx)/(resolution*tilewidth)
行號上限r(nóng)owmax=[(xmax-originx)/(resolution*tilewidth)]+1
列號下限colmin=(originy-ymax)/(resolution*tileheight)
列號上限colmax=[(originy-ymin)/(resolution*tileheight)]+1
這里xmin、ymin、xmax、ymax分別表示地圖可見視窗的地理范圍的x坐標最小值、y坐標最小值、x坐標最大值和y坐標最大值;
originx、originy表示瓦片原點的坐標;
tilewidth、tileheight表示瓦片的寬高;
resolution表示地圖分辨率。
另一方面,所述基于web客戶端的第三方地圖瓦片服務接入系統(tǒng),包括:
模板定義單元,用于配置文件并根據(jù)第三方地圖瓦片服務平臺提供的服務接口得到地圖鏈接模板;
區(qū)間計算單元,用于當?shù)貓D平移或縮放時,根據(jù)當前地圖顯示比例尺得到瓦片級別,然后根據(jù)地圖可見視窗的地理范圍、當前級別對應的地圖分辨率、瓦片原點、單張瓦片的寬高計算得到所要獲取瓦片的行列號區(qū)間;
鏈接獲取單元,用于在所述行列號區(qū)間內(nèi),獲取所有要請求瓦片的行號和列號并代入所述地圖鏈接模板,得到所有請求瓦片的實際請求鏈接;
數(shù)據(jù)加載單元,用于基于所述實際請求鏈接向第三方地圖瓦片服務平臺發(fā)起請求,獲取圖片數(shù)據(jù)并在地圖上顯示出來。
進一步的,所述系統(tǒng)還包括:
判斷設置單元,用于當?shù)貓D縮放時,檢測當前地圖顯示比例尺是否在預設的顯示最大比例尺最小顯示比例尺之間的范圍內(nèi),當超出范圍時,設置瓦片不可見。
進一步的,所述模板定義單元中,所述地圖鏈接模板需通過配置文件重新定義一套標準化的配置參數(shù),包括:參考系、初始化范圍、全圖范圍、單位、顯示最大比例尺、顯示最小比例尺、圖層id、樣式id、矩陣、格式、瓦片信息,其中瓦片信息包含分辨率、瓦片寬高、瓦片原點、地圖級別定義,所述地圖級別定義包括級別編號、比例尺、分辨率。
進一步的,所要獲取瓦片的行列號區(qū)間為:
row=[rowmin,rowmax],col=[colmin,colmax]
其中行號下限r(nóng)owmin=(xmin-originx)/(resolution*tilewidth)
行號上限r(nóng)owmax=[(xmax-originx)/(resolution*tilewidth)]+1
列號下限colmin=(originy-ymax)/(resolution*tileheight)
列號上限colmax=[(originy-ymin)/(resolution*tileheight)]+1
這里xmin、ymin、xmax、ymax分別表示地圖可見視窗的地理范圍的x坐標最小值、y坐標最小值、x坐標最大值和y坐標最大值;
originx、originy表示瓦片原點的坐標;
tilewidth、tileheight表示瓦片的寬高;
resolution表示地圖分辨率。
本發(fā)明的有益效果是:本發(fā)明根據(jù)不同第三方地圖瓦片服務平臺的服務接口定義地圖鏈接模板,通過配置文件設置模板參數(shù),將加載瓦片服務所需的所有參數(shù)進行自主控制,根據(jù)所有要請求瓦片的行號和列號并結(jié)合地圖鏈接模板,得到瓦片的實際請求鏈接,根據(jù)實際請求鏈接實現(xiàn)了地圖的有效接入和加載顯示。本發(fā)明實現(xiàn)了一種標準化方法來描述第三方地圖瓦片服務的接入過程,為此后類似場景提供了明確的工作思路和方法,形成的模塊具有較好的復用度和擴展性。
附圖說明
圖1是本發(fā)明第一實施例提供的基于web客戶端的第三方地圖瓦片服務接入方法的流程圖;
圖2是配置參數(shù)示意圖;
圖3是本發(fā)明第二實施例提供的基于web客戶端的第三方地圖瓦片服務接入系統(tǒng)的結(jié)構(gòu)方框圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
現(xiàn)有技術(shù)中,在第三方地圖瓦片服務接入的過程,往往采用解析服務元數(shù)據(jù)的方式,但是由于第三方地圖瓦片服務的發(fā)布平臺存在不統(tǒng)一,并且服務元數(shù)據(jù)的描述往往也存在不完整的地方,導致有時服務接入時存在信息缺失,地圖服務無法正確的疊加到地圖上瀏覽。
另外,根據(jù)大量項目的實施經(jīng)驗來看,一般來說第三方服務為地圖瓦片服務,因此本發(fā)明重點是形成一種方案,來解決第三方地圖瓦片服務的接入問題。
為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實施例來進行說明。
實施例一:
圖1示出了本發(fā)明實施例提供基于web客戶端的第三方地圖瓦片服務接入方法的流程,為了便于說明僅示出了與本發(fā)明實施例相關(guān)的部分。
如圖1所示,本實施例提供的基于web客戶端的第三方地圖瓦片服務接入方法包括下述步驟:
步驟s1、配置文件并根據(jù)第三方地圖瓦片服務平臺提供的服務接口得到地圖鏈接模板。
由于各家第三方地圖服務發(fā)布平臺的差異性,未形成一個統(tǒng)一接口。本發(fā)明根據(jù)第三方瓦片服務所提供的服務接口,定義出地圖鏈接模板。具體實現(xiàn)時,首先基于arcgistiledmapservicelayer進行擴展,tiledmapservicelayer繼承自layer,是所有使用了緩存的地圖服務的基類。通過它可以在程序中加入經(jīng)過緩存的,來自不同數(shù)據(jù)源的地圖服務。比如arcgisserver的地圖服務,googlemap的地圖,virtualearth的地圖等。
通過配置文件重新定義以下參數(shù),如圖2所示,包括參考系、初始化范圍、全圖范圍、單位、顯示最大比例尺、顯示最小比例尺、圖層id、樣式id、矩陣、格式、瓦片信息。其中瓦片信息包含分辨率(dpi)、瓦片寬高(基于像素單位)、瓦片原點、地圖級別定義(包括級別編號、比例尺、分辨率)。以上參數(shù)為本實施例定義的通用格式參數(shù),適用于主流地圖瓦片服務的接入場景,基本上目前主流地圖瓦片服務都包括上述參數(shù)。
不同的第三方地圖瓦片服務發(fā)布平臺的地圖鏈接模板不同,地圖鏈接模板實質(zhì)上是一個鏈接請求地址。而獲取一張瓦片的必要參數(shù)為級別level、行row、列col這三個參數(shù),通用地圖鏈接模板如下:
http://www.domain.com/l=level&r=row&c=col。
通過這三個參數(shù)可以獲取一張地圖瓦片。當然,不同的地圖瓦片服務平臺的接口可能會增加自定義擴展參數(shù),也就是圖2所示的各種參數(shù),基于該通用地圖鏈接模板也可以方便地進行擴展:
比如第三方地圖瓦片服務中,最為常見的為ogcwmts服務,針對該地圖瓦片服務,其地圖鏈接模板如下所示:
http://www.domain.com/wmts?service=wmts&request=gettile&version=1.0.0&layer={layerid}&style={styleid}&tilematrixset={tilematrixset}&tilematrix={level}&tilerow={row}&tilecol={col}&format={format}
上述模板中,大括號{*}內(nèi)為參數(shù)。
又如rest地圖瓦片服務的地圖鏈接模板為:
http://www.domain.com/tile/level/row/col。
其他類型的地圖瓦片服務的地圖鏈接模板不一一列舉,但是都至少包括級別level、行row、列col這三個參數(shù)。
步驟s2、當?shù)貓D平移或縮放時,根據(jù)當前地圖顯示比例尺得到瓦片級別,然后根據(jù)地圖可見視窗的地理范圍、當前級別對應的地圖分辨率、瓦片原點、單張瓦片的寬高計算得到所要獲取瓦片的行列號區(qū)間。
進行地圖操作時,包括地圖平移和縮放,都會更新和加載瓦片數(shù)據(jù)。具體實現(xiàn)時,首先需要獲取地圖可見視窗內(nèi)的瓦片的行列號區(qū)間。
所要獲取瓦片的行列號區(qū)間為:
row=[rowmin,rowmax],col=[colmin,colmax]
其中行號下限r(nóng)owmin=(xmin-originx)/(resolution*tilewidth)
行號上限r(nóng)owmax=[(xmax-originx)/(resolution*tilewidth)]+1
列號下限colmin=(originy-ymax)/(resolution*tileheight)
列號上限colmax=[(originy-ymin)/(resolution*tileheight)]+1
這里xmin、ymin、xmax、ymax分別表示地圖可見視窗的地理范圍的x坐標最小值、y坐標最小值、x坐標最大值和y坐標最大值;
originx、originy表示瓦片原點的坐標;
tilewidth、tileheight表示瓦片的寬高;
resolution表示地圖分辨率。
行號范圍在rowmin至rowmax之間、列號范圍在colmin至colmax之間的地圖瓦片是所要獲取的瓦片。
步驟s3、在所述行列號區(qū)間內(nèi),獲取所有要請求瓦片的行號和列號并代入所述地圖鏈接模板,得到所有請求瓦片的實際請求鏈接。
使用雙循環(huán)計算方法獲取到所有要請求瓦片的行號row和列號col,即首先在[rowmin,rowmax]范圍內(nèi),從小到到依次取值,假設有m個取值,針對當前的行號取值,在[colmin,colmax]范圍內(nèi)遍歷列號,假設有n個列號,這樣就可以得到m*n塊瓦片的行列號,然后代入到實際的第三方地圖瓦片服務的地圖鏈接模板中,形成所有瓦片請求的實際請求鏈接,即得到了各塊所要請求的瓦片的實際請求地址。
步驟s4、基于所述實際請求鏈接向第三方地圖瓦片服務平臺發(fā)起請求,獲取圖片數(shù)據(jù)并在地圖上顯示出來。
最后根據(jù)際請求鏈接直接向第三方地圖瓦片服務平臺發(fā)起請求,可以準確、方便的從第三方地圖瓦片服務平臺獲取到瓦片圖片數(shù)據(jù),然后在當前地圖上加載顯示出來。整個過程的通用性高,為此后類似場景提供了明確的工作思路和方法,形成的模塊具有較好的復用度和擴展性。
步驟s5、當?shù)貓D縮放時,檢測當前地圖顯示比例尺是否在預設的顯示最大比例尺最小顯示比例尺之間的范圍內(nèi),當超出范圍時,設置瓦片不可見。
在標準化的配置參數(shù)中,有顯示最大比例尺、顯示最小比例尺,如果當前地圖顯示比例尺不在該范圍內(nèi),則設置瓦片不可見,避免出現(xiàn)顯示錯誤。
實施例二:
圖3示出了本發(fā)明實施例提供基于web客戶端的第三方地圖瓦片服務接入系統(tǒng)的結(jié)構(gòu),為了便于說明僅示出了與本發(fā)明實施例相關(guān)的部分。
如圖3所示,本實施例提供的基于web客戶端的第三方地圖瓦片服務接入系統(tǒng)包括:
模板定義單元1,用于配置文件并根據(jù)第三方地圖瓦片服務平臺提供的服務接口得到地圖鏈接模板;
區(qū)間計算單元2,用于當?shù)貓D平移或縮放時,根據(jù)當前地圖顯示比例尺得到瓦片級別,然后根據(jù)地圖可見視窗的地理范圍、當前級別對應的地圖分辨率、瓦片原點、單張瓦片的寬高計算得到所要獲取瓦片的行列號區(qū)間;
鏈接獲取單元3,用于在所述行列號區(qū)間內(nèi),獲取所有要請求瓦片的行號和列號并代入所述地圖鏈接模板,得到所有請求瓦片的實際請求鏈接;
數(shù)據(jù)加載單元4,用于基于所述實際請求鏈接向第三方地圖瓦片服務平臺發(fā)起請求,獲取圖片數(shù)據(jù)并在地圖上顯示出來。
進一步的,所述系統(tǒng)還包括:
判斷設置單元5,用于當?shù)貓D縮放時,檢測當前地圖顯示比例尺是否在預設的顯示最大比例尺最小顯示比例尺之間的范圍內(nèi),當超出范圍時,設置瓦片不可見。
本實施例提供的各個功能單元對應實現(xiàn)了實施例一中的步驟s1-s5,具體實現(xiàn)過程這里不再贅述。
其中,所述模板定義單元中,所述地圖鏈接模板需通過配置文件重新定義一套標準化的配置參數(shù),包括:參考系、初始化范圍、全圖范圍、單位、顯示最大比例尺、顯示最小比例尺、圖層id、樣式id、矩陣、格式、瓦片信息,其中瓦片信息包含分辨率、瓦片寬高、瓦片原點、地圖級別定義,所述地圖級別定義包括級別編號、比例尺、分辨率。
所要獲取瓦片的行列號區(qū)間為:
row=[rowmin,rowmax],col=[colmin,colmax]
其中行號下限r(nóng)owmin=(xmin-originx)/(resolution*tilewidth)
行號上限r(nóng)owmax=[(xmax-originx)/(resolution*tilewidth)]+1
列號下限colmin=(originy-ymax)/(resolution*tileheight)
列號上限colmax=[(originy-ymin)/(resolution*tileheight)]+1
這里xmin、ymin、xmax、ymax分別表示地圖可見視窗的地理范圍的x坐標最小值、y坐標最小值、x坐標最大值和y坐標最大值;
originx、originy表示瓦片原點的坐標;
tilewidth、tileheight表示瓦片的寬高;
resolution表示地圖分辨率。
本發(fā)明實施例根據(jù)不同第三方地圖瓦片服務平臺的服務接口定義地圖鏈接模板,通過配置文件設置模板參數(shù),將加載瓦片服務所需的所有參數(shù)進行自主控制,根據(jù)所有要請求瓦片的行號和列號并結(jié)合地圖鏈接模板,得到瓦片的實際請求鏈接,根據(jù)實際請求鏈接實現(xiàn)了地圖的有效接入和加載顯示。本發(fā)明實現(xiàn)了一種標準化方法來描述第三方地圖瓦片服務的接入過程,為此后類似場景提供了明確的工作思路和方法,形成的模塊具有較好的復用度和擴展性。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。