【Mars3d 基础 - 图层】种类和使用

地图内是由各种不同的图层来叠加显示,形成整个三维地图场景的。 图层是地图中很重要的概念,也是平台内很重要的组成部分。

一、常见的图层

1. geojsonlayer

可直接加载 GeoJSON数据,非常方便;适合一次性加载同类型的数据

1.1、id - 具有唯一性,所有的图层和矢量对象都不能重复,可以不设置,内部会自动赋值的;

后面可以根据该 id 获取该图层;

1.2、symbol - 设置矢量数据

symbol .type - 设置矢量数据的类型,geojson里面的数据都会以该类型呈现;

如果是不同类型的话,比如说下面的json数据,就是各不相同的数量数据,设置merge:true,就好,不需要设置type;

symbol.styleOptions - 设置矢量数据的样式,里面的具体参数需要根据你设置的类型

1.3、如果只是简单的设置,设置symbol就基本可以了;

有特定需求的话,还有 onCreateGraphic 参数 - 自定义设置创建矢量对象;

// 加载展示 GeoJSON数据 的图层  
const geoJsonLayer = new mars3d.layer.GeoJsonLayer({
   // 通过id获取该图层,一个图层对应一个id,不可重复
    id:2021,
    name: "标绘示例数据",
    url: "//data.mars3d.cn/file/geojson/mars3d-draw.json", 
    popup: "{type} {name}", // 弹窗,可以自定义
    queryParameters: {
      token: "mars3d" // 可以传自定义url参数,如token等
    },
    symbol: {
      merge: true, // 是否继承geojson里的样式属性
      //type:"polyline",// 矢量数据的类型
      styleOptions: {
        // 高亮时的样式
        highlight: {
          type: "click",
          opacity: 0.9
        }
      }
    },
    flyTo: true // 定位至加载矢量数据的位置
  })
  map.addLayer(geoJsonLayer)

2、矢量图层

主要用于业务数据,添加 点、线、面等矢量数据的;

hasEditor - 是否可编辑 , 点击图层内的矢量数据时,可以对该对象进行编辑;

isAutoEditing - 完成标绘时是否自动启动编辑,这个是需要建立在图层为可编辑状态(hasEditor:true)下;注意 ,这里完成标绘时 ,指的是 graphicLayer.startDraw 方法;

图层在添加、删除、修改矢量对象时进行一些操作,需要对图层绑定事件;

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技   这个示例大部分的事件绑定都有演示代码

// 创建矢量数据图层  点线面等矢量数据需要在矢量图层上进行添加
const graphicLayer = new mars3d.layer.GraphicLayer({
hasEdit:false,
isAutoEditing:false
})
map.addLayer(graphicLayer)

2.1、添加矢量数据

// 创建矢量数据图层  点线面等矢量数据需要在矢量图层上进行添加
const graphicLayer = new mars3d.layer.GraphicLayer()
map.addLayer(graphicLayer)

// 添加矢量数据 点
const graphic = new mars3d.graphic.PointEntity({
    position: [116.244399, 30.920459, 573.6], // 位置
    style: {
      color: "#ff0000", // 颜色
      pixelSize: 10, // 大小
      outlineColor: "#ffffff", // 外边框的颜色
      outlineWidth: 2, // 外边框的大小
      label: {
        text: "我是原始点", // 注记,
        font_size: 18, // 文字的大小
        color: "#ffffff", // 文字的颜色
        pixelOffsetY: -10, // 文字的偏移量
        distanceDisplayCondition: true, // 是否按视距显示
        distanceDisplayCondition_far: 500000, // 最大距离
        distanceDisplayCondition_near: 0 // 最小距离
      }
    }
  })
  graphicLayer.addGraphic(graphic) // 方法一


// 添加矢量数据 平面
const graphic1 = new mars3d.graphic.PlaneEntity({
    position: [116.282587, 30.859197, 544.31], // 位置
    style: {
      plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Y, 0.0),// 指定平面的法线和距离
      dimensions_x: 2000.0, // 长度
      dimensions_y: 1000.0, // 宽度
      color: "#00ff00", // 颜色
      opacity: 0.4, // 透明度
      // 默认为鼠标移入,也可以指定type:'click'单击高亮),构造后也可以openHighlight、closeHighlight方法来手动调用
      highlight: {
        opacity: 0.9
      }
    }
  })
   graphic1.addTo(graphicLayer) //  方法二

 二、获取图层,

通过id获取图层

const layer = map.getLayerById(2021) ||

const layer = map.getLayer("id",2021) ||

获取所有的图层

const layers =map.getLayers({

basemaps:false // 不包含basemps中配置的所有图层

layers:false // 不包含layers中配置的所有图层

})

判断图层是否添加过

const isHaveLayer = map.hasLayer(2021) // 返回boolean

三、图层的移除和显示隐藏

// 获取图层 在清除图层
const layer = map.getLayerById(2021)

// 移除图层
map.removeLayer(layer )

// 隐藏图层
layer.show = false

// 显示图层
layer.show = true

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值