1. 程式人生 > >北京快_三平臺出租多源數據加載一:數據組織

北京快_三平臺出租多源數據加載一:數據組織

元素 單獨 sta 一個 遠程 復雜 一對一 feature 自己的

北京快_三平臺出租 Q1446595067 的地圖數據通過圖層(Layer)進行組織渲染,然後通過數據源(Source)設置具體的地圖數據來源。

Layer可看作渲染地圖的層容器,具體的數據需要通過Source設置。

地圖數據根據數據源(Source)可分為Image、Tile、Vector三大類型的數據源類,對應設置到地圖圖層(Layer)的Image、Tile、Vector三大類的圖層中。其中,矢量圖層Vector通過樣式(Style)來設置矢量要素渲染的方式和外觀。

Source和Layer是一對一的關系,有一個Source,必然需要一個Layer,然後把Layer添加到Map上,就可以顯示出來了。

在數據源中:

    Image類為單一圖像基類,其子類作為畫布(canvas)元素、服務器圖片、單個靜態圖片、WMS單一圖像等的數據源。ol.source.Image對應的是一整張圖,而不像瓦片那樣很多張圖,從而無需切片,也可以加載一些地圖,適用於一些小場景地圖。

    Tile類為瓦片抽象基類,其子類作為各類瓦片數據的數據源。

    Vector類則為矢量類,可直接實例化創建矢量數據的數據源(支持各種格式的矢量數據),其子類則為擴展的某類矢量數據的數據源。

從上述OpenLayers3的空間數據組織可知,地圖數據的數據源可分為Image、Tile、Vector三大類型,其中,Image為圖片數據源,Tile為瓦片數據源,兩者本質基本相同,均為圖片或圖片集。ol.source.Vector則為矢量數據源基類,為矢量圖層提供具體的數據來源,包括直接組織或讀取的矢量數據(Features)、遠程數據源的矢量數據(即通過url設置數據源路徑)等。若是url設置的矢量數據源,則通過解析器Format(即ol.format.Feature的子類)來解析各類矢量數據,如XML、Text、JSON、GML、KML、GPS、WFS、WKT、GeoJSON等地圖數據。

從復雜度來分析,ol.source.Image和ol.source.Vector都不復雜,其數據格式和來源方式都簡單。而ol.source.Tile則不一樣,由於一些歷史問題,多個服務提供商,多種標準等諸多原因,導致要支持世界上大多數的瓦片數據源,就需要針對這些差異提供不同的Tile數據源支持。我們先來看一下OpenLayers 3現在支持的Source具體有哪些:

上圖中的類是按照繼承關系,從左向右展開的,左邊的為父類,右邊的為子類。在使用時,一般來說,都是直接使用葉子節點上的類,基本就可以完成需求。父類需要自己進一步擴展或者處理才能有效使用。

我們先了解最為復雜的ol.source.Tile,其葉子節點類有很多,大致可以分為幾類:

    在線服務的Source,包括ol.source.BingMaps(使用的是微軟提供的Bing在線地圖數據)、ol.source.Stamen(使用的是Stamen提供的在線地圖數據)。沒有自己的地圖服務器的情況下,可直接使用它們,加載地圖底圖。

支持協議標準的Source,包括ol.source.TileArcGISRest、ol.source.TileWMS、ol.source.WMTS、ol.source.UTFGrid、ol.source.TileJSON。如果要使用它們,首先你得先學習對應的協議,之後必須找到支持這些協議的服務器來提供數據源,這些服務器可以是底圖服務提供商提供的,也可以是自己搭建的服務器,關鍵是得支持這些協議。

    ol.source.XYZ,這個需要單獨提一下,因為是可以直接使用的,而且現在很多地圖服務(在線的,或者自己搭建的服務器)都支持xyz方式的請求。國內在線的地圖服務,高德、天地圖等,都可以通過這種方式加載,本地離線瓦片地圖也可以,用途廣泛,且簡單易學。

ol.source.Image雖然有幾種不同的子類,但大多比較簡單,因為不牽涉到過多的協議和服務器提供商。而ol.source.Vector就更加簡單了,但有時候其唯一的子類ol.source.Cluster在處理大量的Feature時,我們可能需要使用。

在大概了解了整個Source之後,緊接著該介紹它的搭檔Layer了,同樣的,我們還是先從OpenLayers 3現有的Layer類圖大致了解一下:

為了便於了解和使用,圖中標註了每一個Layer對應的Source。通過上圖可以看到Layer相對於Source而言,真是太簡單了。

北京快_三平臺出租多源數據加載一:數據組織