openlayers 6【三】 地圖視圖 View 詳解

官方文檔:https://openlayers.org/en/latest/apidoc/module-ol_View-View.html

上篇文章講到 ,初始化map地圖,必備的三要素之一就是視圖(view),這個對象主要是控制地圖與人的交互,如進行縮放,調節分辨率、地圖的旋轉等控制。也就是說每個 map對象包含一個 view對象部分,用於控制與用戶的交互。

1. view 屬性

center 模組:ol / coordinate〜Coordinate

視圖的初始中心。如果未設置用戶投影,則使用projection選項指定中心的座標系。如果未設置,則不會獲取圖層源,但是稍後可以使用設置中心#setCenter

constrainRotation 布爾 | 數字 (默認爲true)

旋轉約束。 false表示沒有約束。true表示沒有約束,但會在接近零的位置捕捉​​到零。數字將旋轉限制爲該數量的值。例如,4將旋轉限制爲0、90、180和270度。

enableRotation 布爾值 (默認爲true)

啓用旋轉。如果爲false,則使用始終將旋轉設置爲零的旋轉約束。constrainRotation如果enableRotation爲,則 該選項無效false

extent 模塊:ol /範圍〜範圍

限制視圖的範圍,換句話說,超出此範圍的任何內容都無法在地圖上看到。

constrainOnlyCenter 布爾值 (默認爲false)

如果爲true,則範圍約束將僅適用於視圖中心,而不適用於整個範圍。

smoothExtentConstraint 布爾值 (默認爲true)

如果爲true,則範圍約束將被平滑應用,即允許視圖稍微超出給定範圍extent

maxResolution

用於確定分辨率約束的最大分辨率。它與minResolution(或 maxZoom)和一起使用zoomFactor。如果未指定,則以投影的有效範圍適合256x256 px瓦片的方式進行計算。如果投影是“球形墨卡託”(默認),則maxResolution默認爲40075016.68557849 / 256 = 156543.03392804097

minResolution

用於確定分辨率約束的最小分辨率。它與maxResolution(或 minZoom)和一起使用zoomFactor。如果未指定,則假定使用29個縮放級別(係數爲2)進行計算。如果投影是“球形墨卡託”(默認),則minResolution默認爲 40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253

maxZoom 數字 (默認爲28)

用於確定分辨率約束的最大縮放級別。它與minZoom(或 maxResolution)和一起使用zoomFactor。請注意,如果minResolution還提供,則優先於maxZoom

minZoom 數字 (默認爲0)

用於確定分辨率約束的最小縮放級別。它與maxZoom(或 minResolution)和一起使用zoomFactor。請注意,如果maxResolution還提供,則優先於minZoom

multiWorld 布爾值 (默認爲false)

如果false視圖受到限制,則只能看到一個世界,並且無法平移邊緣。如果true地圖可能在低縮放級別顯示多個世界。僅在projection全局時使用。請注意,如果extent還提供,則它具有優先權。

constrainResolution 布爾值 (默認爲false)

如果爲true,則在交互後,視圖將始終設置爲最接近的縮放級別。false表示允許中間縮放級別。

smoothResolutionConstraint 布爾值 (默認爲true)

如果爲true,則分辨率最小值/最大值將被平滑應用,即允許視圖稍微超過給定的分辨率或縮放範圍。

showFullExtent 布爾值 (默認爲false)

允許縮小視圖以顯示完整的配置範圍。默認情況下,在爲視圖配置了範圍時,用戶將無法縮小,因此視口在任一維度上都超出了範圍。這意味着如果視口比配置範圍的縱橫比高或寬,則整個範圍可能不可見。如果showFullExtent爲true,則用戶將能夠進行縮小,以使視口超過配置的範圍的高度或寬度,但不能同時超過兩者,從而可以顯示整個範圍。

projection 模塊:ol / proj〜ProjectionLike (默認爲'EPSG:3857')

投影。默認值爲球形墨卡託。

resolution

視圖的初始分辨率。單位是projection每像素的單位(例如米/像素)。設置此方法的替代方法是set zoom。如果既未zoom定義也未定義圖層源,則可以稍後使用#setZoom或進行設置#setResolution

resolutions 數組。<數字>

確定分辨率約束的分辨率。如果設置了maxResolutionminResolution, minZoommaxZoom,和zoomFactor選項都將被忽略。

rotation 數字 (默認爲0)

視圖的初始旋轉(弧度)(順時針正旋轉,0表示北)。

zoom

僅在resolution未定義的情況下使用。縮放級別,用於計算視圖的初始分辨率。

zoomFactor 數字 (默認爲2)

縮放係數,用於計算相應的分辨率。

1.1 view 常見的幾個屬性

  • center 是一個座標[x, y],表示地圖視圖的中心位置;

  • projection 是地圖的投影座標系統,默認爲'EPSG:3857';

  • zoom 表示地圖初始的縮放級別;

2. view 方法

 2.1 view 類的方法主要是針對 view 的屬性的 get 和 set 方法,其基本的方法很多,我們將常用的方法進行歸類:

紅色爲常用的方法

get類:

  • getCenter 獲取視圖中心,返回一個地圖中心的座標。
  • getZoom 獲取當前的縮放級別。如果視圖不限制分辨率,或者正在進行交互或動畫,則此方法可能返回非整數縮放級別。
  • getMaxZoom 獲取視圖的最大縮放級別。
  • getMinZoom 獲取視圖的最小縮放級別。
  • getAnimating 確定視圖是否處於動畫狀態。
  • getInteracting 確定用戶是否正在與視圖進行交互,例如平移或縮放。
  • getKeys 獲取對象屬性名稱的列表。
  • getMaxResolution 獲取視圖的最大分辨率。
  • getMinResolution 獲取視圖的最低分辨率
  • getProjection 獲取地圖使用的”投影座標系統”,如EPSG:4326;
  • getProperties 獲取具有所有屬性名稱和值的對象。
  • getResolution 獲取視圖分辨率。
  • getResolutionForExtent 獲取提供的範圍(以地圖單位爲單位)和大小(以像素爲單位)的分辨率。
  • getResolutionForZoom 獲取縮放級別的分辨率。
  • getResolutions 獲取視圖的分辨率。這將返回傳遞給View的構造函數的分辨率數組,如果未給出則未定義。
  • getRevision 獲取此對象的版本號。每次修改對象時,其版本號都會增加。
  • getRotation 獲取視圖旋轉。
  • getZoomForResolution 獲取分辨率的縮放級別。

set類:

  • setCenter  設置當前視圖的中心。任何範圍限制都將適用。
  • setConstrainResolution 設置視圖是否應允許中間縮放級別。
  • setZoom 縮放到特定的縮放級別。任何分辨率限制都將適用。
  • setMaxZoom 爲視圖設置新的最大縮放級別。
  • setMinZoom 爲視圖設置新的最小縮放級別。
  • setProperties 設置鍵值對的集合。請注意,這會更改所有現有屬性並添加新屬性(不會刪除任何現有屬性)。
  • setResolution 設置此視圖的分辨率。任何分辨率約束都將適用。
  • setRotation 設置該視圖的旋轉角度。任何旋轉約束都將適用。

2.2 其他類:

  • rotate 接受兩個參數,旋轉角度數(rotation)和旋轉中心(opt_anchor,可選),將地圖圍繞 opt_anchor 旋轉 rotation 角度;
  • ifDef 檢查地圖的中心和分辨率是否已經設置,都設置返回 true,否則返回 false;
  • fitExtent(extent, size),接受兩個參數:extent 和 size,extent 類型是 ol.Extent – [left, bottom, right, top],size由map.getSize()獲取;該功能類似於 ArcGIS 的縮放到圖層功能,將地圖的view 縮放到 extent 區域可見的合適尺度;
  • fitGeometry(geometry, size, opt_options),參數是地理要素,地圖尺寸和可選參數;根據給定的地理要素,將 view 縮放到適合地理要素顯示的尺寸;

3. 寫在後面

view主要控制地圖與用戶的最基本的交互,每個 map 對象必須包含一個 view 對象,也就是說每個 map 必須都支持縮放、平移等基本交互動作。

後面會將圖層Layers的詳解!!! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章