Cesium如何獲取貼地坐標


1.51版新增的sampleHeight和clampToHeight函數雖然能獲取3ditles數據指定位置的求交點,但是有一個問題,它只是以當前視角相機能看到的視野進行計算,視野范圍之外,要么模型過於粗糙,要么就沒有調度,很可能求取不到數值。

參考:https://www.jianshu.com/p/a5d07bb47809

/**
 * 獲取坐標的 貼模型高度
 * opts支持:   是否異步 asyn:true  異步回調方法callback返回“新高度”和“原始的Cartographic坐標”
 */
function getSurface3DTilesHeight(scene, position, opts) {
  opts = opts || {};

  //原始的Cartographic坐標
  opts.cartesian = opts.cartesian || Cesium.Cartographic.fromCartesian(position);
  var carto = opts.cartesian;
  var callback = opts.callback || opts.calback; //兼容不同參數名

  //是否異步求精確高度
  if (opts.asyn) {
    scene.clampToHeightMostDetailed([position], opts.objectsToExclude, 0.2).then(function (clampedPositions) {
      var clampedPt = clampedPositions[0];
      if (Cesium.defined(clampedPt)) {
        var cartiles = Cesium.Cartographic.fromCartesian(clampedPt);
        var heightTiles = cartiles.height;
        if (Cesium.defined(heightTiles) && heightTiles > -1000) {
          if (callback) callback(heightTiles, cartiles);
          return;
        }
      }
      //說明沒在模型上,繼續求地形上的高度
      getSurfaceTerrainHeight(scene, position, opts);
    });
  } else {
    //取貼模型高度
    var heightTiles = scene.sampleHeight(carto, opts.objectsToExclude, 0.2);
    if (Cesium.defined(heightTiles) && heightTiles > -1000) {
      if (callback) callback(heightTiles, carto);
      return heightTiles;
    }
  }

  return 0; //表示取值失敗
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM