import { Scene, RasterLayer, MarkerLayer, Marker } from '@antv/l7' import { Map } from '@antv/l7-maps' /** * 初始化创建地图 * @param { string } id * @param { config } object */ export function initMap(id, config) { return new Promise((resolve, reject) => { const scene = new Scene({ id, logoVisible: false, map: new Map({ ...config }) }) window.scene = scene resolve(scene) }) } /** * 添加底图 * 根据数组index值控制图层显示层级 * @param { array } arr */ export function initLayer(arr) { arr.map((item, index) => { const layer = new RasterLayer({ zIndex: index, name: item.name }).source(item.url, { parser: { type: 'rasterTile', tileSize: 256 } }) window.scene.addLayer(layer) }) } /** * 添加自定义点图层 * 数据对象 [{longitude: '', latitude: ''}, {longitude: '', latitude: ''}] * @param { array } arr * 图层配置: { zIndex: 100, name: ''} * @param { object } layerAttr * 自定义模板样式: {widht: '', height:'', ......} * @param { object } style * 事件名称: ['click', 'mouseover'] * @param { array } eventArr */ export function createMarker(arr, config) { const markerLayer = new MarkerLayer(config.layerAttr) arr.map((item) => { // 创建marker if (item.longitude && item.latitude) { const marker = new Marker({ element: createMakerElement(item, config.layerAttr, config.style), extData: item }).setLnglat([item.longitude, item.latitude]) // 绑定鼠标事件 // config.eventArr.map((event) => { // marker.on(event, (e) => { // eventHub.emit(config.layerAttr.name + '-' + event, e) // }) // }) markerLayer.addMarker(marker) } }) window.scene.addMarkerLayer(markerLayer) return markerLayer } /** * 创建模板 * makre的数据源 * @param { object } item * 图层属性:根据图层名称 使用不同的自定义模板 * @param { layerAttr } object * 自定义模板样式和图标名称 * @param { object } style */ export function createMakerElement(item, layerAttr, style) { // 防火分区 if (layerAttr.name === 'accident') { const el = document.createElement('div') el.innerHTML = `
` return el } } export function destoryScene() { window.scene.destroy() }