Newer
Older
smartwell_front / src / components / Mars3D / utils / ArcGisWfsLayer.js
wangxitong on 22 Jan 2024 6 KB 总览
import * as mars3d from 'mars3d'
import Vue from 'vue'
import {decoration1} from "@jiaminghi/data-view";

/**
 *  三维管线
 * @param index gis图层编号
 * @param color 管线颜色
 * @param name 图层名称
 * @param radius 管径
 * @returns {ArcGisWfsLayer}
 */
export function polylineVolumeC(index, color, name, radius, height='', where='1<>1', minimumLevel) {
  const wfsLayer3D = new mars3d.layer.ArcGisWfsLayer({
    enablePickFeatures: false,
    id: index,
    name,
    where,
    url: Vue.prototype.baseConfig.arcgisUrl + index,
    minimumLevel,
    maximumLevel: 30,
    // symbol: function(attr, style, feature) {
    //   console.log(attr, style, feature)
    //   feature.geometry.coordinates[0].push(-1.5)
    //   feature.geometry.coordinates[1].push(-1.5)
    // },
    // graphicOptions : {
    //   color: color,
    //   shape: 'pipeline',
    //   radius: radius
    // },
    symbol: {
      type: 'polylineVolumeC',
      styleOptions: {
        color: color,
        shape: 'pipeline',
        radius: 0.5,
        setHeight: 30,
      },
      // callback: function(attr, styleOpt) {
      //   return { setHeight: 20, height: 20 }
      // }
    },
    popup: 'all'
  }).bindPopup(function(event) {
    if(!event.graphic.attr.起始埋深.toString().endsWith('(m)')) {
      event.graphic.attr.起始埋深 += '(m)'
      event.graphic.attr.终止埋深 += '(m)'
      if(event.graphic.attr.hasOwnProperty('起始管顶高')) {
        event.graphic.attr.起始管顶高 += '(mm)'
        event.graphic.attr.终止管顶高 += '(mm)'
        event.graphic.attr.起始地面高 += '(mm)'
        event.graphic.attr.终止地面高 += '(mm)'
      } else if(event.graphic.attr.hasOwnProperty('起始管底')) {
        event.graphic.attr.起始管底 += '(mm)'
        event.graphic.attr.终止管底 += '(mm)'
        event.graphic.attr.起始地面 += '(mm)'
        event.graphic.attr.终止地面 += '(mm)'
      }

    }
    return mars3d.Util.getTemplateHtml({
      template: 'all',
      attr: event.graphic.attr
    })
  })
  window.map.addLayer(wfsLayer3D)
  return wfsLayer3D
}


// 章丘三维管线
export function polylineVolumeP(index, color, name, radius, height='', where='1<>1') {
  const wfsLayer3D = new mars3d.layer.ArcGisWfsLayer({
    enablePickFeatures: false,
    name,
    where,
    url: Vue.prototype.baseConfig.arcgisUrl + index,
    symbol: {
      type: 'polylineVolumeP',
      styleOptions: {
        color: color,
        shape: 'pipeline',
        radius: radius
      },
      callback: function(attr, styleOpt) {
        if(height === ''){
          var val = { attr }.attr
          height = -(Number(val.起始埋深) + Number(val.终止埋深)) / 2
        }
        return { setHeight: height, height }
      }
    },
    popup: 'all'
  }).bindPopup(function(event) {
    if(!event.graphic.attr.起始埋深.toString().endsWith('(m)')) {
      event.graphic.attr.起始埋深 += '(m)'
      event.graphic.attr.终止埋深 += '(m)'
      if(event.graphic.attr.hasOwnProperty('起始管顶高')) {
        event.graphic.attr.起始管顶高 += '(mm)'
        event.graphic.attr.终止管顶高 += '(mm)'
        event.graphic.attr.起始地面高 += '(mm)'
        event.graphic.attr.终止地面高 += '(mm)'
      } else if(event.graphic.attr.hasOwnProperty('起始管底')) {
        event.graphic.attr.起始管底 += '(mm)'
        event.graphic.attr.终止管底 += '(mm)'
        event.graphic.attr.起始地面 += '(mm)'
        event.graphic.attr.终止地面 += '(mm)'
      }

    }
    return mars3d.Util.getTemplateHtml({
      template: 'all',
      attr: event.graphic.attr
    })
  })
  window.map.addLayer(wfsLayer3D)
  return wfsLayer3D
}


/**
 *  二维管线
 * @param index gis图层编号
 * @param color 管线颜色
 * @param name 图层名称
 * @param width 宽度
 * @returns {ArcGisWfsLayer}
 */

export function polylineC(index, color, name, width, where='1<>1') {
  const wfsLayer = new mars3d.layer.ArcGisWfsLayer({
    enablePickFeatures: false,
    name,
    where,
    url: Vue.prototype.baseConfig.arcgisUrl + index,
    // maximumLevel: 19,
    symbol: {
      type: 'polylineC',
      styleOptions: {
        color: color,
        width: width,
        hasShadows: false
      }
    },
    popup: 'all'
  }).bindPopup(function(event) {
    if(!event.graphic.attr.起始埋深.toString().endsWith('(m)')) {
      event.graphic.attr.起始埋深 += '(m)'
      event.graphic.attr.终止埋深 += '(m)'
      event.graphic.attr.起始管顶高 += '(mm)'
      event.graphic.attr.终止管顶高 += '(mm)'
      event.graphic.attr.起始地面高 += '(mm)'
      event.graphic.attr.终止地面高 += '(mm)'
    }
    return mars3d.Util.getTemplateHtml({
      template: 'all',
      attr: event.graphic.attr
    })
  })
  window.map.addLayer(wfsLayer)
  return wfsLayer
}


/**
 * 添加三位模型modelP;赣州井
 */
export function modelP(index, name, model = '', scale, where) {
  const wfsLayer3D = new mars3d.layer.ArcGisWfsLayer({
    // enablePickFeatures: false,
    name,
    where,
    url: Vue.prototype.baseConfig.arcgisUrl + index,
    minimumLevel: 19,
    maximumLevel: 30,
    symbol: {
      type: 'modelP',
      styleOptions: {
        scale,
        url: model,
        setHeight: 10,
      },
      // callback: function(attr, styleOpt) {
      //   return { setHeight: 20, height: 20 }
      // }
      // callback: function(attr, styleOpt) {
      //   if(height === ''){
      //     var val = { attr }.attr
      //     height = -(Number(val.起始埋深) + Number(val.终止埋深)) / 2
      //   }
      //   return { setHeight: height, height }
      // }
    },
    popup: 'all'
  }).bindPopup(function(event) {
    return mars3d.Util.getTemplateHtml({
      template: 'all',
      attr: event.graphic.attr
    })
  })
  window.map.addLayer(wfsLayer3D)
  return wfsLayer3D
}


/**
 * 添加楼宇
 */
export function building() {
  const wfsLayer = new mars3d.layer.ArcGisWfsLayer({
    name: '建筑物面矢量图层',
    url: '',
    // minimumLevel: changeLevel,
    symbol: {
      type: 'polygonC',
      styleOptions: {
        color: 'rgb(52,125,246)',
        outline: false,
        opacity: 0.8
      },
      callback: function(attr, styleOpt) {
        var val = { attr }.attr
        console.log(attr)
      }
    },
    buildings: {
      height: 100
    }
  })
  window.map.addLayer(wfsLayer)
}

/**
 * 添加原始样式,赣州二维管线加速
 */
export function ArcGisLayer(url, index, name) {
  const arcGisLayer = new mars3d.layer.ArcGisLayer({
    name,
    url,
    layers: index,
    popup: "all"
  })
  window.map.addLayer(arcGisLayer)
  return arcGisLayer
}