mars3d显示地图,并且完成切换地图图层的功能,使用隐藏显示去控制图层

如何安装mars3d请看这个链接哈!

我用的是vue3
先引入mars3d

import * as mars3d from "mars3d"

创建地图的变量

let m3d:any; // 地图

在template中定义div,并且id名为cesiumBox(可以自定义)

<div id="cesiumBox" class="model"></div>

在 onMounted 中使用

let mapOptions = {
   scene: {
     center: { 
       lat: 21.210378, // 纬度值
       lng: 110.426257, // 经度值
       alt: 39192.8, // 高度值
       heading: 4.5, // 方向角度值,绕垂直于地心的轴旋转角度, 0至360
       pitch: -74.1, // 俯仰角度值,绕纬度线旋转角度,-90至90
       // roll: 0, // 翻滚角度值,绕经度线旋转角度, -90至90
     },
     scene3DOnly: false, // 为 true 时,每个几何实例将仅以3D渲染以节省GPU内存
     shadows: false, // 是否启用日照阴影
     removeDblClick: false, // 是否移除Cesium默认的双击事件
     sceneMode: 3, // 初始场景模式。可以设置进入场景后初始是2D、2.5D、3D 模式。
     showSun: true, // 是否显示太阳,如修改对象可以用 map.scene.sun
     showMoon: true, // 是否显示月亮,如修改对象可以用 map.scene.moon
     showSkyBox: true, // 是否显示天空盒,如修改对象可以用 map.scene.skyBox
     showSkyAtmosphere: true, // 是否显示地球大气层外光圈,如修改对象可以用 map.scene.skyAtmosphere
     fog: true, // 是否启用雾化效果,如修改对象可以用 map.scene.fog
     fxaa: true, // 是否开启快速抗锯齿
   },
   basemaps: [
     { name: "天地图", type: "tdt", layer: "img_d", show: true },
   ],
   control: {
     baseLayerPicker: false
   }
 };
 m3d = new mars3d.Map("cesiumBox", mapOptions);

切换地图图层的实例
在上面的实例继续添加下面代码
show为false的话是图层隐藏掉
天地图的api链接在底部

const tdt_tk = ['']; // 这个key就是你在天地图中申请的key,这个是数组形式
// 电子海图
  dzht = new mars3d.layer.ArcGisTileLayer({
    name: "电子海图",
    url: "http://www.oceanread.com:213/arcgis/rest/services/chart/chartAll/MapServer",
    show: true
  })
  
  // 影像底图
  wxt = new mars3d.layer.TdtLayer({
    layer: 'img_d',
    name: '影像底图',
    url: 'https://t{s}.tianditu.gov.cn/img_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={z}&layer=img&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles',
    key: tdt_tk,
    show: false,
    zIndex: 1
  })

  wxt2 = new mars3d.layer.TdtLayer({
    layer: 'img_z',
    name: '影像注记',
    url: 'https://t{s}.tianditu.gov.cn/cia_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={z}&layer=cia&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles',
    key: tdt_tk,
    show: false,
    zIndex: 2
  })

  // 矢量底图
  slt = new mars3d.layer.TdtLayer({
    layer: 'vec_d',
    name: '矢量底图',
    url: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={z}&layer=vec&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles',
    key: tdt_tk,
    show: false,
    zIndex: 1
  })

  slt2 = new mars3d.layer.TdtLayer({
    layer: 'vec_z',
    name: '矢量注记',
    url: 'https://t{s}.tianditu.gov.cn/cva_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={z}&layer=cva&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles',
    key: tdt_tk,
    show: false,
    zIndex: 2
  })

  // 添加图层
  m3d.addLayer(dzht)
  m3d.addLayer(wxt)
  m3d.addLayer(wxt2)
  m3d.addLayer(slt)
  m3d.addLayer(slt2)

接着在 template 添加此代码

<button @click="add([0])" class="model_d">电子海图</button>
<button @click="add([1,2])" class="model_d2">影像底图</button>
<button @click="add([3,4])" class="model_d3">矢量底图</button>
const add = (index:any) => {
  
  // 获取所有的图层,不包含basemaps和layers中的图层
  const layersss =m3d.getLayers({
    basemaps:false, // 不包含basemps中配置的所有图层
    layers:false // 不包含layers中配置的所有图层
  })
  // 先隐藏所有的图层
  console.log(layersss);
  layersss.map((res:any) => {
    res.show = false
  })
  // 再指定的图层下显示
  for(let i = 0; i < index.length; i++){
    layersss[index[i]].show = true
  }
  
  // 第2种方法:使用移除图层,在添加图层
  // 一开始就不要 addLayer 图层了,直接需要哪个就添加哪个的图层就可以
  // m3d.removeLayer(dzht)
  // 矢量底图
  // dzht = new mars3d.layer.TdtLayer({
  //   layer: 'vec_d',
  //   name: '矢量底图',
  //   url: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={z}&layer=vec&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles',
  //   key: tdt_tk,
  //   show: true
  // })
  // m3d.addLayer(dzht)
  
}

天地图的api
天地图的实例

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mars3d是一个用于构建三维地球可视化应用的开源JavaScript库。它包含了一系列的功能和工具,可以用于加载和展示地理数据,其中包括geojson数据。 对于mars3d中的geojson图层,有几种不同的使用方法。首先,你可以使用mars3d.layer.GeoJsonLayer类来创建一个geojson图层对象。你可以传入一个geojson文件的URL作为参数,然后mars3d库将自动加载并解析该文件,并在地球上显示对应的矢量数据。你还可以通过设置symbol属性来定义矢量数据的样式,比如颜色和宽度。此外,你还可以使用popup属性来设置弹出窗口的内容。 如果你希望在加载geojson数据时进行一些自定义处理,例如计算贴地线坐标或者修改矢量数据的样式,你可以使用onCreateGraphic字段来自定义处理逻辑。在这个回调函数中,你可以访问到每个要素的坐标和属性信息,并进行相应的处理。例如,你可以使用mars3d.PolyUtil.computeSurfaceLine方法来计算贴地线坐标,并创建一个mars3d.graphic.WallPrimitive对象来表示墙体。然后,你可以将这个对象添加到geojson图层中,以在地球上显示出来。 另外,对于更复杂的地理数据处理需求,你还可以使用leaflet-stream库与mars3d结合使用。这个库可以将geojson数据流式传输到地图上,同时可以进行一些属性转换和处理操作。你可以通过引入leaflet-stream库并使用其API来实现这些功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [记录mars3d使用 - geojson图层](https://blog.csdn.net/Juzimhh/article/details/123545683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [leaflet-stream:管道 geojson 到地图](https://download.csdn.net/download/weixin_42097208/19778560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值