openlayers6【六】地圖交互 interaction詳解

1. 什麼是地圖交互 interaction ???

地圖交互功能都是不可見的,如鼠標雙擊、滾輪滑動等,手機設備的手指縮放等。

地圖的交互功能包含很多,如地圖雙擊放大,鼠標滾輪縮放,矢量要素點選,地圖上繪製圖形等等。只要是涉及到與地圖的交互,就會涉及到 intercation 類,它定義了用戶與地圖進行交互的基本要素和事件。下面我們就來看看用戶與地圖都有那些交互,怎麼交互。

2. 簡述地圖交互 interaction

在之前的文章中有寫到一個地圖map,是必須存在的三個屬性 target ,view,layers。那麼地圖是不是還可以存在其他屬性呢?當然是有的,現在這篇就爲大家講解另外的一個屬性 interaction 地圖的交互功能。

可以看到官網的描述:最初添加到地圖的互動。如果未指定, module:ol/interaction~defaults則使用。
也就是說這個屬性不是必須 存在的,默認使用的是 interaction~defaults 內容,並且是已 Array 數組形式存在,也就是說可以像圖層一樣,已多個交互功能承載在地圖上。
在這裏插入圖片描述

3. interaction 介紹

在 OpenLayers 6 中,表達交互功能的基類是 interaction,它是一個虛基類,不負責實例化,交互功能都繼承該基類, OpenLayers 6 中可實例化的子類及其功能如下:

  • doubleclickzoom ,雙擊放大交互功能;
  • draganddrop ,以“拖文件到地圖中”的交互添加圖層;
  • dragbox,拉框,用於劃定一個矩形範圍,常用於放大地圖;
  • dragpan ,拖拽平移地圖;
  • dragrotateandzoom,拖拽方式進行縮放和旋轉地圖;
  • dragrotate ,拖拽方式旋轉地圖;
  • dragzoom ,拖拽方式縮放地圖;
  • draw,繪製地理要素功能;
  • keyboardpan ,鍵盤方式平移地圖;
  • keyboardzoom ,鍵盤方式縮放地圖;
  • select,選擇要素功能;
  • modify ,更改要素;
  • mousewheelzoom ,鼠標滾輪縮放功能;
  • pinchrotate,手指旋轉地圖,針對觸摸屏;
  • pinchzoom ,手指進行縮放,針對觸摸屏;
  • pointer ,鼠標的用戶自定義事件基類;
  • snap,鼠標捕捉,當鼠標距離某個要素一定距離之內,自動吸附到要素。
  • interaction defaults ,規定了默認添加的交互功能;

4. interaction defaults - 默認添加的交互功能

https://openlayers.org/en/latest/apidoc/module-ol_interaction.html

該類規定了默認包含在地圖中的功能,他們都是繼承自 ol.interaction 類。 主要是最爲常用的功能,如縮放、平移和旋轉地圖等,具體功能有如下這些:

  • altShiftDragRotate 是否需要Alt-Shift-拖動旋轉 (布爾值:默認爲true)
  • doubleClickZoom 是否鼠標或手指雙擊縮放地圖(布爾值:默認爲true)。
  • keyboard 是否需要鍵盤交互(布爾值:默認爲true)
  • mouseWheelZoom 是否鼠標滾輪縮放地圖。布爾值 (默認爲true)
  • shiftDragZoom 是否需要Shift拖動縮放(布爾值:默認爲true) 。
  • dragPan 是否鼠標或手指拖拽平移地圖(布爾值:默認爲true)
  • pinchRotate 是否兩個手指旋轉地圖,針對觸摸屏(布爾值:默認爲true)
  • pinchZoom 是否兩個手指旋轉地圖,針對觸摸屏(布爾值:默認爲true)
  • zoomDelta 使用鍵盤或雙擊縮放時的縮放級別增量。(數)
  • zoomDuration 縮放動畫的持續時間(數:以毫秒爲單位)
  • onFocusOnly 僅在地圖具有焦點時進行交互。這會影響MouseWheelZoom和的DragPan相互作用,並且在沒有瀏覽器焦點的地圖需要頁面滾動時很有用(布爾值:默認爲false)

可以看出,很多都兼容移動設備的觸摸屏,鍵盤,鼠標事件,這就是OpenLayers 3以後的改進,跨平臺改進。這些功能都是默認添加的,如果要更改默認的選項,需要在相應的選項設置爲 false。

栗子:如果想去掉默認的 DoubleClickZoom 功能,配置如下:

interactions: ol.interaction.defaults([
    doubleClickZoom: false
]),

這樣就取消雙擊放大功能,去除其他的默認功能,是一樣的。

5. 栗子:dragrotateandzoom (shift + 鼠標拖拽進行縮放和旋轉地圖)

import {
    defaults as defaultInteractions,
    DragRotateAndZoom
} from "ol/interaction";
this.map = new Map({
    target: target,
    layers: tileLayer,
    view: view,
    interactions: defaultInteractions().extend([
        new DragRotateAndZoom()
    ])
});

6. 寫在最後

地圖交互功能內容實在是太多了,包括 鍵盤事件鼠標事件拖拽平移縮放 等一些基本的交互動作,還有後面會寫到的 測距測面,通過draw 繪製,選擇要素 selectmodify,鋪捉吸附的 snap 和鼠標自定義事件 pointer 都構成了openlayers 更加強大的交互功能系統,提升更優的用戶體驗。
通過一系列的交互改變(新增,刪除,更新)數據實現動態交互。

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