vue3使用cesium绘制瓦片图、点云图

cesium加载点云图

1.需要在cesium官网申请token,天地图key
cesium官网地址:https://cesiun.com
天地图:https://www.tianditu.gov.cn
2.这里通过cdn方式引入了

  <link href="https://cesium.com/downloads/cesiumjs/releases/1.78/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  <script src="https://cesium.com/downloads/cesiumjs/releases/1.78/Build/Cesium/Cesium.js"></script>

3.绘制点云图

<div id="cesiumContainer"></div>
const TDT_tk = ref("689c05c21d2a662c7700b50a692f149e")
// cesiumtoken
const cesium_tk = ref("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkZmE0ODY4Mi1kNGJk" +
    "LTQ3MDUtODZhYS05MDljZmE4NjUxNjIiLCJpZCI6MTkwMjM0LCJpYXQiOjE3MDU0ODI4OTF9.35qWxPwV6a7CHbS-nN0fV" +
    "gJQCDsVDEOhVn8doA7rAl8")
// pnts初始化
const initPnts = () => {
   //初始页面加载
  Cesium.Ion.defaultAccessToken = cesium_tk.value;
  let viewer = new Cesium.Viewer('cesiumContainer', {
    geocoder: false,   // 位置查找工具
    baseLayerPicker: false,// 图层选择器(地形影像服务)
    timeline: false, // 底部时间线
    homeButton: false,// 视角返回初始位置
    fullscreenButton: false, // 全屏
    animation: false,   // 左下角仪表盘(动画器件)
    sceneModePicker: false,// 选择视角的模式(球体、平铺、斜视平铺)
    navigationHelpButton: false, //导航帮助按钮
  });

  // 去除版权信息
  viewer._cesiumWidget._creditContainer.style.display = "none";

  // // cesium加载点云
  let tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url: config.JM_API +  userStore.mapData.access,
    maximumScreenSpaceError: 8,
    dynamicScreenSpaceError: true,
    dynamicScreenSpaceErrorDensity: 0.5,
    dynamicScreenSpaceErrorFactor: 128.0,
    pointCloudShading: {
      attenuation: true,
      geometricErrorScale: 0.01,
    },
    show: true,
  }));
  viewer.flyTo(tileset);

  viewer.scene.globe.show = false;
}

cesium加载瓦片图

<div id="cesiumContainer"></div>
const TDT_tk = ref("689c05c21d2a662c7700b50a692f149e")
// cesiumtoken
const cesium_tk = ref("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkZmE0ODY4Mi1kNGJk" +
    "LTQ3MDUtODZhYS05MDljZmE4NjUxNjIiLCJpZCI6MTkwMjM0LCJpYXQiOjE3MDU0ODI4OTF9.35qWxPwV6a7CHbS-nN0fV" +
    "gJQCDsVDEOhVn8doA7rAl8")
const initDom = () => {
  Cesium.Ion.defaultAccessToken = cesium_tk.value;
  const viewer = new Cesium.Viewer('cesiumContainer', {
    homeButton:false,
    sceneModePicker:false,
    baseLayerPicker:false,
    navigationHelpButton:false,
    animation:false,
    timeline:false,
    fullscreenButton:false,
    vrButton:false,
    infoBox:false
  });

  viewer._cesiumWidget._creditContainer.style.display = "none";

  // 矢量底图
  viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
    url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk="+TDT_tk.value,
    layer: "tdtVecBasicLayer",
    style: "default",
    format: "image/jpeg",
    tileMatrixSetID: "GoogleMapsCompatible",
    show: true
  }));

  // 瓦片显示区域
  let dom = userStore.mapData.dom
  const rect = GetRectFromMinMaxZoom([dom.bbox[0], dom.bbox[1]], [dom.bbox[2], dom.bbox[3]], dom.zoomMinMax[1])
  function GetRectFromMinMaxZoom(minTileXY, maxTileXY, zoom) {
    const a = new Cesium.WebMercatorTilingScheme();
    const rect1 = a.tileXYToRectangle(minTileXY[0], minTileXY[1], zoom);
    const rect2 = a.tileXYToRectangle(maxTileXY[0], maxTileXY[1], zoom);
    try {
      Cesium.Rectangle.validate(rect1);
      Cesium.Rectangle.validate(rect2); 
      return Cesium.Rectangle.union(rect1, rect2);
    } catch (e) {
      // console.log(e)
      return undefined;
    }
  }
  // dom瓦片显示
  viewer.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({
    url: config.JM_API + userStore.mapData.access,
    maximumLevel: dom.zoomMinMax[1],
    minimumLevel: dom.zoomMinMax[0],
    rectangle: rect, 
  }))
  viewer.camera.setView({destination: rect});
}

附带一位大佬详细讲解:https://zhuanlan.zhihu.com/p/620468046utm_id=0&wd=&eqid=c5147ad100001d090000000464901fd3

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。在vue2中,你可以通过引入Cesium相关的库并在组件内部使用Cesium Cesium.Viewer 创建一个实例,然后在该实例中使用Cesium的API完成线面的绘制功能。具体实现可以参考以下代码: ```javascript <template> <div id="cesiumContainer"></div> </template> <script> import * as Cesium from 'cesium/Cesium' export default { name: 'CesiumDemo', mounted () { // 创建CesiumViewer let viewer = new Cesium.Viewer('cesiumContainer') // 设置地球初始位置及其它属性 viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(116.42, 39.9, 10000000) }) // 创建元素 let point = viewer.entities.add({ name: 'Point', position: Cesium.Cartesian3.fromDegrees(116.42, 39.9), point: { color: Cesium.Color.RED, pixelSize: 10, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }) // 创建线元素 let line = viewer.entities.add({ name: 'Line', polyline: { positions: Cesium.Cartesian3.fromDegreesArray([ 116.42, 39.9, 116.5, 40, 116.6, 39.9 ]), width: 5, material: Cesium.Color.YELLOW } }) // 创建面元素 let polygon = viewer.entities.add({ name: 'Polygon', polygon: { hierarchy: Cesium.Cartesian3.fromDegreesArray([ 116.45, 39.95, 116.45, 39.85, 116.55, 39.85, 116.55, 39.95 ]), material: Cesium.Color.BLUE.withAlpha(0.5) } }) // 将窗口设置为最大化 viewer.scene.globe.baseColor = Cesium.Color.WHITE viewer.scene.globe.enableLighting = true viewer.scene.globe.showGroundAtmosphere = true } } </script> ``` 这段代码中实现了在vue2中使用Cesium绘制线面功能,具体实现步骤如下: 1. 引入Cesium相关库 2. 在组件的 `mounted` 钩子中创建CesiumViewer并设置初始位置及属性 3. 使用Cesium的API创建、线、面元素 4. 设置窗口样式 希望以上解答能够对你有所帮助,如有不清楚的地方,请不要犹豫,随时来问我!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值