# 矢量数据图层

vc-vector-layer 组件用于加载矢量数据图层,需要设置数据源和数据加载的样式,在样式中可以设置属性的过滤以及计算,并且渲染参数也可以采用数据的属性值。目前仅支持geojson格式的数据。

# 示例

# 添加矢量数据图层到场景

# 预览

收起
  <template>
    <div class="viewer">
      <vc-viewer @ready="ready" :shouldAnimate="true" >
        <vc-vector-layer  ref="layer1" :show="layerShow"  :layerStyle="layerConfig" @selectedChanged="selectedEntityChanged" @unSelectedChanged="unSelectedChanged"  :locationLayer="true" :mode="0" :layerSource="layerSource">
        </vc-vector-layer>
        <vc-vector-layer  @selectedChanged="selectedEntityChanged" @unSelectedChanged="unSelectedChanged" :layerStyle="layerConfig1" :layerSource="layerSource1" >
        </vc-vector-layer>
      </vc-viewer>
      <div class="demo-tool">
        <el-button size="small" class="md-raised md-accent"  @click="changeShow">切换显隐</el-button>
        <el-button size="small" class="md-raised md-accent" @click="changeStyle">切换样式</el-button>
        <el-button size="small" class="md-raised md-accent" @click="highlight">高亮或者移除高亮</el-button>
        <el-button size="small" class="md-raised md-accent"  @click="flyTo">定位</el-button>        
      </div>
    </div>
  </template>

  <script>
    export default {
      data () {
        return {
          layerConfig: undefined,
          layerSource: undefined,
          layerSource1: undefined,
          layerShow:true,
          layerConfig1: undefined,
          count:0
        }
      },
      methods: {
        flyTo(){
            this.$refs.layer1.flyTo()
        },         
        highlight(){
          if(this.count%2===0)
          this.$refs.layer1.highLightFeature({street:"中和街道"},0)
          else{
          this.$refs.layer1.removeFeatureHightLight({street:"中和街道"},0)
          }
          this.count++
        },
        changeShow(){
          this.layerShow=!this.layerShow
        },
        changeStyle(){
          if(this.layerConfig.type==="line"){
            this.layerConfig={
                "type":"fill",   
                "fillColor":{
                  "base":"white",//默认设置,不可缺省
                  "filters":[//只做属性过滤,每个filter支持的过滤方式同stops中filter支持的过滤形式
                      {
                          "filter":["===","street","桂溪街道"],
                          "value":"#10069F"
                      },
                      {
                          "filter":["===","street","中和街道"],
                          "value":"#FF5C39"
                      }                         
                  ]
                },//填充样式 颜色值,rgb,rgba,#fffff,hls的均可
                "stroke":false,// 是否显示边框线
                "strokeWidth":1,//边框粗细
                "strokeColor": "red",//边框颜色                
                "height":0,
                "duration":3,
                "extrudedHeight":{
                  "base":10,//默认设置,不可缺省
                  "filters":[//只做属性过滤,每个filter支持的过滤方式同stops中filter支持的过滤形式
                      {
                          "filter":["===","street","桂溪街道"],
                          "value":100
                      },
                      {
                          "filter":["===","street","中和街道"],
                          "value":500
                      }                         
                  ]
              },
                "animation":{
                  "base":false,//默认设置,不可缺省
                  "filters":[//只做属性过滤,每个filter支持的过滤方式同stops中filter支持的过滤形式
                      {
                          "filter":["===","street","桂溪街道"],
                          "value":false
                      },
                      {
                          "filter":["===","street","中和街道"],
                          "value":false
                      }                         
                  ]}
              }                                   
          }else {
              this.layerConfig={
                "type":"fill",   
                "fillColor":"#FF5C39",//填充样式 颜色值,rgb,rgba,#fffff,hls的均可
                "stroke":true,// 是否显示边框线
                "strokeWidth":1,//边框粗细
                "strokeColor": "rgb(0,150,243)",//边框颜色
              }            
          }          
        },
        selectedEntityChanged(id){
          console.log("selected",id)
        },
        unSelectedChanged(id){
          console.log("unSelected",id)
        },
        ready (cesiumInstance) {
          this.cesiumInstance = cesiumInstance
          const {Cesium, viewer} = this.cesiumInstance
          viewer.scene.debugShowFramesPerSecond =true
          let _this = this
          this.layerConfig={
              "type":"line",   
              "lineColor":{
                "base":"white",//默认设置,不可缺省
                "filters":[//只做属性过滤,每个filter支持的过滤方式同stops中filter支持的过滤形式
                    {
                        "filter":["===","street","桂溪街道"],
                        "value":"#10069F"
                    },
                    {
                        "filter":["===","street","中和街道"],
                        "value":"#FF5C39"
                    }                         
                ]
              },//填充样式 颜色值,rgb,rgba,#fffff,hls的均可
              "lineWidth":3,//边框粗细
              "lineStyle": "solid",//边框颜色
          }            
          this.layerSource="/statics/SampleData/lineData/grid.json"   
          this.layerSource1="/statics/SampleData/heatmapData/xx.json"        
          this.layerConfig1={
              "type":"text",
               "text-Feild":"'城市名称:'+${name}+'_'+Math.floor(${GDP})+'万元'" ,  
              "labelColor":{
                "base":"black",//默认设置,不可缺省
                "filters":[//只做属性过滤,每个filter支持的过滤方式同stops中filter支持的过滤形式
                    {
                        "filter":["<=","GDP",50],
                        "value":"#10069F"
                    },
                    {
                        "filter":[">","GDP",50],
                        "value":"#FF5C39"
                    }                         
                ]
              },//填充样式 颜色值,rgb,rgba,#fffff,hls的均可
              "labelPixelOffset":{//文字的偏移量,单位是像素,x正方向向右,y正方向向上
                "x": 5,
                "y": 5
            },
            "labelStyle":2,//0,1,2分别是填充,边框和及填充也带有边框
            "strokeWidth":1,//边框粗细
            "strokeColor": "rgb(255,255,2)",//边框颜色
            "labelHorizontalOrigin": 0,//0,1,-1分别为中间、左、右水平对齐方式
            "labelVerticalOrigin": 0,//0,1,2,-1分别为中、下,baseline、上的垂直对齐方
            }
        },
      }
    }
  </script>

# 属性

属性名 类型 默认值 描述
layerStyle Object undefined optional 指定图层的样式。
layerSource Object undefined optional 指定图层的数据源地址。
filter Array undefined optional 指定图层的过滤对象。
layerName String "" optional 指定图层名称。
mode Number 0 optional 指定图层加载方式,0 是 dataSource,1 是 primitive 形式的。
show Boolean true optional 是否显示图层

# 方法

方法名 参数 描述
setDataSource source 设置数据源对象,比较大的数据源对象的时候建议采用此方法,避免 VUE 的大对象的监听引起的卡顿
highLightFeature filters,type 设置高亮要素,其中 filters 为过滤数据的过滤属性对象,type 为过滤类型,1 为单个,0 为多个
removeFeatureHightLight filters,type 移除高亮要素,其中 filters 为过滤数据的过滤属性对象,type 为过滤类型,1 为单个,0 为多个

# 事件

事件名 参数 描述
ready {Cesium, viewer} 该组件渲染完毕时触发,返回 Cesium 类, viewer 实例。