mapConfig: {
map: {
id: 'baseMap',
view: {
center: {
coord: [经度, 纬度],
},
zoom: 10,
maxZoom: 15,
},
events: ['singleclick', 'pointermove'],
},
baseLayer: [
{
name: 'xxx',
source: {
type: 'XYZ',
projection: 'GCJ02',
url: 地图链接
}
}
],
interactions: {
altShiftDragRotate: false,
pinchRotate: false,
}
- 出现问题:公司重新封装了openlayers为地图组件库但是并未实现交互的修改,仅暴露singleclick点击事件等,因此上述配置不生效
- 解决方案一:判断交互并禁用
import { olData } from '@/utils/公司地图组件库打包后的min.js';
import DragRotate from 'ol/interaction/DragRotate';
import PinchRotate from 'ol/interaction/PinchRotate';
let map = await olData.getMap('baseMap');
let interactionsArr = map.getInteractions().getArray();
interactionsArr.forEach((item: any, index: number) => {
if (item instanceof DragRotate || item instanceof PinchRotate) {
item.setActive(false);
}
- 失败原因:实际上组件库中是重新new了一个olMap,也就是说实质上页面上地图对象和引入的交互事件所在的对象并非同一个,不在同一原型链上,所以instanceof的判断结果全部为false
- 解决方案二:查看官网交互相关内容 官网地址发现交互默认的ol/interaction.defaults交互顺序是固定的,也就是说找到相应的交互事件所在的位置并禁止即可,也就是DragRotate,PinchRotate所对应的就是禁止index为0和3的事件
let interactionsArr = map.getInteractions().getArray();
interactionsArr.forEach((item: any, index: number) => {
if (index == 0 || index == 3) {
item.setActive(false);
}
});