首页 > 其他分享 >获取某地模型并用Cesium加载

获取某地模型并用Cesium加载

时间:2023-01-05 14:13:14浏览次数:67  
标签:某地 tileset 3dtile cartographic var Cesium 加载

 

2023-01-04

最近想用Cesium给学校做一个类似智慧校园的东西,要做的东西很多,首先是获取学校模型的问题,然后怎么用Cesium加载3Dtile

 1.获取学校模型

想到之前被老师抓苦力去做春熙路的图,于是决定用比较熟悉的OSM数据集

https://www.openstreetmap.org/    需要梯子

进入后很容易就可以下载到所需区域的矢量数据

 

后续选择用ArcMap处理数据,但下载的OSM需要一个插件才能用ArcMap打开

https://github.com/Esri/arcgis-osm-editor

选择对应版本就可以了

在ArcMap里清洗并加上高度属性就可以了,大概是这个样子

 

 

 

如何变成3dtile格式呢,搜索了一下发现用CesiumLab最方便

 http://www.cesiumlab.com/

下载过后会在浏览器打开一个窗口

如果要将shp文件转换为3dtile,里面有文档跟着操作就可以了,上图那种数据量一秒就转换好了

 

2.Cesium加载3dtile

我是在vue里用的cesium,直接将刚才生成的3dtile放在static下

 

 加载3dtile代码如下:

 

    var tileset = new Cesium.Cesium3DTileset({ 
      url: "../../../static/3DModel/sicauOSM/tileset.json",

    }); 
    viewer.scene.primitives.add(tileset);
    console.log(tileset);

 

因为生成模型时候的问题,导致模型在地底下去了,调整模型位置代码如下:

    // 定位到3dtiles的位置

    viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -20, 0));
    
    //高度偏差,向上是正数,向下是负数

    var heightOffset = 500.0;

    //计算tileset的绑定范围

    var boundingSphere = tileset.boundingSphere;

    //计算中心点位置

    var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);

    //计算中心点位置的地表坐标

    var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);

    //偏移后的坐标

    var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);

    var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());

    //tileset.modelMatrix转换

    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);

    });

 

标签:某地,tileset,3dtile,cartographic,var,Cesium,加载
From: https://www.cnblogs.com/LJXXXX/p/17024984.html

相关文章

  • Unity利用协同实现场景异步加载
    1.usingUnityEngine;2.usingSystem.Collections;3.4.publicclassFightTriggle:MonoBehaviour{5.privateAsyncOperationasync;6.i=0;7.......
  • Unity3D中Resources动态加载NGUI图片
    在NGUI中有些图片我需要动态进行变更或者加载,怎么办?首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~NGUI加载图片......
  • Assetbundle打包及加载入门详解(三)
                 主要讲Assetbundle的网络加载方式之前所讲的都是AssetBundle.LoadFromFile的方法,这是直接从硬盘上加载,而且属于同步加载。WWW.LoadF......
  • Assetbundle打包及加载入门详解(二)
    接着上篇,本节写如何更加科学的打包,以及打包中的一些依赖关系。科学打包:一般来说会把物体打成一个assetbundle包,把材质打成另个包,然后在加载的时候都加载出来。当然如果是有......
  • Assetbundle打包及加载入门详解(一)
    Assetbundle是unity的一种加载方式。这种加载可以从互联网上或者本地的文件夹中加载。要求被加载的文件必须是Assetbundle定义的格式首先制作Assetbundle:在project的Editor......
  • Day 06 模块加载机制
    模块加载机制一、优先从缓存中加载模块在第一次加载后会被缓存,多次调用require()不会导致模块的代码被执行多次不论内置模块、自定义模块、第三方模块都会从缓存中加载......
  • 构建Feign项目时候,装载bean失败,只加载到一个
    描述:加载过程当中发现注入的bean只会加载本地包下的实现。无法访问远程服务。解决方案:启动类加上@EnableFeignClients,开启feign的功能远程方法由于是实现api模块下......
  • linux动态库加载相关
    查看编译时会链接的动态库ldconfig-v|greplibCmp添加编译时的动态链接目录到终端环境,然后启动,这种方式可以为不同的程序配置不同的加载路径exportLD_LIBRARY_PA......
  • unity 热重载方式加载 dll
    1.代码示例voidLoadDll(){//Unity版本对于LoadDll的影响//2019就算在运行时修改了dll,也是无效的,拿的还是上一次的dll//2020unity认......
  • unity3d,异步加载场景
    很简单,代码如下:usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;publicclassLoading:MonoBehaviour{publicSliderloading_bar;privateAsyncO......