Newer
Older
KaiFengPC / src / utils / gis / NewFiberMapUtils.js
@zhangdeliang zhangdeliang on 13 Jul 10 KB update
import request from '../request';

import rainStation_icon from '@/assets/cesiumMap/legendIcon/rainStation_icon.png';
import spongeFacility_icon from '@/assets/cesiumMap/legendIcon/spongeFacility_icon.png';
import sewageBenZhan_icon from '@/assets/cesiumMap/legendIcon/sewageBenZhan_icon.png';
import rainBengZhan_icon from '@/assets/cesiumMap/legendIcon/rainBengZhan_icon.png';
import combineBengZhan_icon from '@/assets/cesiumMap/legendIcon/combineBengZhan_icon.png';

import riverFlow from '@/assets/geojson/kaifeng/riverFlow.json';
import cesiumMapLegend from '@/views/sponeScreen/gisMF/cesiumMapLegend.js';
import newfiberVectorLayer from '@/views/sponeScreen/gisMF/newfiberVectorLayer';
import { facilityPumpList } from '@/api/scada/pumpStationInformation';

let mapParams = {
  geojson: {
    point: {
      type: NewFiberMap.Enum.VectorType.ICON,
      options: {
        url: '/static/images/icon.png',
        width: 20,
        height: 20,
        verticalOrigin: Cesium.HorizontalOrigin.RIGHT,
        pixelOffset: [0, -10],
      },
      labelOptions: {
        font: '17px PingFang SC',
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        outlineColor: 'rgba(20,83,154,1)',
        outline: true,
        outlineWidth: 3,
        color: '#ffffff',
        pixelOffset: [0, 25],
        distanceDisplayCondition: [0, 5100],
      },
    },
    warning: {
      type: NewFiberMap.Enum.VectorType.SPECIAL_CIRCLE,
      options: {
        radius: 70,
        material: new NewFiberMap.Material.CircleDiffuseMaterialProperty({
          color: Cesium.Color.fromCssColorString('rgba(255,0,0, .5)'),
          speed: 50,
        }),
      },
    },
    polyline: {
      type: NewFiberMap.Enum.VectorType.POLYLINE,
      options: {
        show: true,
        width: 6,
        material: new Cesium.Spriteline1MaterialProperty(3000, '/static/images/spriteline.png'),
        clampToGround: true,
      },
    },
    polygon: {
      type: NewFiberMap.Enum.VectorType.POLYGON,
      options: {
        width: 1,
        material: 'rgba(46,196,203,0.5)',
        outlineColor: 'rgba(0,244,255,1)',
      },
    },
  },
};
export default class NewFiberMapUtils {
  static defaultParams = {
    keys: {
      //巡查默认专题图
      defaultPatrolDemo: 'defaultPatrolDemo',
      //排水防涝默认专题图
      defaultPreventWaterloggingDemo: 'defaultPreventWaterloggingDemo',
      weather_cloud: 'weather_cloud',
    },
    /* mapParams:{
          geojson:{
              point:{
                  type: NewFiberMap.Enum.VectorType.ICON,
                  options: {
                      url: "/static/images/icon.png",
                      width: 20,
                      height: 20,
                      verticalOrigin: Cesium.HorizontalOrigin.RIGHT,
                      pixelOffset: [0, -10],
                  },
                  labelOptions: {
                      font: "17px PingFang SC",
                      style: Cesium.LabelStyle.FILL_AND_OUTLINE,
                      outlineColor: "rgba(20,83,154,1)",
                      outline: true,
                      outlineWidth: 3,
                      color: "#ffffff",
                      pixelOffset: [0, 25],
                      distanceDisplayCondition: [0, 5100],
                  },
              },
              warning:{
                  type: NewFiberMap.Enum.VectorType.SPECIAL_CIRCLE,
                  options: {
                      radius: 70,
                      material: new NewFiberMap.Material.CircleDiffuseMaterialProperty({
                          color: Cesium.Color.fromCssColorString("rgba(255,0,0, .5)"),
                          speed: 50,
                      }),
                  },
              },
              polyline: {
                  type: NewFiberMap.Enum.VectorType.POLYLINE,
                  options: {
                      show: true,
                      width: 6,
                      material:new Cesium.Spriteline1MaterialProperty(3000,'/static/images/spriteline.png'),
                      clampToGround: true
                  }
              },
              polygon:{
                    type: NewFiberMap.Enum.VectorType.POLYGON,
                    options: {
                      width: 1,
                      material: "rgba(46,196,203,0.5)",
                      outlineColor: "rgba(0,244,255,1)",
                    },
              }
          }
        }*/
  };

  static async defaultPatrolDemo(newfiberMap) {
    const { keys } = NewFiberMapUtils.defaultParams;
    const defaulGeoJSONParams = _.cloneDeep(mapParams.geojson);
    const icons = { ylz: rainStation_icon, hmss: spongeFacility_icon, car: '/images/car.png' };
    NewFiberMapUtils.removeByIds([keys.defaultPatrolDemo]);

    let results = await Promise.all(['/static/json/malfunction.json', '/static/json/track.json'].map(i => request(i)));
    let warningData = _.cloneDeep(results[0]);
    results[0].features.forEach(
      i =>
        (i.properties.style_ = _.cloneDeep({
          id: keys.defaultPatrolDemo,
          name: i.properties.name,
          ...defaulGeoJSONParams.point,
          options: Object.assign(defaulGeoJSONParams.point.options, { url: icons[i.properties.type] }),
        }))
    );
    warningData.features.forEach(i => (i.properties.style_ = { id: keys.defaultPatrolDemo, ...defaulGeoJSONParams.warning }));
    let markers = warningData.features.concat(results[0].features);
    newfiberMap.geojsonToMap(turf.featureCollection(markers));

    newfiberMap.patrolDemoTracks = results[1].features.map(feature => {
      let datas = turf.getCoords(feature.geometry).map(coords => ({ l: coords[0], a: coords[1], height: 10, time: 10 }));
      return new NewFiberMap.Layer.RunningPath({
        paths: datas,
        name,
        newfiberMap,
        options: {
          style: { move: icons.car },
          perSec: 5,
          speed: 10,
          pathColor: [38, 178, 107, 1],
          passPathColor: [89, 91, 93, 1],
          isStart: false,
          isEnd: false,
          fields: { lng: 'l', lat: 'a', height: 'height', time: 'time' },
        },
      });
    });

    let timeout = setTimeout(() => {
      newfiberMap.setView({
        lng: 114.332,
        lat: 34.662,
        heading: 2.281299097855777,
        zoom: 6358.12942752382,
        pitch: -25.2508969308367,
        roll: 0.005453465256790101,
      });
      clearTimeout(timeout);
    }, 4000);
  }

  static async defaultPreventWaterlogging(newfiberMap) {
    const { keys } = NewFiberMapUtils.defaultParams;
    NewFiberMapUtils.removeByIds([keys.defaultPreventWaterloggingDemo]);
    const defaulGeoJSONParams = _.cloneDeep(mapParams.geojson);
    // const icons = {
    //   confluence: sewageBenZhan_icon,
    //   rain_water: rainBengZhan_icon,
    //   sewage_water: combineBengZhan_icon,
    // };
    // let result = await facilityPumpList();
    // let pumpData = result.data.filter(i => i.lon && i.lat && i.geometrys);
    // let points = pumpData.map(i =>
    //   turf.point([i.lon, i.lat].map(Number), {
    //     style_: {
    //       id: keys.defaultPreventWaterloggingDemo,
    //       name: i.pumpName,
    //       ...defaulGeoJSONParams.point,
    //       options: { ...defaulGeoJSONParams.point.options, url: icons[i.pumpType] },
    //     },
    //   })
    // );
    // console.log('points', points);
    // let polygons = pumpData.map(i =>
    //   turf.feature(Terraformer.WKT.parse(i.geometrys), { style_: { id: keys.defaultPatrolDemo, ...defaulGeoJSONParams.polygon } })
    // );
    NewFiberMapUtils.weatherToMap(newfiberMap);
    /*   let modelLegends = cesiumMapLegend.map(i => i.children).flat(Infinity).filter(i => i.layername.includes('Line') && i.type == '3dModel');
        let modelIds = modelLegends.map(i => i.layername);
        let models = newfiberMap.getMap().scene.primitives._primitives.filter(i => modelIds.includes(i.newfiberId));
        if (models.length > 0) {
            models.forEach(i => i.show = true);
        } else {
            modelLegends.forEach(i => i.data.forEach(url => newfiberVectorLayer.add3DModelLayers(newfiberMap, url, i.layername)));
        }*/
    riverFlow.features.forEach(i => (i.properties.style_ = { id: keys.defaultPreventWaterloggingDemo, ...defaulGeoJSONParams.polyline }));
    newfiberMap.geojsonToMap(riverFlow);
    //newfiberMap.geojsonToMap(turf.featureCollection([...points, ...polygons]));
  }

  static async weatherToMap(newfiberMap) {
    const { keys } = NewFiberMapUtils.defaultParams;
    const urls = [
      '/images/weather/QPFRef_202406210650.png',
      '/images/weather/QPFRef_202406210700.png',
      '/images/weather/QPFRef_202406210710.png',
      '/images/weather/QPFRef_202406210720.png',
      '/images/weather/QPFRef_202406210730.png',
      '/images/weather/QPFRef_202406210740.png',
      '/images/weather/QPFRef_202406210750.png',
      '/images/weather/QPFRef_202406210800.png',
      '/images/weather/QPFRef_202406210810.png',
      '/images/weather/QPFRef_202406210820.png',
      '/images/weather/QPFRef_202406210830.png',
      '/images/weather/QPFRef_202406210840.png',
      '/images/weather/QPFRef_202406210850.png',
    ];
    const defaulGeoJSONParams = _.cloneDeep(mapParams.geojson);
    const bbox = [73.49899858945263, 10.228437, 135.08738720258265, 53.56131497236056];
    let polygon = turf.bboxPolygon(bbox);
    let i = 0;
    polygon.properties.style_ = {
      id: keys.weather_cloud,
      ..._.cloneDeep(defaulGeoJSONParams.polygon),
      options: Object.assign(defaulGeoJSONParams.polygon.options, {
        show: false,
        material: new Cesium.ImageMaterialProperty({
          transparent: true,
          alpha: 0.5,
          image: new Cesium.CallbackProperty(function () {
            return urls[i];
          }),
        }),
      }),
    };
    newfiberMap.geojsonToMap(turf.featureCollection([polygon]));
    newfiberMap.weatherInterVal = setInterval(() => {
      i++;
      if (i == urls.length) {
        i = 0;
      }
    }, 1000);
  }

  static removeByIds(ids) {
    const { keys } = NewFiberMapUtils.defaultParams;
    newfiberMap.removeByIds(ids);
    if (ids.includes(keys.defaultPatrolDemo))
      if (newfiberMap.patrolDemoTracks) newfiberMap.patrolDemoTracks.forEach(i => i.destroy()), (newfiberMap.patrolDemoTracks = undefined);
  }
}