個人筆記|三維GIS開發-cesium坐標系統

三維GIS開發-vue+cesium坐標系統

  • 屏幕坐標系/平面直角坐標系

  • 笛卡爾空間直角坐標系/世界坐標

  • 地理坐標/弧度坐標


屏幕坐標系統/平面直角坐標系 - Cartesian2

常用來描述屏幕坐標系,比如鼠標在電腦屏幕上的點擊位置,返回的就是Cartesian2.具體的是鼠標點擊位置距離canvas左上角的像素值。屏幕左上角為原點(0, 0),水平方向為X軸,向右為正,垂直方向為Y軸,向下為正。

常用方法:

  • getPickRay(windowPosition, result) → Ray
    在世界坐標系中創建從相機位置到 windowPosition處的像素光線。

    Name Type Description
    windowPosition Cartesian2 像素的x和y坐標。
    result Ray (可選)將結果存儲到的對象。

    返回Cartesian3射線的位置和方向。

  • pickPosition (windowPosition, result ) → [Cartesian3]

    返回從深度緩沖區和窗口位置重構的笛卡爾位置。

    Name Type Description
    windowPosition Cartesian2 窗口坐標以執行拾取
    result Cartesian3 (可選)恢復結果的對象。

    返回Cartesian3笛卡爾位置


笛卡爾空間直角坐標系/世界坐標 - Cartesian3

笛卡爾空間坐標的原點就是橢球的中心,我們在計算機上進行繪圖時,不方便使用經緯度直接進行繪圖,一般會將坐標系轉換為笛卡爾坐標系,使用計算機圖形學中的知識進行繪圖。

new Cesium.Cartesian3(x, y, z)

返回3D笛卡爾點

類型是Number哦!
類型是Number哦!
類型是Number哦!


地理坐標/弧度坐標 - Cartographic

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 )

由經度,緯度和高度定義的位置。

Name Type Description
longitude Number (可選)經度,以弧度為單位。
latitude Number (可選)緯度,以弧度為單位。
height Number (可選)橢球上方的高度,以米為單位。

單位是弧度哦!

單位是弧度哦!

單位是弧度哦!


坐標相互轉換

只寫一下自己用得多的

以后要是有用到新的再說

弧角轉換

簡記版本:弧度就是幾分之\pi,角度就是多少多少度,Math.xxx(x)里的x通常需要是弧度!!!

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

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

兩C(Cartesian3, Cartographic)互換

Cartesian3→Cartographic

通常是對獲取的坐標進行計算的時候用,比如同文件夾下的測距測面里,測距測面都是首先要把cartesian3形式的坐標轉換成Cartographic形式拿到經緯高度,然后才好計算

Cesium.Cartographic.fromCartesian(position)

Cartographic→Cartesian3

通常是算好一個需要的點以后要添加實體的時候用,比如測距的時候添加線段中點

Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographicPosition)

世界坐標Cartesian3轉角度WGS84地理坐標

思路:先從笛卡爾坐標轉到弧度坐標,再從弧轉角

/**
     * cartographic 轉Degrees下地理坐標
     * @param point radius下的WGS84坐標
     * @return degrees下的WGS84坐標
     */
    cartesian3ToWGS84(point) {
      const cartographic = Cesium.Cartographic.fromCartesian(point);
      const lat = Cesium.Math.toDegrees(cartographic.latitude);
      const lng = Cesium.Math.toDegrees(cartographic.longitude);
      const alt = cartographic.height;
      return {
        longitude: lng,
        latitude: lat,
        height: alt,
      };
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容