import { pulseEffect, reversePolyLine } from '../../utils/utils' import Popup from '@views/popup/Popup' import { LAYERPROPS, LAYERS } from '../../conf/Constants' /** * 根据传的 feature对象定位, * @param code * @param feature */ export const fitBounds = function (feature) { const type = feature.geometry.type switch (type) { case 'Point': var point = feature.geometry.coordinates point = [point[1], point[0]] window.map.setView(point, 17) break case 'MultiLineString': window.map.fitBounds(window.L.geoJSON(feature).getBounds()) break case 'LineString': window.map.fitBounds(window.L.polyline(reversePolyLine(feature)).getBounds()) break } } export const highlight = function (feature, config) { const L = window.L const type = feature.geometry.type window.mapManager.clearHighlight() const highlightLayer = window.mapManager.hightlightLayer if (type === 'MultiLineString') { L.geoJSON(feature, { style: function () { return { fillColor: 'red', color: 'red' } } }).addTo(highlightLayer) } else if (type === 'Point') { // 叠加一个大尺寸的图标 let point = feature.geometry.coordinates point = [point[1], point[0]] if (config) { L.marker(point, { icon: L.icon({ iconUrl: '/assets/images/map/' + config.icon, iconSize: [30, 30], iconAnchor: [15, 15] }) }).addTo(highlightLayer) } pulseEffect(point) const features = window.mapManager.loadWfsDatas(point) openPopup(point, features) } else if (type === 'LineString') { L.polyline(reversePolyLine(feature), { color: 'red' }).addTo(highlightLayer) } } export const openPopup = function (xy, features) { const lt = window.map.latLngToContainerPoint(xy) const datas = popupDatas(features) if (datas.length > 0) { window.$layer.open({ content: { comp: Popup, // 组件 data: { // 传递的参数 datas: datas } }, title: '', // 标题 left: lt.x, top: lt.y }) } } const popupDatas = function (features) { const datas = [] if (features) { for (var i = 0; i < features.length; i++) { const feature = features[i] const id = feature.id const properties = feature.properties const ids = id.split('.') const propValues = LAYERPROPS[ids[0]] const contents = {} for (const k in properties) { if (propValues[k]) { contents[propValues[k]] = properties[k] } } datas.push({ title: LAYERS[ids[0]], name: feature.id, content: contents }) console.log(properties) } } return datas } export const getLayer = function (layerId, id) { const layer = this.layers[layerId] if (layer) { layer.eachLayer(function (layer) { const layers = layer.getLayers() for (var i = 0; i < layers.length; i++) { const lay = layers[i] const feature = lay.feature if (feature.id === id) { return lay } } }) } return null }