国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SuperMap iClient3D for Cesium 構(gòu)建隧道

這篇具有很好參考價(jià)值的文章主要介紹了SuperMap iClient3D for Cesium 構(gòu)建隧道。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

作者:kele

背景

前段時(shí)間看到一篇構(gòu)建隧道的文章(https://blog.csdn.net/supermapsupport/article/details/128453116),突然想到一個(gè)使用場(chǎng)景:隧道通常是建在山體下面,是否可以通過這種方式構(gòu)建出一條貫穿山體的隧道,來模擬實(shí)際的施工方案?答案是可以,效果圖如下:
SuperMap iClient3D for Cesium 構(gòu)建隧道

一、實(shí)現(xiàn)思路

1、生成隧道模型
2、地形挖洞
3、把隧道模型放在洞口中
該方案的難點(diǎn)在于,如何根據(jù)隧道的截面坐標(biāo),將地形挖洞,使洞口與隧道模型完全吻合
由于地形服務(wù)無法做布爾運(yùn)算,這里采用地形開挖方式實(shí)現(xiàn),并不展示開挖底面與側(cè)面,這樣就相當(dāng)于給地形裁剪一個(gè)口子,關(guān)鍵接口:
SuperMap iClient3D for Cesium 構(gòu)建隧道
SuperMap iClient3D for Cesium 構(gòu)建隧道

二、實(shí)現(xiàn)過程

1、構(gòu)建管道模型

用鼠標(biāo)繪制一條折線代表隧道的走向
然后使用iServer放樣分析,輸入隧道截面坐標(biāo),分析出一條帶管壁厚度的隧道

var s3mInstanceColc = new Cesium.S3MInstanceCollection(scene._context);
scene.primitives.add(s3mInstanceColc);
var sqlParameter = {
    "loftRegion":{"type":"REGION" , "parts":[8,8], "points":[{ x: -2.5, y: 7.5},
            { x: -6.5, y: 5.5 },
            { x: -10.5, y: 0 },
            { x: -10.5, y: -10.5 },  //隧道截面坐標(biāo),單位為米
            { x: 10.5, y: -10.5 },
            { x:10.5, y: 0},
            { x: 6.5, y: 5.5 },
            { x: 2.5, y: 7.5},
            { x: -1.5, y: 6.5},
            { x: 1.5, y: 6.5},
            { x: 5.5, y: 4.5 },
            { x: 9.5, y: 0},
            { x: 9.5, y: -9.5 },
            { x: -9.5, y: -9.5 },
            { x: -9.5, y: 0 },
            { x: -5.5, y: 4.5 }]},
    "loftLine":{"type":"LINE3D", "parts":[2], "points":posArray},
    "chamfer":"5",
    "lonlat":"TRUE"
};
var url = "http://10.10.4.82:8090/iserver/services/spatialAnalysis-test/restjsr/spatialanalyst/geometry/3d/loft.json?returnContent=true";
var queryData = JSON.stringify(sqlParameter);

$.ajax({
    type: "post",
    url: url,
    data: queryData,
    success: function (result) {
        var geometry = result.geometry;
        if (!geometry) {
            return;
        }
        var buffer = new Uint8Array(geometry.model).buffer;
        var position = geometry.position;
        var color = Cesium.Color.GRAY;
        s3mInstanceColc.add('visibleBody', {
            position: Cesium.Cartesian3.fromDegrees(position.x, position.y, position.z+10),
            color: color,
            attributes: 'test'
        }, buffer);
        viewer.flyTo(s3mInstanceColc);
    },
    error: function (msg) {
        console.log(msg);
    },
})

SuperMap iClient3D for Cesium 構(gòu)建隧道

2、根據(jù)隧道給地形挖洞

2.1、去除挖洞封邊效果,去除側(cè)面與底面貼圖
scene.globe.showExcavationSide = false;
scene.globe.excavationBottomTextureUrl = null;
scene.globe.excavationSideTextureUrl = null;
2.2、開挖方案

SuperMap iClient3D for Cesium 構(gòu)建隧道
從圖中可以看出,隧道口被堵死,我們需要拿到隧道與地形相交部分的節(jié)點(diǎn)坐標(biāo),然后將地形挖開。所以關(guān)鍵步驟就是如何得到相交坐標(biāo),如下圖所示:
SuperMap iClient3D for Cesium 構(gòu)建隧道
第一步獲取隧道截面坐標(biāo)(紅色點(diǎn)),第二步利用隧道方向向量,繪制出基于截面坐標(biāo)且平行與隧道的線段(通視分析),第三步得到線段與地形的交點(diǎn)(藍(lán)色點(diǎn)),第四步用得到的交點(diǎn)坐標(biāo)將地形挖開

2.3、獲取截面坐標(biāo)點(diǎn)(紅色點(diǎn))

①在構(gòu)建隧道模型時(shí),我們可以根據(jù)傳入的平面坐標(biāo),計(jì)算每個(gè)端點(diǎn)與中心點(diǎn)的距離
②在繪制隧道走向時(shí),我們根據(jù)繪制坐標(biāo)計(jì)算出隧道的方向向量,從而獲取線的角度,在這個(gè)角度基礎(chǔ)上±90°,得到隧道垂直方向,方向+距離即可計(jì)算出目標(biāo)點(diǎn)的世界坐標(biāo)。利用不同距離得到多個(gè)點(diǎn)坐標(biāo),再給各個(gè)點(diǎn)設(shè)置高度,即可得到所有的隧道截面世界坐標(biāo)。向量與角度的計(jì)算可以參考這篇文章:Cesium計(jì)算向量、角度、距離
關(guān)鍵代碼:

this.getPointByDirectionAndLen = function (position, angle, len) {
  let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
  let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(angle));
  let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
  Cesium.Matrix4.multiply(matrix, rotationZ, matrix);
  let result;
  result = Cesium.Matrix4.multiplyByPoint(
      matrix,
      new Cesium.Cartesian3(0, len, 0),
      new Cesium.Cartesian3()
  );
  return result;
};
2.4、獲取開挖點(diǎn)(藍(lán)色點(diǎn))

經(jīng)過上面的步驟,我們已經(jīng)得到隧道截面坐標(biāo)(下圖中C坐標(biāo))、隧道線向量(AB)。根據(jù)公式:D坐標(biāo)-C坐標(biāo) = 向量AB
可以得到D坐標(biāo)
SuperMap iClient3D for Cesium 構(gòu)建隧道
得到C、D坐標(biāo)后,使用通視分析(sightline)得到觀察點(diǎn)C到目標(biāo)點(diǎn)D,之間與地形的障礙點(diǎn);依次對(duì)每個(gè)截面坐標(biāo)做以上操作,即可得到所有障礙點(diǎn)
關(guān)鍵代碼:

this.getBarrierArray = function (LonLatArr,sightline) {
  let pointA = new Cesium.Cartesian3.fromDegrees(posArray[0].x,posArray[0].y,posArray[0].z);
  let pointB = new Cesium.Cartesian3.fromDegrees(posArray[1].x,posArray[1].y,posArray[1].z);
  let index = 0;
  //向量AB
  const positionvector = Cesium.Cartesian3.subtract(pointB, pointA, new Cesium.Cartesian3());
  myfun(index);
  let BarrierArray = [];
  function myfun(index){
    if(index < LonLatArr.length){
      let cart = new Cesium.Cartesian3.fromDegrees(LonLatArr[index][0], LonLatArr[index][1], LonLatArr[index][2]);
      let posD = {
        x: cart.x + positionvector.x,
        y: cart.y + positionvector.y,
        z: cart.z + positionvector.z
      };
      let thisArray = [];
      thisArray.push(cart);
      thisArray.push(posD);
      var name = "point" + index;
      sightline.viewPosition = Cartesian2toDegrees(thisArray[0]);
      sightline.addTargetPoint({
        position: Cartesian2toDegrees(thisArray[1]),
        name: name
      });
      setTimeout(()=>{
        let barrp = sightline.getBarrierPoint(name);
        console.log(barrp);

        if(!barrp.isViewer){
          BarrierArray.push(barrp.position.longitude * (180/Math.PI));
          BarrierArray.push(barrp.position.latitude * (180/Math.PI));
          BarrierArray.push(barrp.position.height);
        }
        sightline.removeAllTargetPoint();
      },30);
      index++;
      setTimeout(()=>{
        myfun(index)
      },40)
    }
  }

  function Cartesian2toDegrees(position) {
    var cartographic = Cesium.Cartographic.fromCartesian(position);
    var longitude = Cesium.Math.toDegrees(cartographic.longitude);
    var latitude = Cesium.Math.toDegrees(cartographic.latitude);
    var height = cartographic.height;

    return [longitude, latitude, height];
  }

  return BarrierArray
};

2.5、地形開挖

得到所有障礙點(diǎn)后,通過這些點(diǎn)進(jìn)行地形開挖

viewer.scene.globe.addExcavationRegion({
    name: 'ggg',
    position: brruipos,
    height: dep,
    transparent: false
});
范例:

鏈接:https://pan.baidu.com/s/1sDwfmI6hBFIS3eCt7tBGug
提取碼:6655文章來源地址http://www.zghlxwxcb.cn/news/detail-427221.html

到了這里,關(guān)于SuperMap iClient3D for Cesium 構(gòu)建隧道的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SuperMap iClient3D 11i (2023) SP1 for Cesium之移動(dòng)實(shí)體對(duì)象

    SuperMap iClient3D 11i (2023) SP1 for Cesium之移動(dòng)實(shí)體對(duì)象

    ?作者:nannan 目錄 前言 一、代碼思路 1.1 繪制面實(shí)體對(duì)象 1.2 鼠標(biāo)左鍵按下事件 1.3 鼠標(biāo)移動(dòng)事件 1.4 鼠標(biāo)左鍵抬起事件 二、運(yùn)行效果 三、注意事項(xiàng) ? ? ? ?SuperMap 官網(wǎng)三維前端范例?編輯線面,可以對(duì)面實(shí)體對(duì)象的節(jié)點(diǎn)進(jìn)行增加、刪除以及修改位置。那可不可以整個(gè)線/面對(duì)

    2024年02月09日
    瀏覽(20)
  • SuperMap iClient3D for WebGL查詢地圖柵格值

    SuperMap iClient3D for WebGL查詢地圖柵格值

    柵(shān)格數(shù)據(jù)就是將空間分割成有規(guī)律的網(wǎng)格,每一個(gè)網(wǎng)格稱為一個(gè)單元,并在各單元上賦予相應(yīng)的屬性值來表示實(shí)體的一種數(shù)據(jù)形式。每一個(gè)單元(像素)的位置由它的行列號(hào)定義,所表示的實(shí)體位置隱含在柵格行列位置中,數(shù)據(jù)組織中的每個(gè)數(shù)據(jù)表示地物或現(xiàn)象的非幾何

    2024年02月04日
    瀏覽(28)
  • 【超圖】SuperMap iClient3D for WebGL/WebGPU ——顏色(1)

    【超圖】SuperMap iClient3D for WebGL/WebGPU ——顏色(1)

    作者:taco ??????? 在項(xiàng)目中通常會(huì)出現(xiàn),高亮對(duì)象。給對(duì)象設(shè)置顏色的一些問題。那么針對(duì)顏色設(shè)置在超圖的?iClient3D for WebGl/WebGPU 中又提供了哪些方式呢?本篇文章將介紹一些顏色的設(shè)置方法。以及一些顏色的參數(shù)設(shè)置。 ??????? 在iClient3D for WebGl/WebGPU 中主要以Supe

    2024年02月04日
    瀏覽(26)
  • 【超圖】SuperMap iClient3D for WebGL/WebGPU —— 坐標(biāo)系&位置 —— Cartesian2

    【超圖】SuperMap iClient3D for WebGL/WebGPU —— 坐標(biāo)系&位置 —— Cartesian2

    作者:taco ??????? 說到關(guān)于地理必然逃不開位置的關(guān)系。借用百度百科的內(nèi)容來說 地理學(xué)(geography) ,是研究地球表層 空間地理 要素或者地理綜合體 空間分布規(guī)律 、時(shí)間演變過程和 區(qū)域 特征的一門學(xué)科。 所以 位置坐標(biāo)系 必然逃不掉了。那么在SuperMap iClient3D for Web

    2024年01月16日
    瀏覽(22)
  • iClient3D for Cesium&WebGL入門之使用vscode以服務(wù)方式運(yùn)行調(diào)試

    iClient3D for Cesium&WebGL入門之使用vscode以服務(wù)方式運(yùn)行調(diào)試

    作者:超圖研究院技術(shù)支持中心-于丁 iClient3D for CesiumWebGL入門之使用vscode以服務(wù)方式運(yùn)行調(diào)試 相信大家第一次使用SuperMap iClient3D for Cesium或SuperMap iClient3D for WebGL的時(shí)候,都遇到過和我一樣的事情: 在文件夾中直接打開html的示例代碼文件于瀏覽器中; 或者使用vscode安裝open

    2024年02月04日
    瀏覽(23)
  • 超圖iClient3DforCesium地形、影像、模型、在線影像交互示例

    數(shù)據(jù)源:基于iserver發(fā)布的三維場(chǎng)景(地形、影像、BIM模型) + 在線arcgis影像 應(yīng)用:目錄樹展示源數(shù)據(jù)列表、目錄樹控制源數(shù)據(jù)可視化結(jié)果顯隱、BIM模型點(diǎn)選查詢關(guān)聯(lián)屬性

    2024年02月03日
    瀏覽(27)
  • SuperMap Hi-Fi 3D SDK for Unity設(shè)置渲染范圍

    SuperMap Hi-Fi 3D SDK for Unity設(shè)置渲染范圍

    kele ????在三維項(xiàng)目中經(jīng)常會(huì)使用到大屏,有可能會(huì)用到4K屏、8K屏、長(zhǎng)屏、帶魚屏等高分辨率的屏幕,這些屏幕的其中一個(gè)特點(diǎn)是其長(zhǎng)寬比比較大,有些時(shí)候會(huì)是幾塊16:9的屏幕橫向拼接而成,這就使得這整個(gè)屏幕在水平方向上跨度很大,渲染內(nèi)容增加。通常情況下會(huì)是

    2024年02月09日
    瀏覽(20)
  • SuperMap Hi-Fi 3D SDK for Unity基礎(chǔ)開發(fā)教程

    SuperMap Hi-Fi 3D SDK for Unity基礎(chǔ)開發(fā)教程

    作者:kele 眾所周知,游戲引擎(Unity)功能強(qiáng)大,可以做出很多炫酷的游戲和動(dòng)畫效果,這部分功能的實(shí)現(xiàn)往往不僅僅是靠可視化界面就能夠?qū)崿F(xiàn)的,還需要代碼開發(fā)。SuperMap Hi-Fi SDKS for Unity游戲引擎插件能夠?qū)崿F(xiàn)地理數(shù)據(jù)與游戲引擎相結(jié)合,碰撞出更絢爛的火花,目前Sup

    2024年02月03日
    瀏覽(37)
  • SuperMap Hi-Fi 3D SDK for Unreal問題集錦

    ###前言 使用SuperMap Hi-Fi 3D SDK for Unreal,會(huì)遇到一些崩潰或者加加載不上等問題,本文檔手收集記錄一些使用過程總可能會(huì)遇到的一些問題并給予相應(yīng)的解決方案,很多問題新版本已做優(yōu)化,推薦大家可使用前,可在http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx 地址下載最

    2024年02月06日
    瀏覽(19)
  • SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    kele ????在交通,電力,規(guī)劃等行業(yè)中,有的對(duì)象常常具有很強(qiáng)的質(zhì)感,比如金屬質(zhì)感的 鋼軌,電力塔;陶瓷材質(zhì)的絕緣子;玻璃材質(zhì)的建筑幕墻等,但常規(guī)方式的表現(xiàn)效果 往往差強(qiáng)人意。 ????游戲引擎(Unity3D)中已有豐富的材質(zhì)資源庫,比如玻璃,金屬等材質(zhì),這

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包