个人笔记|三维GIS开发-cesium坐标系统

个人笔记|三维GIS开发-cesium坐标系统,第1张

常用来描述屏幕坐标,比如鼠标在电脑屏幕上的点击位置,返回的就是Cartesian2.具体的是鼠标点击位置距离canvas左上角的像素值。屏幕左上角为原点(0, 0),水平方向为X轴,向右为正,垂直方向为Y轴,向下为正。

常用方法:

笛卡尔空间坐标的原点就是椭球的中心,我们在计算机上进行绘图时,不方便使用经纬度直接进行绘图,一般会将坐标系转换为笛卡尔坐标系,使用计算机图形学中的知识进行绘图。

new Cesium.Cartesian3(x, y, z)

返回3D笛卡尔点

类型是Number哦!

类型是Number哦!

类型是Number哦!

WGS84坐标系(World Geodetic System 1984)是为GPS全球定位系统使用而建立的坐标系统,坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.O定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系。我们平常手机上的指南针显示的经纬度就是这个坐标系下当前的坐标,经度范围[-180,180],纬度范围[-90,90]。

BUT!

BUUUUUT!!!

Cesium目前支持两种坐标系WGS84和WebMercator,但是没有实际的对象来描述WGS84坐标,都是 以弧度的方式,即Cartographic类来运用的

new Cesium.Cartographic ( longitude , latitude , height )

由经度,纬度和高度定义的位置。

单位是弧度哦!

单位是弧度哦!

单位是弧度哦!

只写一下自己用得多的

以后要是有用到新的再说

简记版本:弧度就是几分之 ,角度就是多少多少度, Math.xxx(x)里的x通常需要是弧度!!!

角转弧: Cesium.CesiumMath.toRadians(degrees)

弧转角: Cesium.CesiumMath.toDegrees(radians)

通常是对获取的坐标进行计算的时候用,比如同文件夹下的测距测面里,测距测面都是首先要把cartesian3形式的坐标转换成Cartographic形式拿到经纬高度,然后才好计算

Cesium.Cartographic.fromCartesian(position)

通常是算好一个需要的点以后要添加实体的时候用,比如测距的时候添加线段中点

Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographicPosition)

思路:先从笛卡尔坐标转到弧度坐标,再从弧转角

Cesium作为三维GIS和BIM应用的主力引擎,目前已经受到越来越多的开发者的青睐。这两年笔者也一直做Cesium相关的开发工作,真切地感受到Cesium的强大,其丰富的API、丰富的示例为开发三维GIS/BIM应用提供了极大的便利。

为了进一步丰富Cesium的开发生态,我们把之前在Cesium基础上开发的功能,以及大量的改良功能,封装成若干个独立的js包。这样也避免开发者重复造轮子。对于大屏展示、C端替代等直接本地部署Cesium的应用场景,可以直接免费使用我们封装的EarthSDK扩展包。

EarthSDK中主要包括XbsjEarth.js和XbsjCesium.js两个js包。

XbsjCesium.js用来扩展Cesium所不具备的三维可视化功能,例如视频融合、分析工具、模型压平等。

XbsjEarth.js则主要目标在于封装出更加易于使用的API接口,尽可能屏蔽掉前端开发工程师所不熟悉的图形学、GIS相关内容。会在Cesium的基础上封装好一些复杂的交互 *** 作,并提供极其简单的API接口方便调用。

EarthSDK从前端开发者的角度考虑设计API,大部分类的属性都是响应式设计,通过简单 *** 作即可监控相应的属性变化,通过bind方便可以实现属性的相互绑定。特别针对Vue的开发者,实现了和vue的响应式属性的无缝融合。具体可以参考这篇文章的介绍: 三维应用的响应式设计探索 。

之前使用过ECharts的同学可能对ECharts的 *** 作简单印象深刻。ECharts相当于把大量的API转成配置式,真正使用时,只需要通过setOptions来进行一个大JSON对象的配置,即可完成图表的创建。

EarthSDK的API设计也是受ECharts的启发,会尽量减少不需要的API,减轻开发者的记忆负担。只需要通过一个大JSON配置,就可以完成整个场景的搭建。

而且,EarthSDK比ECharts更进一步,可以直接修改相应的属性,即可完成三维场景的动态变化。而ECharts则需要不停地调用setOption来进行配置。以后的文章中会详细说明此特性。

EarthSDK创建场景后,内置viewer和scene对象,用户可以通过viewer或者scene来向场景中添加Cesium的原生对象,和调用所有原生的Cesium API函数。

为了更易于理解EarthSDK的使用,我们开发了一个样例程序 XbsjEarthUI(这个程序也同时集成到了CesiumLab中)。此样例程序已经开源放在Github和Gitee上,基于MIT协议,用户可以任意修改。

XbsjEarthUI在github上的地址: https://github.com/cesiumlab/XbsjEarthUI

XbsjEarthUI在gitee上的地址:

https://gitee.com/cesiumlab/XbsjEarthUI

EarthSDK可以加载百度地图、高德地图等三十多种地图数据,并可以做到实时纠偏。

交通安防领域需要用到的视频监控、视频融合功能。可以将视频映射到倾斜摄影、BIM模型上(3dtiles模型),视频会覆盖到非平面物体上,不会出现闪烁等现象。

针对模型位置、姿态进行编辑。方便进行多个模型数据组合使用。并且这里的模型位置编辑可以很方便的在全球任意位置拖放。

结合CesiumLab数据生产,使用EarthSDK调整数据后期亮度,可以做出较好的特效。方便进行大屏展示。

可以指定模型数据显示在某一个视口,方便进行方案对比等 *** 作。

Cesium的地面本身不能做到透明显示,我们进行改进,使得透明度可以实时调节。

动态实现视域分析效果。

可以对路径进行编辑,编辑好的路径,可以用于控制相机的漫游,也可以控制物体的移动。

对原始Cesium的标签效果进行改进,并可以使用类似html5标签增加onClick属性,来自动执行自定义 *** 作。

在WPF编程中,可能需要去除窗口的右上角的几个按钮:最大化按钮、最小化按钮和关闭按钮,其他几个都很好处理,就是这个关闭按钮,WPF模型不提供删除或隐藏功能,我们只有采用一些非正常手段,比如使用Win32函数,比如禁用,对于禁用关闭功能,可以重载OnClosing()函数来实现,——使用户无法通过点击右上角的关闭按钮来关闭窗口: 1 2 3 4protectedoverridevoidOnClosing(System.ComponentModel.CancelEventArgs e) { e.Cancel = true} 另一种方法就比较麻烦了,但是也是最彻底的方法:去除关闭按钮 首先,在你的Window 类中申明: 1 2 3 4 5 6privateconstint GWL_STYLE = -16privateconstint WS_SYSMENU = 0x80000[DllImport("user32.dll", SetLastError = true)]privatestaticexternintGetWindowLong(IntPtr hWnd, int nIndex)[DllImport("user32.dll")]privatestaticexternintSetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong)然后,在装载事件中加入: 1 2 var hwnd = new WindowInteropHelper(this).HandleSetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) &~WS_SYSMENU)但是这种情况下用户仍然可以通过Alt+F4关闭窗口,所以你可能仍然需要实现上面所说的重载OnClosing()函数,将其禁用。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11800304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存