01Cesium加载初始化,加载数据

本文介绍了如何在React应用中使用Cesium库创建地图,包括环境配置、地图初始化、3DTiles、WMS、GLB模型加载和GeoJson数据处理。作者分享了关键代码片段以供学习参考。
摘要由CSDN通过智能技术生成

最近在学习cesium和react,将学习过程记录在此,供大家参考,可能有些写法不太标准或有错,还望指正。

(1)安装,环境部署

在react中使用cesium,先下载cesium;

npm install cesium

 然后更改webpack.config.js的部分内容,参考1参考2  

(2)初始化地图

 使用react函数式组件编写,需要使用useEffect,在界面初始化挂载的时候调用实现viewer的建立,并使用useRef以及.current保存下viewer,从而在useEffect外引用viewer。

import React,{useEffect,useRef} from 'react'
import * as Cesium from 'cesium'
export default function CesiumMap(){
    var viewerRef = useRef(null)
    useEffect(() => {
      viewerRef.current = new Cesium.Viewer('cesiumContainer',{
      terrain: Cesium.Terrain.fromWorldTerrain(),//地形
      animation: false,
      baseLayerPicker: true, 
      fullscreenButton: false, 
      vrButton: false, 
      geocoder: false,
      homeButton: false, 
      infoBox: true, 
      sceneModePicker: false,
      selectionIndicator: true, 
      timeline: false, 
      navigationHelpButton: false, 
      navigationInstructionsInitiallyVisible: false,
    });

        var viewer = viewerRef.current
        viewer._cesiumWidget._creditContainer.style.display = "none";

        viewer.scene.globe.enableLighting = true;// 开启全球光照
        viewer.shadows = true
        //初始位置
        viewer.camera.setView({
        destination:Cesium.Cartesian3.fromDegrees(113,23,1000),   // 经纬度和高度
       });
    },[])

    return(
    <div id="cesiumContainer" style={{ width: '100%', height: '100%',     position:'absolute', top:'0px',left:'0px'}} >
    </div>
  )
}

(3)加载数据

3DTiles(B3DM格式数据集)

    viewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
            url: 'data/tiles/tileset.json',
        })
    );

WMS

    var earthUrl = 'https://planetarymaps.usgs.gov/cgi-bin/mapserv?map=/maps/earth/earth_simp_cyl.map&service=WMS';
    const earthLayer = new Cesium.ImageryLayer(
     new Cesium.WebMapServiceImageryProvider({
         url: earthUrl,
         layers:'MODIS',
      })
    );
    earthLayer.name = 'Earth'
    viewer.imageryLayers.add(earthLayer);

GLB模型

    //位置
    const position = Cesium.Cartesian3.fromDegrees(
        103,23,100
      );
    //camera姿态
      const heading = Cesium.Math.toRadians(30);
      const hpr = new Cesium.HeadingPitchRoll(heading, 0 ,0);
      const orientation = Cesium.Transforms.headingPitchRollQuaternion(
        position,hpr
      );
      const drone_entity = new Cesium.Entity({
        id:'drone',
        name: "无人机",
        position: position,
        orientation: orientation,
        model: {
          uri: "data/drone.glb",
          scale:5,
          // minimumPixelSize: 128,
          // maximumScale: 200,
          shadows:Cesium.ShadowMode.ENABLED
        },
      });
      viewer.entities.add(drone_entity)
      viewer.trackedEntity = drone_entity

Geojson

    var dataSource = new Cesium.GeoJsonDataSource();
    dataSource.name = 'layer'
    viewer.dataSources.add(dataSource);
      dataSource.load(
        'data/area.json',{
          fill:Cesium.Color(0,255,0),
        }
      ).then(function(){
        var entities = dataSource.entities.values;
        for (var i = 0; i < entities.length; i++) {
            var entity = entities[i];
            //根据属性赋予不同颜色
            var attributeValue = entity.properties.color._value; 
            if (attributeValue == 1) {
                entity.polygon.material = Cesium.Color.GREEN; 
            } else{
                entity.polygon.material = Cesium.Color.RED; 
            }
            //厚度加0.1米,以避免被3dtiles遮挡
            entity.polygon.extrudedHeight = entity.properties.z._value+0.1; 
            entity.polygon.outline = false; 
            entity.polygon.outlineColor = Cesium.Color(255,255,255); 
          }
      })

点云数据

待添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wfq0007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值