Cesium應用篇:2影像服務(上)


文章中相關范例下載路徑:https://yunpan.cn/cByQqkANWN7Pu 訪問密碼 823d

       Cesium中提供了多種ImageryProvider方式,來滿足用戶的實際需求,但作為天朝的一份子,可惜的是,看似很多,但最終的選擇卻又是捉襟見肘。如果是國內數據,個人認為天地圖的不錯,其他的地圖都有偏移,但天地圖的數據在國外有欠缺,假如你有一個模型數據或者地形數據,恰好是國外的某一個城市,比如馬賽等,天地圖就滿足不了這種場景,而Bing的地圖則面臨Key,國內數據清晰度等問題,而Google的數據則有很多不確定性,所以,除非很難有一種影像服務來實現一種大而全的效果。這不是技術問題,在此提出,就看實際中智者見智了。

影像服務綜述

       我們回到Cesium的影像服務上,如下是Cesium中BaseLayerPicker控件提供的各類影像服務:

clip_image001

      如上可以看到,主要是Bing、Mapbox以及OpenStreetMap,以及ESRI四家地圖服務,包括影像,影像+注記以及矢量三種形式。個人而言,Bing的地圖不錯,算是大而全,但需要Key,感覺偶爾會抽風,Mapbox是我非常喜歡的一家公司,很文藝,但和OSM一樣,訪問速度欠佳,而ESRI偶爾會有訪問權限的問題,也不太適合作為全球級別的影像服務。其他幾個要么我沒用過,要么感覺不走尋常路。一不小心全給否的節奏。

      Cesium目前支持的影像服務類型有:

  • ArcGisMapServerImageryProvider
    支持ArcGIS Online和Server的相關服務
  • BingMapsImageryProvider
    Bing地圖影像,可以指定mapStyle,詳見BingMapsStyle類
  • createOpenStreetMapImageryProvider
    OSM影像服務,根據不同的url選擇不同的風格
  • createTileMapServiceImageryProvider
    看文檔是根據MapTiler規范,貌似是可以自己下載瓦片,發布服務,類似ArcGIS影像服務的過程
  • GoogleEarthImageryProvider
    企業級服務,沒有用過
  • ImageryProvider
    基類,所有的影像服務最終都基於此類,如果你需要擴展新的Provider也會繼承該類
  • MapboxImageryProvider
    Mapbox影像服務,根據mapId指定地圖風格
  • SingleTileImageryProvider
    單張圖片的影像服務,適合離線數據或對影像數據要求並不高的場景下
  • UrlTemplateImageryProvider
    指定url的format模版,方便用戶實現自己的Provider,比如國內的高德,騰訊等影像服務,url都是一個固定的規范,都可以通過該Provider輕松實現。而OSM也是通過該類實現的。
  • WebMapServiceImageryProvider
    符合WMS規范的影像服務都可以通過該類封裝,指定具體參數實現
  • WebMapTileServiceImageryProvider
    服務WMTS1.0.0規范的影像服務,都可以通過該類實現,比如國內的天地圖
  • TileCoordinatesImageryProvider
    渲染每一個瓦片的圍,方便調試
  • GridImageryProvider
    渲染每一個瓦片內部的格網,了解每個瓦片的精細度

 

創建影像服務

ArcGisMapServerImageryProvider

      Cesium提供了ArcGisMapServerImageryProvider,可以方便的加載ArcGIS online和Server上的數據。

      首先獲取該影像服務的地址,下面以ESRI_Imagery_World_2D為例,WGS1984坐標系,全球范圍,只需要指定url,就可以在Cesium下快速加載該服務。

clip_image003

      備注:在不通過控件指定影像服務時,需要指定baseLayerPicker為false,否則會報錯。

BingMapsImageryProvider

      Cesium中提供了BingMapsImageryProvider。使用方式和ArcGIS一樣簡單,代碼如下:

clip_image004

      其中可以指定mapStyle,選擇多種風格,目前Cesium中支持AERIAL、AERIAL_WITH_LABELS、ROAD、ORDNANCE_SURVEY、COLLINS_BART五種。

createOpenStreetMapImageryProvider

      Cesium中提供了加載OpenStreetMap的Provider,代碼如下:

clip_image006

      另外,Cesium還提供了基於OSM的另外兩個服務地址,可供加載:watercolortoner。在三維影像服務中,因為LOD的策略,可能會出現相鄰的Tile中Z值不相同,大部分情況下不會導致問題,但有時候,可能相交處是文字,則可能會出現半個字的問題。因此,在三維中加載矢量的影像服務,還是有不少局限性的。

clip_image008

MapboxImageryProvider

      Cesium提供了MapBox的加載方式,個人認為MapBox的地圖非常清新,還是一個不錯的選擇。同時提供了mapbox.satellite、mapbox.streets、mapbox.streets-basic三種風格,代碼如下:

clip_image009

SingleTileImageryProvider

      如果你對影像數據沒有過多要求,或者是在離線環境下,SingleTileImageryProvider應該能夠滿足你的需要,只需要一張本地的圖片,就可以創建影像服務。代碼如下:

clip_image010

      url可以是相對該頁面的相對路徑,也可以是一個http的鏈接形式。因為該Provider僅支持經緯度投影,圖片寬高比最好為2:1,否則會有拉伸。

  

  另外,我們還可以在這個Provider上多做一些文章,比如搞一張透明的圖片,達到一些虛幻的效果,或者在近地面實現一種類似平面的瀏覽效果,畢竟2D和3D在相機,數據單位上是有區別的。

  比如隱藏地球主體后,疊加一些矢量面,突出主題.代碼如下:

 

      至此,Cesium中默認支持的影像服務,我們都有所涉及,並對最常用的這五類做了專門介紹和事例,下篇會基於Cesium提供的基類擴展Google,Baidu,天地圖等影像服務,以及實際應用中的一些問題,比如多地圖疊加,地圖范圍以及性能等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM