溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

TE如何計(jì)算地圖的縮放級(jí)別

發(fā)布時(shí)間:2022-01-13 17:10:07 來(lái)源:億速云 閱讀:157 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“TE如何計(jì)算地圖的縮放級(jí)別”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“TE如何計(jì)算地圖的縮放級(jí)別”這篇文章吧。

在二維地圖中,地圖是分級(jí)別顯示的,每個(gè)級(jí)別顯示的地圖要素并不完全相同,在TE的三維地圖中,地形數(shù)據(jù)也是分級(jí)別顯示的,但是,TE的API中并沒(méi)有提供當(dāng)前視野是顯示到哪一個(gè)級(jí)別,只提供SGWorld.Terrain.Levels,獲取三維地形總共有多少級(jí),可能是因?yàn)樵谌S的視野中,不同的地方可能顯示的地圖級(jí)別不一樣。

二維地圖的分級(jí)切片示例:

TE如何計(jì)算地圖的縮放級(jí)別

不過(guò),在TE中提供了一個(gè)現(xiàn)成的工具,是用來(lái)計(jì)算TE中加載的矢量圖層,設(shè)置最優(yōu)的塊寬度,矢量按照此設(shè)置,能在TE中達(dá)到最優(yōu)的性能效果。

TE如何計(jì)算地圖的縮放級(jí)別

此功能是一個(gè)網(wǎng)頁(yè),嵌入到TE中,通過(guò)分析其中的代碼,可以作為模糊的計(jì)算TE當(dāng)前的縮放級(jí)別,下邊根據(jù)其中代碼進(jìn)行簡(jiǎn)要分析:

function init()

{

    //在初始化中定位的塊寬度值,可以作為級(jí)別的指示,不過(guò),下邊定義的編號(hào)順序要反過(guò)來(lái),級(jí)別越高的塊寬度越小

       realNumLevels = SGWorld.Terrain.Levels;  

addLevel(22, "40075 " + SGLang.i18n("Text7"));

addLevel(21, "20037 " + SGLang.i18n("Text7"));

addLevel(20, "10018 " + SGLang.i18n("Text7"));

addLevel(19, "5009 " + SGLang.i18n("Text7"));

addLevel(18, "2504 " + SGLang.i18n("Text9"));

addLevel(17, "1252 " + SGLang.i18n("Text7"));

addLevel(16, "626 " + SGLang.i18n("Text10"));

addLevel(15, "313 " + SGLang.i18n("Text11"));

addLevel(14, "156 " + SGLang.i18n("Text7"));

addLevel(13, "78 " + SGLang.i18n("Text12"));

addLevel(12, "39 " + SGLang.i18n("Text13"));

addLevel(11, "19 " + SGLang.i18n("Text7"));

addLevel(10, "9783 " + SGLang.i18n("Text14"));

addLevel(9, "4891 " + SGLang.i18n("Text15"));

addLevel(8, "2445 " + SGLang.i18n("Text8"));

addLevel(7, "1222 " + SGLang.i18n("Text16"));

addLevel(6, "611 " + SGLang.i18n("Text17"));

addLevel(5, "305 " + SGLang.i18n("Text8"));

addLevel(4, "152 " + SGLang.i18n("Text18"));

addLevel(3, "76 " + SGLang.i18n("Text19"));

addLevel(2, "38 " + SGLang.i18n("Text8"));

addLevel(1, "19 " + SGLang.i18n("Text8"));

}

function getBestViewPoint() {

//獲得當(dāng)前屏幕中心的空間坐標(biāo),當(dāng)然視野不能夠指向天空

    var worldPointMid = SGWorld.Window.CenterPixelToWorld();

    if (worldPointMid.Type == 32) {

        alert(SGLang.i18n("Text20"));

        return null;

    }

    return worldPointMid.Position;

}

//根據(jù)位置,計(jì)算級(jí)別,這是里邊的關(guān)鍵函數(shù),包含下邊的函數(shù)

function getPreferredLevel(viewPoint) 

{

 //計(jì)算當(dāng)前視野的位置和屏幕中心點(diǎn)位置的距離

    var DistCameraToTerrain = SGWorld.Navigate.GetPosition().DistanceTo(viewPoint);

//半程的真正寬度

    var HalfRealWidth = DistCameraToTerrain * Math.tan((53.0 / 2.0) * Math.PI / 180.0);

    var NumBlocksInViewWidth = 4;

  //將塊寬度轉(zhuǎn)換為等級(jí)

    var IdealBlockSize = HalfRealWidth * 2.0 / NumBlocksInViewWidth;

    var blockLevel = BlockWidthToLevel(IdealBlockSize);

    var LayerType = -1;

    if (document.all["layertype"][0].checked)

        LayerType = 0; // "points";

    if (document.all["layertype"][1].checked)

        LayerType = 1; //"lines";

    if (document.all["layertype"][2].checked)

        LayerType = 2; //"polygons";

    if (LayerType == -1) 

    {

        alert(SGLang.i18n("Text21"));

        return -1;

    }

    else if (LayerType != 0)

        blockLevel += 1;

    blockLevel = Math.min(blockLevel, fakeNumLevels - 1);

    return blockLevel;

}

//將塊寬度轉(zhuǎn)換為等級(jí)

function BlockWidthToLevel(blockWidth) 

{

    var numOfBlocksInLevel = blockWidth / bestLevelWidth;

    var deltaFromBestLevel = Math.log(numOfBlocksInLevel) / Math.log(2.0);

    var L1 = bestLevelWidth * Math.pow(2, Math.floor(deltaFromBestLevel));

    var L2 = bestLevelWidth * Math.pow(2, Math.floor(deltaFromBestLevel + 0.5));

    if (Math.abs(L1 - blockWidth) <= Math.abs(L2 - blockWidth))

        deltaFromBestLevel = Math.floor(deltaFromBestLevel);

    else

        deltaFromBestLevel = Math.ceil(deltaFromBestLevel);

    var blockLevel = Math.floor(fakeNumLevels - 1.0 - deltaFromBestLevel);

    blockLevel = Math.max(0, Math.min(fakeNumLevels - 1, blockLevel));

    return blockLevel;

}

地圖縮放級(jí)別的計(jì)算結(jié)果,可以幫助在地圖不同縮放的情況下,顯示不同地物或者其他信息。

以上是“TE如何計(jì)算地圖的縮放級(jí)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

te
AI