| | |
| | | import { pulseEffect, reversePolyLine } from '../../utils/utils' |
| | | import { pulseEffect } from '../../utils/utils' |
| | | import Popup from '@views/popup/Popup' |
| | | import { LAYERPROPS, LAYERS } from '../../conf/Constants' |
| | | |
| | |
| | | */ |
| | | export const locate = function (feature, config, filter) { |
| | | fitBounds(feature) |
| | | highlight(feature, config) |
| | | highlight(feature, config.icon) |
| | | setTimeout(() => { |
| | | const centerPoint = getCenterPoint(feature) |
| | | const params = { LAYERS: config.layerGroup || config.typeName, QUERY_LAYERS: config.layerGroup || config.typeName } |
| | |
| | | */ |
| | | 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 |
| | | if (type === 'Point') { |
| | | var point = feature.geometry.coordinates |
| | | point = [point[1], point[0]] |
| | | window.map.setView(point, 17) |
| | | } else { |
| | | window.map.fitBounds(window.L.geoJSON(feature).getBounds()) |
| | | } |
| | | } |
| | | |
| | | export const highlight = function (feature, icon) { |
| | | /* if (Array.isArray(feature)) { |
| | | for (let i = 0; i < feature.length; i++) { |
| | | highlight(feature[i], icon) |
| | | } |
| | | } else { */ |
| | | window.mapManager.clearHighlight() |
| | | 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') { |
| | | if (type === 'Point') { |
| | | // 叠加一个大尺寸的图标 |
| | | let point = feature.geometry.coordinates |
| | | point = [point[1], point[0]] |
| | |
| | | }).addTo(highlightLayer) |
| | | } |
| | | pulseEffect(point) |
| | | } else if (type === 'LineString') { |
| | | L.polyline(reversePolyLine(feature), { color: 'red' }).addTo(highlightLayer) |
| | | } else { |
| | | L.geoJSON(feature, { |
| | | style: function () { |
| | | return { |
| | | color: 'red' |
| | | } |
| | | } |
| | | }).addTo(highlightLayer) |
| | | } |
| | | } |
| | | |
| | |
| | | export const openPropsPopup = function (xy, features) { |
| | | const lt = window.map.latLngToContainerPoint(xy) |
| | | const datas = popupDatas(features) |
| | | console.log(datas) |
| | | if (datas.length > 0) { |
| | | window.$layer.open({ |
| | | content: { |
| | |
| | | } |
| | | |
| | | export const getCenterPoint = function (feature) { |
| | | const L = window.L |
| | | const type = feature.geometry.type |
| | | var point = [] |
| | | switch (type) { |
| | | case 'Point': |
| | | point = feature.geometry.coordinates |
| | | break |
| | | case 'MultiLineString': |
| | | var coordinates = feature.geometry.coordinates |
| | | var coordinate = coordinates[parseInt(coordinates.length / 2)][0] |
| | | if (coordinate.length > 2) { |
| | | point = [coordinate[0], coordinate[1]] |
| | | } |
| | | break |
| | | case 'LineString': |
| | | var lineString = feature.geometry.coordinates |
| | | point = lineString[parseInt(lineString.length / 2)][0] |
| | | break |
| | | var coordinates = feature.geometry.coordinates |
| | | |
| | | if (type === 'Point') { |
| | | return [coordinates[1], coordinates[0]] |
| | | } else { |
| | | const center = L.geoJSON(feature, {}).getBounds().getCenter() |
| | | return [center.lat, center.lng] |
| | | } |
| | | if (point.length > 2) { |
| | | point.splice(2, 1) |
| | | } |
| | | return point.reverse() |
| | | } |
| | | |
| | | const popupDatas = function (features) { |
| | | const datas = [] |
| | | console.log(features) |
| | | if (features) { |
| | | for (var i = 0; i < features.length; i++) { |
| | | const feature = features[i] |
| | |
| | | if (!propValues) { |
| | | continue |
| | | } |
| | | if (id.indexOf('pipesegment') >= 0) { |
| | | continue |
| | | } |
| | | for (const k in properties) { |
| | | if (propValues[k]) { |
| | | contents[propValues[k]] = properties[k] |
| | | } |
| | | } |
| | | datas.push({ |
| | | const data = { |
| | | title: LAYERS[ids[0]], |
| | | name: feature.id, |
| | | content: contents |
| | | }) |
| | | content: contents, |
| | | feature: feature |
| | | } |
| | | if (id.indexOf('pipeline') >= 0) { |
| | | data.tableList = listPipeSection(features, properties.subchacode || properties.pipecode) |
| | | } |
| | | datas.push(data) |
| | | console.log(properties) |
| | | } |
| | | } |
| | | return datas |
| | | } |
| | | |
| | | // 管线信息绑定所属管段 |
| | | export const listPipeSection = function (features, code) { |
| | | const list = [] |
| | | if (features) { |
| | | for (var i = 0; i < features.length; i++) { |
| | | const feature = features[i] |
| | | const id = feature.id |
| | | if (id.indexOf('pipesegment') < 0) { |
| | | continue |
| | | } |
| | | const properties = feature.properties |
| | | if (properties.pipecode === code) { |
| | | list[list.length] = properties |
| | | } |
| | | } |
| | | } |
| | | return list |
| | | } |
| | | |
| | | export const getLayer = function (layerId, id) { |
| | | const layer = this.layers[layerId] |
| | | |