无人机航拍的倾斜摄影,用照片和视频处理生成三维模型,一般照片都带有坐标信息,所以一般都能定位的比较准确,但是经常会出现高度偏差,这个时候就需要特殊处理了。

今天航拍建模的效果如下:

这个建模没有裁剪,一般周边其他东西都要裁剪和删除。

然后直接上完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>天地图</title>
<!-- 引用cesium的js和css,天地图的扩展js -->
<script src="js/cesium1.97/Cesium.js"></script>
<script src="js/cesiumTdt.js" ></script>
<link rel="stylesheet" href="js/cesium1.97//Widgets/widgets.css"/>
<style type="text/css">
html, body, #tiandituContainer {
width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
}
</style> </head>
<body onload="loadData()">
<div id="tiandituContainer">
</div>
<script>
var cesiumAsset='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5NjE1MDIwOC1jOGYxLTQzZWItYjNhOC1iNjZlMWM1OGYxMDIiLCJpZCI6MTAyODY5LCJpYXQiOjE2NTkwMDA3ODN9.Vy4hW4jpjbZs6ee4BcRl3-cCl-oRGn42e2_Hjbo5nas';
var tiandituTk='4357fe5b6eab1e1bb57f99e68ae528f8';
// 服务负载子域
var subdomains=['0','1','2','3','4','5','6','7'];
Cesium.Ion.defaultAccessToken = cesiumAsset; var viewer;
function loadData()
{
//默认会调用微软virtualearth地图
viewer = new Cesium.Viewer('tiandituContainer',{
animation:false, //是否显示动画控件
homeButton:true, //是否显示home键
geocoder:true, //是否显示地名查找控件,如果设置为true,则无法查询
baseLayerPicker:true, //是否显示图层选择控件
timeline:false, //是否显示时间线控件
fullscreenButton:true, //是否全屏显示
infoBox:true, //是否显示点击要素之后显示的信息
sceneModePicker:true, //是否显示投影方式控件 三维/二维
navigationInstructionsInitiallyVisible:false, //导航指令
navigationHelpButton:false, //是否显示帮助信息控件
selectionIndicator:false, //是否显示指示器组件
});
//默认的Cesium会加载一个bingMap底图,网络不太好,一般要先去掉这个默认的
//viewer.imageryLayers.remove(viewer.imageryLayers.get(0));
// 隐藏cesium ion
viewer._cesiumWidget._creditContainer.style.display = "none"; //http://211.143.122.110:18062/3dtile/home_draco/tileset.json
addSlope("http://211.143.122.110:18062/3dtile/home_draco/tileset.json",0); //getMousePosition(); }
// cesium获取鼠标点击的位置坐标
function getMousePosition()
{
// 首先需要注册cesium鼠标事件,通过cesium的ScreenSpaceEventHandler函数处理用户输入事件
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
// 设置要在输入事件上执行的功能,官方文档查询ScreenSpaceEventType可以看到所有的cesium鼠标事件
handler.setInputAction((event) => {
//屏幕坐标=》迪卡尔空间直角坐标
let cartesian3 = viewer.scene.camera.pickEllipsoid(event.position, viewer.scene.globe.ellipsoid)
// 防止点击到地球之外报错,加个判断
if (cartesian3 && Cesium.defined(cartesian3)) {
//cartographic是地理坐标(弧度)
let cartographic = Cesium.Cartographic.fromCartesian(cartesian3)
//再转换成经纬度
let lng = Cesium.Math.toDegrees(cartographic.longitude)
let lat = Cesium.Math.toDegrees(cartographic.latitude)
let height = cartographic.height;
console.log(lng, lat, height);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK) } function addSlope(url,height) {
var tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url:url,
maximumScreenSpaceError: 2,//默认16,最大屏幕空间错误
maximumNumberOfLoadedTiles: 1000,
maximumMemoryUsage:1024//默认512,内存MB的最大数量
}));
tileset.readyPromise.then((tileset) => {
tileSet(tileset,height) viewer.zoomTo(tileset);//视野定位到模型处
});
} function tileSet(tileset, height)
{
//3dtile模型的边界球体
var boundingSphere = tileset.boundingSphere;
//迪卡尔空间直角坐标=>地理坐标(弧度制)
var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center);
//地理坐标(弧度制)=>迪卡尔空间直角坐标
var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height);
var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height);
//获得地面和offset的转换
var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3());
//修改模型矩阵
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
}
</script>
</body>
</html>

本案例中对模型高度调整,是参考教程3种的方法进行设置,具体全参数设置,可以参考教程3.

cesium教程9-加载倾斜摄影并解决高度问题的更多相关文章

  1. Cesium for Unreal加载倾斜摄影

    本文介绍UE4中通过Cesium插架加载本地倾斜摄影模型.Cesium for Unreal插件运行在UE环境何总运行Cesium,这样方便做一个GIS应用. 安装Cesium for Unreal插 ...

  2. Cesium加载倾斜摄影数据

    (1)倾斜摄影数据仅支持 smart3d 格式的 osgb 组织方式, 数据目录必须有一个 “Data” 目录的总入口, “Data” 目录同级放置一个 metadata.xml 文件用来记录模型的位 ...

  3. ceisum_加载倾斜摄影模型

    osgb转换为3Dtiles格式(使用工具转换) 然后加载到cesium中(加载代码见下,可以控制模型高度) var offset = function(height,tileset) { conso ...

  4. win7/8系统中php5.3和5.4、5.5不能加载php_curl.dll解决办法

    win7/8系统中php5.3和5.4.5.5不能加载php_curl.dll解决办法   作者:用户 来源:互联网 时间:2016-06-23 18:54:33 php变量注释系统模块 摘要: 本文 ...

  5. [译]Vulkan教程(31)加载模型

    [译]Vulkan教程(31)加载模型 Loading models 加载模型 Introduction 入门 Your program is now ready to render textured ...

  6. 使用jquery的load方法设计动态加载,并解决浏览器前进、后退、刷新等问题

    继上一篇 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题 解决了后台业务系统的部分动态加载问题,然而该框架离正常的用户体验还存在一些问题,如:浏览器的前进.后 ...

  7. tensorflow_mnist数据集一直加载错误的解决办法

    tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...

  8. 关于Eclipse在servlet中连接数据库时出现驱动加载失败的解决

    问题:在队友发来的项目中想将他获取到的数据通过数据库储存,出现驱动加载失败问题 解决:首先百度了下相关情况,大多数都是说下载mysql-connector-java-5.1.39-bin.jar包,然 ...

  9. Hibernate的懒加载session丢失解决方法

    在web.xml加入spring提供的过滤器,延长session的生命周期 <!--Hibernate的懒加载session丢失解决方法 --> <filter> <fi ...

  10. dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决

    dubbo序列化,hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决 转载声明: ...

随机推荐

  1. Python爬取腾讯视频电影名称和链接(一)

    1 import requests 2 import json 3 from bs4 import BeautifulSoup #网页解析获取数据 4 import sys 5 import re 6 ...

  2. 企业数据清洗项目实践day1

    今天先把国标excel表的数据在Python里转化成了字典类型, 暂时定共分为四层,层层分类. 代码 1 def std_excel(): 2 dict={"A":{"0 ...

  3. CSP2019-S2总结

    目录 前言 洛谷 5657 格雷码 代码(找规律) 洛谷 5658 括号树 分析 代码 洛谷 5659 树上的数 洛谷 5664 Emiya 家今天的饭 洛谷 5665 划分 分析 代码 洛谷 566 ...

  4. 【直播回顾】OpenHarmony知识赋能六期第一课—OpenHarmony智能家居项目介绍

    6月16日晚上19点,知识赋能第六期第一节课 <OpenHarmony智能家居项目介绍> ,在OpenHarmony开发者成长计划社群内成功举行. 本次直播是"OpenHarmo ...

  5. C#中操作Excel

    在GIS数据处理中,经常遇到与Excel的交互,这里进行简单的总结. Excel行列号就像是编辑中的二维数据组,操作Excel相当于操作二维数组.遍历.循环.取值.赋值-- 1.添加引用 添加引用也有 ...

  6. 56.5K star的gpt4free开源项目到底真的假的?

    前言 这个项目是我很早之前就star,只是当时觉得有点天真,怎么会有那么多免费的好事情呢?然后就在清明节前夕,OpenAI 开放了免登录即可使用GPT-3.5的模型,那么势必很快就有了免费使用GPT- ...

  7. 鸿蒙智联生态产品《接入智慧生活App开发指导》(官方更新版)

    原文:https://mp.weixin.qq.com/s/BDC-12aiZz2EhtjYLR7QIg,点击链接查看更多技术内容. 在HarmonyOS Connect生态产品应用开发过程中,很多开 ...

  8. c# ref和out 详解

    前言 数据在内存中,存在两种状态,堆和栈中.堆中的数据是可以直接拿到的,一般称引用对象. 这些对象有一个特征,那就是经过函数处理之后,这些数据在主线程中改变了.好奇点好了,为什么栈中的数据就不会改变呢 ...

  9. python实现:有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和。

    # 有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和.# 示例:# 输入: [-3,1,-1,6,-1,2,4,-5,4]# 输出: 11# 解释: 连续子数组 [6,-1, ...

  10. Linux基础——shell

    shell ############# shell是什么 -Bash Shell是一个命令解释器(python解释器),它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令 ...