YBFACC / blog

仅记录个人学习使用
3 stars 0 forks source link

openlayer MapBrowserEvent on feature #55

Open YBFACC opened 1 month ago

YBFACC commented 1 month ago
  1. 选择 on 方法
    • destroy 时:需要自己手动清除
    • select/unSelect 切换时:样式手动实现
    • create 时:自行编写范围
      
      import  { unByKey } from 'ol/Observable.js'

const eventKey = map.on('click', (e) => { // 操作

       this.forEachFeatureAtPixel(event.pixel, (feature: Feature, layer: Layer<Source, LayerRenderer<any>>, simpleGeometry: SimpleGeometry) => {
          // 向 feature 派发事件
            feature.dispatchEvent('click')
        })

}) // 监听事件 feature.on('click',()=>{})

unByKey(eventKey)


2. 选择 Interaction 组件
- destroy 时:map 提供 getInteractions().clear() 处理
- select/unSelect 切换时:样式自动切换
- create 时:就需要指定 layer[] 或者 不指定(靠默认全局 + filter 来实现)。features(Collection 在内部实现了监听) 可后续添加
```typescript
import select from 'ol/interaction/Select'

const selectInteraction = new select({
    layers: [ /** 交互的图层 */],
    style: (feature) => {
        return /** 交互的样式 */
    }
})

map.removeInteraction(selectInteraction)
map.getInteractions().clear()
  1. 个人推荐:
    • 选中时 样式切换优先使用 Interaction
    • 当 feature 很多时,优先 Interaction
    • 减少 pointermove 事件的触发
      condition: (mapBrowserEvent) => {
      // 减少触发
      return mapBrowserEvent.type == 'pointermove' && Math.random() > 0.7
      }