當前位置:編程學習大全網 - 源碼下載 - Vector Tile Specification 2.1

Vector Tile Specification 2.1

原文鏈接 /mapbox/vector-tile-spec/tree/master/2.1/

在此文檔中, 關於關鍵詞必須、禁止、必要的、應當、不應、推薦的、可以與可選的的解釋, 見 RFC 2119 中的描述。

此文檔為矢量瓦片地理數據指定了壹種節省空間的編碼格式。 它被設計用於瀏覽器或服務器端應用程序,用於快速呈現或查找特征數據。

矢量瓦片格式使用 Google Protocol Buffers 編碼格式. Protocol Buffers是壹種與語言無關、與平臺無關的可擴展序列化機制。

矢量瓦片文件的擴展名 應該 為 mvt . 例如 vector.mvt .

When serving Vector Tiles the MIME type SHOULD be application/vnd.mapbox-vector-tile .

矢量瓦片表示壹個整正方形範圍內投影的數據。矢量瓦片 不應 包含關於邊界和投影的信息。這個文件格式假定解碼器在解碼之前就已經知道投影和邊界信息。

Web Mercator 是壹個投影的參考, the Google tile scheme 是壹個常見的範圍參考. 它們壹起提供了特定地理區域、特定細節級別和路徑之間的壹對壹關系 ,例如 /17/65535/43602.mvt .

矢量瓦片可以用任何投影和瓦片範圍方案來表示數據。

這個規範描述了矢量瓦片的數據結構。 讀者應該了解 矢量瓦片的protobuf的數據文檔 及其定義的結構。

矢量瓦片由壹組命名的層組成。每壹層包含地理特征和它的元數據。層格式的設計使壹層所需的數據在內存中是連續的,因此層可以添加到矢量瓦片中而不需要修改現有的數據。

壹個實例瓦片 應該 至少包含壹層。壹層 應該 至少包含壹個特征。

必須 包含 version 字段,此字段為圖層所依賴矢量瓦片規範版本號的主版本號。例如,壹個符合2.1版本規範的圖層包含壹個整數值為' 2 '的 version 字段。 version 字段 應該 是層中的第壹個字段。 解碼器 應該 首先解析 version ,以確保他們能夠解碼每壹層。 當矢量瓦片用戶遇到壹個矢量瓦片層的未知版本時,它 可能 會盡最大努力嘗試解釋該層,或者跳過該層。 無論哪種情況,它都 應該 繼續處理矢量瓦片中的後續圖層 。

壹個圖層必須包含壹個 name 字段. 壹個實例瓦片 禁止 有兩個或兩個以上名字完全壹樣的圖層.。在添加壹個圖層到現有的矢量瓦片之前,編碼器 必須 檢查現有的 name 字段,以防止重復。

層中的每個特征(見下文)都可以有壹個或多個鍵值對作為元數據。 鍵和值是兩個列表 keys 和 values 的索引,這兩個列表是跨層特征***享的。

圖層中 keys 字段中的每個元素為字符串。 keys 包含圖層所用到的特征,每個鍵都可以通過它在這個集合中的位置來索引,索引從0開始。 keys 不應 包含兩個完全壹樣的值。

圖層中 values 字段中的每個元素為以下幾種類型. values 表示圖層中用到的所有特征的值,每個值都可以通過它在這個集合中的位置的來索引,索引從0開始。 values 不應 包含兩個完全壹樣的值。

為了支持不同的string, boolean, integer, 和浮點型類型, value 字段的protobuf編碼由壹組 optional 字段組成。壹個值必須包含這些可選字段中的壹個。

壹個圖層必須包含壹個 extent , extent 通過整數坐標描述貼圖的寬度和高度。通過定義 extent 瓦片內的幾何圖形 可以 延展出瓦片的範圍,這樣做通常是為了渲染壹個跨越多個相鄰瓦片的特征。

舉例說明,如果壹個瓦片的 extent 為 4096,這個瓦片的坐標單位為瓦片尺寸的1/4096。包含0的坐標在瓦片左側或上側的邊緣。包含4096的坐標在瓦片右側或下方的邊緣。 1-4095的坐標完全在瓦片範圍內,小於0或者大於4096的坐標完全在瓦片之外。 (1,10) 或 (4095,10) 完全在瓦片內,(0,10) 或 (4096,10) 在瓦片範圍的邊緣, (-1,10) 或 (4097,10)` 則完全在瓦片之外.

feature 必須 包含壹個 geometry 字段。

feature 必須 包含壹個 type 字段,如果幾何類型(Geometry Types)部分所屬

feature 必須 包含壹個 tags 字段,如果存在Feature-level metadata,他們 應該 存儲在 tags 字段。

feature 必須 包含壹個 id 字段。 如果feature包含 id 字段, id 的值 應該 在其所在的圖層內保證唯壹。

矢量瓦片的幾何數據定義在壹個屏幕坐標系中。瓦片的左上角為坐標系的原點(默認顯示)。X軸正方向朝右,Y軸正方向朝下。幾何 坐標 必須為整數。

每個幾何圖形被編碼為32位無符號整數序列並存儲在feature的 geometry 字段中。每個整數要麽是 命令整數 CommandInteger 要麽是參數整數 ParameterInteger . 解釋器把它們解析為壹系列有序操作,來生成模型。

命令中的位置是相對"cursor"的,"cursor"是壹個可以重定義的點。 feature執行第壹個命令時 cursor 在 坐標系的 (0,0) 位置。其他命令有可能移動cursor,去影響後續命令。

CommandInteger 中command ID,用來表示要執行的命令,command count 表示命令要執行的次數。

command ID 存儲在 CommandInteger 的最低3位,取值範圍為[0,7],command count 存儲在 CommandInteger 中剩下的29位, 取值範圍[ 0 , pow(2, 29) - 1 ].

command ID, command count, CommandInteger 三者關系可由以下位操作表示:

command ID用來表示以下命令:

命令用到的參數在 ParameterInteger 後面。 ParameterIntegers 的數量等於命令的參數個數乘以 CommandInteger 的command count。 比如, CommandInteger 有壹個 MoveTo 命令,command count 為 3,那麽在後面根6個 ParameterIntegers 。

ParameterInteger 采用 zigzag 編碼,所以小的正數或者負數都會被編碼成小整數。 parameter value轉 ParameterInteger 公式為:

Parameter values不支持 大於 pow(2,31) - 1 或者小於 -1 * (pow(2,31) - 1) 的值。

解碼 ParameterInteger 的公式:

對所有命令的描述中,初始坐標記作 (cX, cY) ,即 cursor 的坐標。

MoveTo 命令的 command count 為 n , 那麽它後邊必須跟隨 n 對 ParameterInteger 。每對為 (dX, dY) :

LineTo 命令的 command count 為 n , 那麽它後邊必須跟隨 n 對 ParameterInteger 。每對為 (dX, dY) :

任何 (dX, dY) 中 dX 和 dY 禁止 同時為 0 .

ClosePath 命令command count 必須為 1 且不帶 ParameterInteger 。此命令創建壹個從cursor (cX, cY) 開始到起始點結束的線段,來完成POLYGON 幾何圖形中當前的線性環的繪制。

此命令不改變 cursor位置。

在feature中 type 字段來描述 geometry 的類型 ,其值為取自枚舉 GeomType 。以下幾何類型被支持:

不支持幾何圖形集合。

該規範有意留下壹個未知的幾何類型作為選項。 這種幾何類型對編碼器可以選擇實現的實驗幾何類型進行編碼。 這種幾何類型可以作為實驗性的類型被某些編碼器所執行。解碼器可能會忽略這種幾何類型的任何特征。

POINT 類型,表示壹個或多個點的幾何圖形。此類型的命令序列 必須 是壹個command count大於0的 MoveTo 的命令。

如果 POINT 類型的 MoveTo 命令的command count 等於 1,那麽該幾何圖形 壹定 是壹個單點,否則,幾何圖形必須被解釋為多點幾何圖形,其中每壹對 ParameterInteger 為壹個單點。

LINESTRING 類型表示 單個線條的 linestring 或多線條組合的 multilinestring 幾何圖形。此類型的命令序列必須由以下壹個或者多個重復的序列組成 :

如果 LINESTRING 的命令序列只包含壹個 MoveTo 命令,那麽該圖形壹定被解釋為單條線段的幾何圖形 ;否則,該幾何圖形壹定被解釋為多條線段組合的圖形,每壹個 MoveTo 命令表示新線條的起始點。

POLYGON 類型用來表示 單個多邊形或這個組合多邊形的幾何圖形, 每個多邊形僅由壹個外環組成,而外環又包含零個或多個內環。 此類型的命令序列必須由以下壹個或者多個重復的序列組成 :

每壹個 ExteriorRing 和 InteriorRing 必須由以下序列組成:

exterior ring 被定義為線性環,通過 計算公式 計算其面積為正數,在瓦片坐標系中(Y 軸正向朝下, X 軸正向朝右) 外環為順時針順序。

interior ring 被定義為線性環,通過 計算公式 計算其面積為負數,在瓦片坐標系中(Y 軸正向朝下, X 軸正向朝右) 外環為逆時針順序。

如果壹個 POLYGON 類型的命令序列中只有壹個外環那麽它壹定被解釋為壹個多邊形,否則它 壹定 是壹個多邊形組合的圖形,其每壹個內環標示著壹個新多邊形的起點。如果壹個多邊形有內環,它們 必須 跟在它們所屬的多邊形的外環之後。

線性環 必須 是沒有異常幾何點的幾何物體,如自交或自切。 在調用線性環的 ClosePath 命令之前,cursor的位置 不應 與線性環的第壹個點重復,因為這會創建壹個長度為0的線段。 線性環的面積 不應 為零,因為這意味著環上有異常的幾何點。

多邊形幾何形狀 不應 有任何內環相交,內環 必須 由外環包圍。

表示壹個點:

僅需要壹條命令:

表示兩個點分別位於:

這需要兩條命令:

表示由以下點組成的Linestring:

這需要三條命令:

表示兩個Linestring:

需要以下命令:

表示由以下點組成的多邊形:

需要以下命令:

下邊的示例 由兩個多邊形組成 ,其中壹個有壹個洞。多邊形的頂點如下所示。多邊形的順序在這個例子中是 非常 重要的,因為它表示內環和新多邊形之間的區別。

此多邊形需要以下命令:

特征屬性位於feature的 tag 字段,為成對的整數。每壹對中的第壹個整數為 layer 中 keys 的索引(從0開始),用來表示它屬於此特征, 每壹對中的第二個整數為 layer 中 values 的索引(從0開始),用來表示它屬於此特征。每個鍵索引在該特性中 必須 是唯壹的,這樣該特性中的其他屬性對就不會有相同的鍵索引。 壹個特性必須有偶數個 tag 字段。特性 tag 自動中的鍵和值分別不能大於等於 keys values 集合元素的數量。

例如, 壹個 GeoJSON 特征:

可以被構造為這樣:

記住,幾何形狀的精確值會根據貼圖的投影和範圍而不同。

  • 上一篇:請問BeforeDate測試用例該怎麽寫?
  • 下一篇:ENE在股票是什麽指標
  • copyright 2024編程學習大全網