通过mars3d1.8+cesium1.6根据坐标获取对应坐标在3dtiles模型上的高度

这篇具有很好参考价值的文章主要介绍了通过mars3d1.8+cesium1.6根据坐标获取对应坐标在3dtiles模型上的高度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在前端开发中,使用地图和3D模型的需求越来越常见。然而,对于一些开发者来说,如何在3D模型上获取对应坐标的高度可能是一个挑战。在本文中,我们将介绍如何使用mars3d1.8和cesium1.6这两个强大的前端库来实现这一功能。
mars3d是一个基于Cesium的地图开发引擎,可以帮助您快速构建各种地图应用。而cesium则是一个强大的开源3D地理信息系统(GIS)库,为开发者提供了丰富的功能和工具。要在3D模型上获取坐标的高度,我们需要首先将模型加载到地图中。使用mars3d,您可以轻松加载3D模型,并使用cesium强大的功能进行操作和分析。
首先,我们需要引入mars3d和cesium的库文件。您可以通过以下方式将它们添加到您的项目中:

<script src="path/to/mars3d.min.js"></script>
<script src="path/to/cesium.min.js"></script>

接下来,我们需要创建一个地图容器,并初始化mars3d地图引擎:

<div id="mapContainer"></div>
<script> 
	 // 初始化mars3d地图引擎  
 </script>

现在,我们可以加载我们的3D模型并将其添加到地图中:

<script> 
 // 创建3D模型图层  
 // 将3D模型添加到地图  
</script>

一旦我们的3D模型加载完成,我们就可以使用cesium的功能来获取对应坐标在模型上的高度了。在cesium中,我们可以使用Scene对象来进行相关操作。

<script> 
//获取模型或者地形高度
	        function getHeightByType(cartesians, type) {
            if (type === 'model') {
                return new Promise(async resolve => {
                    try {
                        let promise = viewer.scene.clampToHeightMostDetailed(cartesians)
                        promise.then(updatedCartesians => {
                            console.log(updatedCartesians)
                            var cartographic = Cesium.Cartographic.fromCartesian(updatedCartesians[0]);
                            var longitude = Cesium.Math.toDegrees(cartographic.longitude);
                            console.log(longitude)
                            var latitude = Cesium.Math.toDegrees(cartographic.latitude);
                            console.log(latitude)
                            var height = cartographic.height;
                            console.log(height)
                            resolve(height)
                        })
                    } catch (e) {
                        resolve(false)
                    }
                })
            } else if (type = 'terrain') {
                // 首先将cartesians转为positions
                let positions = []
                cartesians.forEach(cartesian => {
                    positions.push(this.cartesianToCartographic(cartesian))
                })
                let terrain = viewer.terrainProvider
                return new Promise(async resolve => {
                    try {
                        // 当前场景中没有使用地形
                        if (!terrain) resolve(false)
                        const promise = Cesium.sampleTerrainMostDetailed(terrain, positions);
                        promise.then(updatedPositions => {
                            let resultCartesians = []
                            updatedPositions.forEach(position => {
                                if (position) {
                                    // 采集成功,转为笛卡尔坐标
                                    resultCartesians.push(this.cartographicToCartesian(position))
                                } else {
                                    // postion为undefined时,说明该位置采集失败
                                    // resultCartesians.push(position)
                                }
                            })
                            resolve(resultCartesians)
                        })
                    } catch (e) {
                        resolve(false)
                    }
                })
            }
        }

        // 定义获取高度的函数
        function getHeightFromLongitudeAndLatitude(longitude, latitude) {

            const cartesian1 = new Cesium.Cartesian3.fromDegrees(longitude, latitude)
            this.getHeightByType([cartesian1], 'model').then(results => {
                console.log('demo: 拾取结果:', results)
            })
        }

        // 获取经纬度点的地形高度
        function getHeight(lon, lat) {
            var cartographic = Cesium.Cartographic.fromDegrees(lon, lat);
            console.log(cartographic);
            var promise = Cesium.sampleTerrain(viewer.terrainProvider, 9, [cartographic]);
            console.log(promise);
            Cesium.when(promise, function(updatedPositions) {
                var height = updatedPositions[0].height;
                console.log("Height (in meters): " + height);
            });
        }
</script>

现在,我们已经成功地获取到了对应坐标在3D模型上的高度。您可以根据需要在这个基础上进行进一步的处理和分析。总结起来,通过结合mars3d和cesium这两个强大的前端库,我们可以轻松获取对应坐标在3D模型上的高度。这为开发者们在地图和3D模型应用开发中提供了更多的可能性。希望这篇文章对您有所帮助,欢迎您的使用和探索!文章来源地址https://www.toymoban.com/news/detail-524371.html

到了这里,关于通过mars3d1.8+cesium1.6根据坐标获取对应坐标在3dtiles模型上的高度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mars3D使用教程

    1、使用npm安装依赖库 //安装mars3d主库 ​ //安装mars3d插件(按需安装) ​ //安装copy-webpack-plugin 插件在第3步中使用,根据webpack版本安装,不匹配的版本可能出错,版本需要5.0 “copy-webpack-plugin”: “^5.0.0”, 2.在main.js全局导入 或者 在使用mars3d的文件中导入(这一步可以跳过,

    2024年02月02日
    浏览(32)
  • mars3d绘制区域范围(面+边框)

    1、图例(绿色面区域+白色边框)  2、代码 1)、绘制区域ts文件 解释: 1、new mars3d.layer.GeoJsonLayer      生成矢量图层 2、styleField       \\\"levels\\\" 是在json文件中区分不同级别景区的标志,值为1、2、3等 3、styleFieldOptions       根据styleField获取到的值进行区分,划分不同颜色的

    2024年02月15日
    浏览(32)
  • Vue2项目使用mars3d

    或参考webpack.config.js写法进行修改

    2024年02月14日
    浏览(30)
  • vue3 mars3d 天地图

                    npm i mars3d                  npm i mars3d-heatmap (热力图,需要的话安装)                 npm i -D copy-webpack-plugin                 增加mars3d目录配置,修改vue.config.js中configureWebpack里的内容如下:  使用: 最后附上天地图mapUrl地址

    2024年02月15日
    浏览(25)
  • Mars3D Studio 的使用方法

    mars3d Studio 是 mars3d 研发团队于近期研发上线的一款 场景可视化编辑平台。拥有资源存档、团队协作、定制材质等丰富的功能。可以实现零代码构建一个可视化三维场景。 (1)数据上传:目前支持 tif 影像上传、 3dtitles 、 gltf 小模型上传以及矢量数据( shp、gesojson、kml ) 下

    2023年04月16日
    浏览(85)
  • [mars3d 学习] 最近升级版本造成的问题

    1、mars3d升级3.5以上,使用的时候报错; 需要看下 Mars3D三维可视化平台 | 火星科技 版本更新日志; 使用将Cesium的版本升级到1.103 2、升级Cesium到1.103,之后打包又会报错 - error in ./node_modules/mars3d-Cesium/Build/Cesium/index.js 哦,是因为cesium1.96改变了代码打包方式;在vue2中就会存在

    2024年02月17日
    浏览(39)
  • Mars3d项目启动上的一些坑

    最近新入职了一家公司,公司新开了有个未来城市的项目,需要用到3D城市建模,公司老总选了Mars3d作为前端框架,项目分给我了,又是一个全新的领域,开搞吧! 下面是自己遇到的几个小问题,记录一下: 1 npm install copy-webpack-plugin --save -dev 时报错 解决办法:npm install cop

    2024年02月05日
    浏览(30)
  • vue3使用Mars3D写区块地图

    因为我也是第一次使用,所以我是把插件和源文件都引入了,能使用启动 源文件 下载地址: http://mars3d.cn/download.html 放入位置 在index.html中引入 引入插件 我是封装的组件,代码的使用和意义 我直接放在备注中 大体布局 父组件 添加地图内部数据和地图外部数据的方法 ,我都

    2024年01月20日
    浏览(32)
  • Mars3D使用过程遇到的问题记录【持续更新】

    需要标注线面的角度heading 2022年6月23日 heading计算方式: https://turfjs.fenxianglu.cn/ 计算两点之间的角度 直接F12在控制台可以计算 eg: 加载gltf模型,模型是透明的,需要改为不透明 2022年6月23日 用文本编辑器打开.gltf,把里面的\\\"alphaMode\\\":\\\"BLEND\\\"改成\\\"alphaMode\\\":\\\"OPAQUE\\\" 模型旋转之后,标

    2024年02月08日
    浏览(42)
  • vue3+vite项目集成mars3d

    创建一个项目 yarn create vite // vue - ts 安装依赖 yarn add vite-plugin-mars3d -D yarn add mars3d 控制台警告 warning \\\" mars3d@3.5.0\\\" has unmet peer dependency \\\"@turf/turf@^6.5.0\\\". warning \\\" mars3d@3.5.0\\\" has unmet peer dependency \\\"mars3d-cesium@~1.103.1\\\". 安装 yarn add  @turf/turf mars3d-cesium 修改 vite.config.ts 修改srcApp.vue 就可

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包