当前位置:网站首页>【cesium】加载并定位 3D Tileset
【cesium】加载并定位 3D Tileset
2022-08-05 04:46:00 【顾鸟】
一. 介绍
首页加载 3D Tileset 模型,然后通过转换坐标并定位到指定位置。
二. 效果
三. 实现
// index.vue
<template>
<div class="viewer">
<vc-viewer @ready="ready">
<vc-layer-imagery>
<vc-provider-imagery-tianditu
protocol="http"
map-style="img_w"
token="436ce7e50d27eede2f2929307e6b33c0"
:projectionTransforms="projectionTransforms"
></vc-provider-imagery-tianditu>
</vc-layer-imagery>
</vc-viewer>
</div>
</template>
<script>
import {
update3dtilesMaxtrix } from "../utils";
export default {
data() {
return {
mapStyle: "6",
ltype: "0",
projectionTransforms: {
from: "WGS84", to: "GCJ02" }
};
},
methods: {
// 地图初始化
ready(cesiumInstance) {
const {
Cesium, viewer } = cesiumInstance;
window.$cesiumInstance = cesiumInstance;
window.Cesium = Cesium;
window.viewer = viewer;
this.loadTile();
},
// 加载 3dtiles 模型
loadTile() {
const {
Cesium, viewer } = window.$cesiumInstance;
const scene = viewer.scene; // 创建场景
// 向集合添加一个原语。
const tileset = scene.primitives.add(
new Cesium.Cesium3DTileset({
url: "http://192.168.0.1/sppmodel/1/tileset.json", // 还可以是json、http链接等,使用自己的地址
dynamicScreenSpaceError: true,
cullWithChildrenBounds: false,
skipLevels: 0,
maximumScreenSpaceError: 0
})
);
tileset.readyPromise
.then(function (tileset) {
// 坐标转换和定位
let params = {
tx: 117.227267, //模型中心X轴坐标(经度,单位:十进制度)
ty: 31.820567, //模型中心Y轴坐标(纬度,单位:十进制度)
tz: 0, //模型中心Z轴坐标(高程,单位:米)
rx: 0, //X轴(经度)方向旋转角度(单位:度)
ry: 0, //Y轴(纬度)方向旋转角度(单位:度)
rz: 0, //Z轴(高程)方向旋转角度(单位:度)
};
update3dtilesMaxtrix(tileset, params);
const default_headingPitchRange = new Cesium.HeadingPitchRange(0.3, -0.2, tileset.boundingSphere.radius * 2.0);
viewer.flyTo(tileset, {
offset: default_headingPitchRange, });
})
.catch(function (error) {
console.log(error);
});
},
},
};
</script>
<style>
.viewer {
width: 100%;
height: 100%;
}
</style>
// update3dtilesMaxtrix.js
// let params = {
// tx: 120.257, //模型中心X轴坐标(经度,单位:十进制度)
// ty: 31.226, //模型中心Y轴坐标(纬度,单位:十进制度)
// tz: 2800, //模型中心Z轴坐标(高程,单位:米)
// rx: 0, //X轴(经度)方向旋转角度(单位:度)
// ry: 0, //Y轴(纬度)方向旋转角度(单位:度)
// rz: -1 //Z轴(高程)方向旋转角度(单位:度)
// };
export const update3dtilesMaxtrix = function (tileset, params) {
//旋转
let Cesium = window.Cesium
let mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
let my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
//平移
let position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);
let m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
let scale = Cesium.Matrix4.fromUniformScale(0.85);
// //缩放
Cesium.Matrix4.multiply(m, scale, m);
//旋转、平移矩阵相乘
Cesium.Matrix4.multiply(m, rotationX, m);
Cesium.Matrix4.multiply(m, rotationY, m);
Cesium.Matrix4.multiply(m, rotationZ, m);
//赋值给tileset
tileset._root.transform = m;
// return m;
}
边栏推荐
- JeeSite New Report
- What is ASEMI photovoltaic diode, the role of photovoltaic diode
- Four-digit display header design
- Please write the SparkSQL statement
- Haproxy搭建Web群集
- bytebuffer internal structure
- Redis哨兵模式配置文件详解
- Error creating bean with name ‘configDataContextRefresher‘ defined in class path resource
- Feature preprocessing
- 概率论的学习和整理8: 几何分布和超几何分布
猜你喜欢
App快速开发建设心得:小程序+自定义插件的重要性
JeeSite New Report
Paparazzi: Surface Editing by way of Multi-View Image Processing
Spark Basics [Introduction, Getting Started with WordCount Cases]
开发属于自己的node包
[SWPU2019]Web1
UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
Mini Program_Dynamic setting of tabBar theme skin
AUTOCAD——标注关联
bytebuffer internal structure
随机推荐
Mini Program_Dynamic setting of tabBar theme skin
商业智能BI业务分析思维:现金流量风控分析(一)营运资金风险
[MRCTF2020] Ezpop (detailed)
[CISCN2019 华东南赛区]Web11
creo怎么测量点到面的距离
DEJA_VU3D - Cesium功能集 之 059-腾讯地图纠偏
如何解决复杂的分销分账问题?
Application status of digital twin technology in power system
There are several common event handling methods in Swing?How to listen for events?
Android interview question - how to write with his hands a non-blocking thread safe queue ConcurrentLinkedQueue?
The solution to the failure to read channel information when dedecms generates a message in the background
关于sklearn库的安装
Learning and finishing of probability theory 8: Geometric and hypergeometric distributions
8.04 Day35-----MVC three-tier architecture
Use IDEA to connect to TDengine server
35岁的软件测试工程师,月薪不足2W,辞职又怕找不到工作,该何去何从?
Haproxy搭建Web群集
Mysql's redo log detailed explanation
DEJA_VU3D - Cesium功能集 之 058-高德地图纠偏
mysql数据库表什么字段类型的存储长度最大?