座標系におけるセシウムと変換

私たちは、エンティティの学習を開始する前に、我々は最初の下セシウム座標系を学ぶ必要がある、セシウムしばしばエンティティの間に追加するために使用される複数の座標系は、あります。

まず、座標系を導入します

WGS84の緯度と経度の座標(実際のオブジェクト)、WGS84は、システムラジアン座標(地図作成)、デカルト空間直交座標系(Cartesian3)、平面システム(Cartesian2)、4Dデカルト座標:座標系に例示セシウムましょう座標系(Cartesian4)

1、WGS84座標系

世界測地系1984、確立された地球起源の質量の中心の座標を座標系GPS全地球測位システムを使用して、そのZ軸デカルトは、地球の極性契約のBIHの空間地心点1984.O定義のシステム(国際時間サービス)座標右利きの構成に垂直(CTP)赤道方向、X軸交点BIH 1984.0ゼロ子午線平面とCTP、Y、Z軸、X軸。いつも電話ディスプレイ上のコンパスは、この座標系の現在の緯度と経度の座標であり、範囲の進捗[-180180]緯度範囲[-90,90]。
我々は、すべてのセシウムは現在、2つのWGS84座標がラジアンの方法は、地図作成カテゴリを使用することにある記述するシステムWGS84とWebMercatorが、セシウムにおける実際のオブジェクトを座標サポートしていることを知っている:新しいCesium.Cartographic(経度、緯度RADは=π/ 180×緯度と経度角:パラメータも経度、緯度、経度及び緯度と呼ばれ、高さ)は、メソッドを算出します。


 
WGS84座標系

図2に示すように、空間デカルト直交座標系(Cartesian3)

起源のデカルト空間座標を直接描画する緯度と経度を使用することが不便で、我々は、コンピュータ上で描画する場合、楕円の中心であり、一般的に描画するためのコンピュータグラフィックスの知識を用いて、デカルト座標系への座標系であろう。3つの成分XYZ SuperMap iObejctsたPoint3Dオブジェクト、新しいCesium.Cartesian3(X、Y、Z)に幾分似ここCartesian3、。

 
直交座標空間のデカルト座標系

図3に示すように、平面座標系(Cartesian2)

平面座標系の平面は、矩形システムが少ないCartesian3新しいCesium.Cartesian2(x、y)は、のz成分と比較して、二次元のデカルト座標系である座標です。Cartesian2は、多くの場合、コンピュータ画面上の位置をマウスでクリックするようにスクリーン座標系を記述するために使用される、Cartesian2を返すで、マウスクリックのx-y画素位置成分を返さ。


 
平面座標系

4,4Dデカルト座標(Cartesian4)

今までは、そのような時に便利なフォローアップとして、使用して、それを更新していません

いくつかの座標変換方法及びシステムの第2の使用

緯度と経度とラジアン変換

座標ラジアン: VAR = Cesium.CesiumMath.toRadiansラジアン(度);
座標にラジアン: VAR = Cesium.CesiumMath.toDegrees度(ラジアン);
変換方法セシウム源我々は実際には、見て:RAD =π/ 180×緯度及び経度の角度、緯度角= 180 /π×ラジアン。

CesiumMath.RADIANS_PER_DEGREE = Math.PI / 180.0;
CesiumMath.DEGREES_PER_RADIAN = 180.0 / Math.PI;
CesiumMath.toRadians = function(degrees) { //>>includeStart('debug', pragmas.debug); if (!defined(degrees)) { throw new DeveloperError('degrees is required.'); } //>>includeEnd('debug'); return degrees * CesiumMath.RADIANS_PER_DEGREE; }; CesiumMath.toDegrees = function(radians) { //>>includeStart('debug', pragmas.debug); if (!defined(radians)) { throw new DeveloperError('radians is required.'); } //>>includeEnd('debug'); return radians * CesiumMath.DEGREES_PER_RADIAN; }; 

WGS84緯度と経度の座標と(地図作成の)ラジアンWGS84座標を変換します

1.直接转换:通过上面提到的方法,将经纬度转换为弧度后,直接new Cesium.Cartographic(longitude弧度, latitude弧度, height米)
2.间接转换:通过var cartographic= Cesium.Cartographic.fromDegrees(longitude, latitude, height)直接转换;
类似的还有var cartographic= Cesium.Cartographic.fromRadians(longitude, latitude, height)方法,传入的是弧度。

WGS84坐标系和笛卡尔空间直角坐标系(Cartesian3)的转换

WGS84转为笛卡尔空间直角坐标系
1.通过经纬度或弧度进行转换:
var c3= Cesium.Cartesian3.fromDegrees(longitude, latitude, height) ;高度height可不填写。
var c3s=Cesium.Cartesian3.fromDegreesArray(coordinates);coordinates格式为不带高度的数组。例如:[-115.0, 37.0, -107.0, 33.0]
var c3s=Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);coordinates格式为带有高度的数组。例如:[-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]
同理将度转化为弧度,然后再进行转换,
和上面一样有Cesium.Cartesian3.fromRadians,Cesium.Cartesian3.fromRadiansArray,Cesium.Cartesian3.fromRadiansArrayHeights等方法,用法和上面一样,只是度需要转换为弧度,这里不再讲这些方法。

其实fromDegrees内部也是用的fromRadians方法,这点大家可以了解下,另外WGS84坐标系转笛卡尔空间直角坐标系代码如下,大家可以了解下转换过程:

Cartesian3.fromRadians = function(longitude, latitude, height, ellipsoid, result) {
        //>>includeStart('debug', pragmas.debug);
        Check.typeOf.number('longitude', longitude); Check.typeOf.number('latitude', latitude); //>>includeEnd('debug'); height = defaultValue(height, 0.0); var radiiSquared = defined(ellipsoid) ? ellipsoid.radiiSquared : wgs84RadiiSquared; var cosLatitude = Math.cos(latitude); scratchN.x = cosLatitude * Math.cos(longitude); scratchN.y = cosLatitude * Math.sin(longitude); scratchN.z = Math.sin(latitude); scratchN = Cartesian3.normalize(scratchN, scratchN); Cartesian3.multiplyComponents(radiiSquared, scratchN, scratchK); var gamma = Math.sqrt(Cartesian3.dot(scratchN, scratchK)); scratchK = Cartesian3.divideByScalar(scratchK, gamma, scratchK); scratchN = Cartesian3.multiplyByScalar(scratchN, height, scratchN); if (!defined(result)) { result = new Cartesian3(); } return Cartesian3.add(scratchK, scratchN, result); }; 

2.通过度来进行转换
var position = Cesium.Cartographic.fromDegrees(longitude, latitude, height);
var c3 = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);
var c3s=Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray([position1,position2,position3])
弧度同理
笛卡尔空间直角坐标系转换为WGS84
1.直接转换
var cartographic= Cesium.Cartographic.fromCartesian(cartesian3)
转换得到WGS84弧度坐标系后再使用经纬度和弧度的转换,进行转换到目标值
2、间接转换
var cartographic= Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3)
var cartographics= Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray([cartesian1,cartesian2,cartesian3])

平面坐标系(Cartesian2)和笛卡尔空间直角坐标系(Cartesian3)的转换

平面坐标系转笛卡尔空间直角坐标系
这里需要说明的是当前的点必须在三维球上,否则返回的是undefined,我们在ScreenSpaceEventHandler回调会取到的坐标都是Cartesian2,大家可以测试观察下。
1.屏幕坐标转场景WGS84坐标,这里的场景坐标是包含了地形、倾斜、模型的坐标。
转换方法为:var cartesian3= viewer.scene.pickPosition(Cartesian2),目前IE浏览器不支持深度拾取,所以用不了这个方法。
2.屏幕坐标转地表坐标,这里是地球表面的WGS84坐标,包含地形,不包括模型、倾斜摄影表面。
转换方法为:var cartesian3= viewer.scene.globe.pick(viewer.camera.getPickRay(Cartesian2),viewer.scene);
3.屏幕坐标转椭球面坐标,这里的椭球面坐标是参考椭球的WGS84坐标,不包含地形、模型、倾斜摄影表面。
转换方法为:var cartesian3= viewer.scene.camera.pickEllipsoid(Cartesian2)
笛卡尔空间直角坐标系转平面坐标系
var cartesian2= Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3)



作者:为梦齐舞
链接:https://www.jianshu.com/p/ed4bb38db9a4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

おすすめ

転載: www.cnblogs.com/telwanggs/p/11289954.html