两种方法合并3dtiles(分别使用js/java)

news2024/10/7 18:32:20

目录

前言:

需合并的json目录

aa/tileset.json

bb/tileset.json

cc/tileset.json

dd/tileset.json

ee/tileset.json

js源码:

运行命令:

生成结果:

java源码:

Matrix.java

ThreeDTilesJoin2.java

pom文件

运行程序:

生成合成文件

遇到的问题:

求矩阵运算的jar包:Apache Commons Math

计算代数余子式

计算行列式

转置矩阵

计算逆矩阵

矩阵相乘

需要注意


前言:

需要简单了解3dtile基本结构

需合并的json目录

aa/tileset.json
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 740.579323830987,
    "root": {
        "boundingVolume": {
            "box": [-3675.8994140625, 545.641296386719, 11.9535970687866, 272.260009765625, 0, 0, 0, 249.891235351563, 0, 0, 0, 23.3086099624634]
        },
        "children": [{
            "boundingVolume": {
                "box": [-3675.8994140625, 545.641296386719, 11.9535970687866, 272.260009765625, 0, 0, 0, 249.891235351563, 0, 0, 0, 23.3086099624634]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-3935.02001953125, 574.504516601563, 15.7210890054703, 13.139404296875, 0, 0, 0, 25.2759399414063, 0, 0, 0, 11.8160890340805]
                },
                "content": {
                    "uri": "Tile_+002_+029/Tile_+002_+029.json"
                },
                "geometricError": 30.8405098086856
            }, {
                "boundingVolume": {
                    "box": [-3931.19152832031, 630.064575195313, 5.76587748527527, 9.6800537109375, 0, 0, 0, 30.9617309570313, 0, 0, 0, 1.63892340660095]
                },
                "content": {
                    "uri": "Tile_+002_+030/Tile_+002_+030.json"
                },
                "geometricError": 32.4810451438208
            }, {
                "boundingVolume": {
                    "box": [-3872.32775878906, 566.557830810547, 15.5438475459814, 50.4261474609375, 0, 0, 0, 33.1085510253906, 0, 0, 0, 15.1476407200098]
                },
                "content": {
                    "uri": "Tile_+003_+029/Tile_+003_+029.json"
                },
                "geometricError": 62.1966519849389
            }, {
                "boundingVolume": {
                    "box": [-3872.03454589844, 628.938293457031, 18.1283311843872, 50.4095458984375, 0, 0, 0, 30.4552612304688, 0, 0, 0, 14.090537071228]
                },
                "content": {
                    "uri": "Tile_+003_+030/Tile_+003_+030.json"
                },
                "geometricError": 60.5573157368986
            }, {
                "boundingVolume": {
                    "box": [-3749.26013183594, 352.109008789063, 19.1447021961212, 26.1177978515625, 0, 0, 0, 46.5369567871094, 0, 0, 0, 15.1629683971405]
                },
                "content": {
                    "uri": "Tile_+004_+027/Tile_+004_+027.json"
                },
                "geometricError": 55.4774127211521
            }, {
                "boundingVolume": {
                    "box": [-3740.12866210938, 448.188674926758, 9.04387199878693, 17.607421875, 0, 0, 0, 50.3167572021484, 0, 0, 0, 5.57954967021942]
                },
                "content": {
                    "uri": "Tile_+004_+028/Tile_+004_+028.json"
                },
                "geometricError": 53.5997083475893
            }, {
                "boundingVolume": {
                    "box": [-3772.3740234375, 548.456268310547, 19.1229840517044, 50.480712890625, 0, 0, 0, 50.5904846191406, 0, 0, 0, 15.4035738706589]
                },
                "content": {
                    "uri": "Tile_+004_+029/Tile_+004_+029.json"
                },
                "geometricError": 73.1092989703366
            }, {
                "boundingVolume": {
                    "box": [-3772.05346679688, 619.552154541016, 18.2076432704926, 50.41162109375, 0, 0, 0, 21.6935119628906, 0, 0, 0, 14.1500952243805]
                },
                "content": {
                    "uri": "Tile_+004_+030/Tile_+004_+030.json"
                },
                "geometricError": 56.6759666652712
            }, {
                "boundingVolume": {
                    "box": [-3689.02783203125, 297.003692626953, 10.0964844226837, 5.725341796875, 0, 0, 0, 1.25363159179688, 0, 0, 0, 4.35963416099548]
                },
                "content": {
                    "uri": "Tile_+005_+026/Tile_+005_+026.json"
                },
                "geometricError": 7.30462462257396
            }, {
                "boundingVolume": {
                    "box": [-3673.70959472656, 348.031799316406, 12.3951093554497, 50.5650634765625, 0, 0, 0, 50.4035339355469, 0, 0, 0, 10.4135625958443]
                },
                "content": {
                    "uri": "Tile_+005_+027/Tile_+005_+027.json"
                },
                "geometricError": 72.1511203206034
            }, {
                "boundingVolume": {
                    "box": [-3673.11413574219, 447.839309692383, 6.34941649436951, 50.5919189453125, 0, 0, 0, 50.5899505615234, 0, 0, 0, 10.5448610782623]
                },
                "content": {
                    "uri": "Tile_+005_+028/Tile_+005_+028.json"
                },
                "geometricError": 72.3192882676973
            }, {
                "boundingVolume": {
                    "box": [-3672.49230957031, 547.832534790039, 18.5858655571938, 50.5924072265625, 0, 0, 0, 50.5895843505859, 0, 0, 0, 16.6763414740562]
                },
                "content": {
                    "uri": "Tile_+005_+029/Tile_+005_+029.json"
                },
                "geometricError": 73.4642639567206
            }, {
                "boundingVolume": {
                    "box": [-3671.8740234375, 647.7919921875, 11.636326789856, 50.582763671875, 0, 0, 0, 50.5528564453125, 0, 0, 0, 21.4873533248901]
                },
                "content": {
                    "uri": "Tile_+005_+030/Tile_+005_+030.json"
                },
                "geometricError": 74.6720404728155
            }, {
                "boundingVolume": {
                    "box": [-3665.76831054688, 730.397674560547, 12.528514623642, 44.778076171875, 0, 0, 0, 33.1688537597656, 0, 0, 0, 19.6651880741119]
                },
                "content": {
                    "uri": "Tile_+005_+031/Tile_+005_+031.json"
                },
                "geometricError": 59.0928810211615
            }, {
                "boundingVolume": {
                    "box": [-3622.38244628906, 395.646423339844, 5.87387609481812, 1.3489990234375, 0, 0, 0, 2.1663818359375, 0, 0, 0, 0.234408378601074]
                },
                "content": {
                    "uri": "Tile_+006_+027/Tile_+006_+027.json"
                },
                "geometricError": 2.56280235528877
            }, {
                "boundingVolume": {
                    "box": [-3591.23608398438, 447.522384643555, 11.8303036689758, 32.471923828125, 0, 0, 0, 50.2840118408203, 0, 0, 0, 7.67854261398315]
                },
                "content": {
                    "uri": "Tile_+006_+028/Tile_+006_+028.json"
                },
                "geometricError": 60.3478889488445
            }, {
                "boundingVolume": {
                    "box": [-3572.49584960938, 547.324279785156, 11.0218200683594, 50.58984375, 0, 0, 0, 50.475830078125, 0, 0, 0, 21.2449989318848]
                },
                "content": {
                    "uri": "Tile_+006_+029/Tile_+006_+029.json"
                },
                "geometricError": 74.5552928526268
            }, {
                "boundingVolume": {
                    "box": [-3571.88171386719, 647.205322265625, 10.7785501480103, 50.5970458984375, 0, 0, 0, 50.5909423828125, 0, 0, 0, 22.133563041687]
                },
                "content": {
                    "uri": "Tile_+006_+030/Tile_+006_+030.json"
                },
                "geometricError": 74.8959219033318
            }, {
                "boundingVolume": {
                    "box": [-3571.29382324219, 746.071563720703, 18.3907251358032, 50.5609130859375, 0, 0, 0, 49.4609680175781, 0, 0, 0, 14.5039548873901]
                },
                "content": {
                    "uri": "Tile_+006_+031/Tile_+006_+031.json"
                },
                "geometricError": 72.2022021595952
            }, {
                "boundingVolume": {
                    "box": [-3509.61206054688, 576.114654541016, 6.37169981002808, 13.11669921875, 0, 0, 0, 21.0632019042969, 0, 0, 0, 1.91424798965454]
                },
                "content": {
                    "uri": "Tile_+007_+029/Tile_+007_+029.json"
                },
                "geometricError": 24.8871576967365
            }, {
                "boundingVolume": {
                    "box": [-3478.34790039063, 646.816314697266, 16.745255947113, 44.12158203125, 0, 0, 0, 50.3578186035156, 0, 0, 0, 12.6729989051819]
                },
                "content": {
                    "uri": "Tile_+007_+030/Tile_+007_+030.json"
                },
                "geometricError": 68.1412415259338
            }, {
                "boundingVolume": {
                    "box": [-3471.40478515625, 741.000762939453, 17.6509721279144, 50.4560546875, 0, 0, 0, 44.9321594238281, 0, 0, 0, 13.3580210208893]
                },
                "content": {
                    "uri": "Tile_+007_+031/Tile_+007_+031.json"
                },
                "geometricError": 68.8705243969495
            }, {
                "boundingVolume": {
                    "box": [-3412.68273925781, 734.155242919922, 10.6947717666626, 9.0433349609375, 0, 0, 0, 17.5325012207031, 0, 0, 0, 5.41533184051514]
                },
                "content": {
                    "uri": "Tile_+008_+031/Tile_+008_+031.json"
                },
                "geometricError": 20.4571827291191
            }],
            "geometricError": 740.579323830987
        }],
        "geometricError": 740.579323830987,
        "transform": [-0.860048066843865, -0.510213017001851, 0.0, 0.0, 0.268197168561964, -0.452090496848062, 0.850696456695934, 0.0, -0.434036405723617, 0.731639843052264, 0.525657244376012, 0.0, -2770907.60361716, 4670821.10507043, 3333353.96012987, 1.0]
    }
}
bb/tileset.json
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 700.379674431607,
    "root": {
        "boundingVolume": {
            "box": [1678.00695800781, -167.3508644104, 14.9421647787094, 237.2333984375, 0, 0, 0, 257.251705169678, 0, 0, 0, 13.2210794687271]
        },
        "children": [{
            "boundingVolume": {
                "box": [1678.00695800781, -167.3508644104, 14.9421647787094, 237.2333984375, 0, 0, 0, 257.251705169678, 0, 0, 0, 13.2210794687271]
            },
            "children": [{
                "boundingVolume": {
                    "box": [1456.77575683594, -283.401695251465, 9.57817316055298, 16.002197265625, 0, 0, 0, 49.5448379516602, 0, 0, 0, 5.28457307815552]
                },
                "content": {
                    "uri": "Tile_+056_+021/Tile_+056_+021.json"
                },
                "geometricError": 52.3324755539293
            }, {
                "boundingVolume": {
                    "box": [1471.31585693359, -229.578811645508, 4.45599508285522, 1.51898193359375, 0, 0, 0, 4.85548400878906, 0, 0, 0, 0.0174999237060547]
                },
                "content": {
                    "uri": "Tile_+056_+022/Tile_+056_+022.json"
                },
                "geometricError": 5.08756693533562
            }, {
                "boundingVolume": {
                    "box": [1531.82299804688, -348.998123168945, 10.2060108184814, 40.3277587890625, 0, 0, 0, 14.9526214599609, 0, 0, 0, 6.00887680053711]
                },
                "content": {
                    "uri": "Tile_+057_+020/Tile_+057_+020.json"
                },
                "geometricError": 43.4282813138826
            }, {
                "boundingVolume": {
                    "box": [1522.18682861328, -284.460159301758, 9.90673196315765, 50.5840454101563, 0, 0, 0, 50.5893402099609, 0, 0, 0, 8.18564665317535]
                },
                "content": {
                    "uri": "Tile_+057_+021/Tile_+057_+021.json"
                },
                "geometricError": 72.0071649495143
            }, {
                "boundingVolume": {
                    "box": [1522.80364990234, -184.549896240234, 9.43511211872101, 50.5891723632813, 0, 0, 0, 50.506591796875, 0, 0, 0, 5.92474162578583]
                },
                "content": {
                    "uri": "Tile_+057_+022/Tile_+057_+022.json"
                },
                "geometricError": 71.7306262252761
            }, {
                "boundingVolume": {
                    "box": [1536.63287353516, -84.6287059783936, 10.7433174848557, 37.3843383789063, 0, 0, 0, 50.4350147247314, 0, 0, 0, 7.403111577034]
                },
                "content": {
                    "uri": "Tile_+057_+023/Tile_+057_+023.json"
                },
                "geometricError": 63.2145990047746
            }, {
                "boundingVolume": {
                    "box": [1548.78259277344, 15.3128070831299, 11.0693670511246, 25.8543701171875, 0, 0, 0, 50.38356590271, 0, 0, 0, 7.47109162807465]
                },
                "content": {
                    "uri": "Tile_+057_+024/Tile_+057_+024.json"
                },
                "geometricError": 57.120656310518
            }, {
                "boundingVolume": {
                    "box": [1557.44226074219, 77.4114685058594, 8.79704344272614, 17.3408203125, 0, 0, 0, 12.489372253418, 0, 0, 0, 5.12078511714935]
                },
                "content": {
                    "uri": "Tile_+057_+025/Tile_+057_+025.json"
                },
                "geometricError": 21.9752339830746
            }, {
                "boundingVolume": {
                    "box": [1621.77416992188, -364.557540893555, 10.4570751190186, 50.3675537109375, 0, 0, 0, 30.0714874267578, 0, 0, 0, 6.32948684692383]
                },
                "content": {
                    "uri": "Tile_+058_+020/Tile_+058_+020.json"
                },
                "geometricError": 59.0020951037097
            }, {
                "boundingVolume": {
                    "box": [1622.17553710938, -285.081962585449, 12.8714859485626, 50.5882568359375, 0, 0, 0, 50.5891189575195, 0, 0, 0, 8.59081149101257]
                },
                "content": {
                    "uri": "Tile_+058_+021/Tile_+058_+021.json"
                },
                "geometricError": 72.0571490462324
            }, {
                "boundingVolume": {
                    "box": [1622.79650878906, -185.08927154541, 13.1854486465454, 50.589111328125, 0, 0, 0, 50.5890426635742, 0, 0, 0, 8.58977794647217]
                },
                "content": {
                    "uri": "Tile_+058_+022/Tile_+058_+022.json"
                },
                "geometricError": 72.057572175005
            }, {
                "boundingVolume": {
                    "box": [1623.42102050781, -85.0964012145996, 10.2867512702942, 50.5892333984375, 0, 0, 0, 50.5891151428223, 0, 0, 0, 5.54497861862183]
                },
                "content": {
                    "uri": "Tile_+058_+023/Tile_+058_+023.json"
                },
                "geometricError": 71.7584552136979
            }, {
                "boundingVolume": {
                    "box": [1624.04296875, 14.8963890075684, 10.8929178714752, 50.5892333984375, 0, 0, 0, 50.5891761779785, 0, 0, 0, 6.47345900535583]
                },
                "content": {
                    "uri": "Tile_+058_+024/Tile_+058_+024.json"
                },
                "geometricError": 71.8362092102733
            }, {
                "boundingVolume": {
                    "box": [1624.42224121094, 76.6347541809082, 9.87600064277649, 50.348876953125, 0, 0, 0, 12.3346061706543, 0, 0, 0, 5.74333453178406]
                },
                "content": {
                    "uri": "Tile_+058_+025/Tile_+058_+025.json"
                },
                "geometricError": 52.1549404310852
            }, {
                "boundingVolume": {
                    "box": [1721.67340087891, -379.611175537109, 16.0873470306396, 50.4609985351563, 0, 0, 0, 44.5035400390625, 0, 0, 0, 12.0758972167969]
                },
                "content": {
                    "uri": "Tile_+059_+020/Tile_+059_+020.json"
                },
                "geometricError": 68.3571850119951
            }, {
                "boundingVolume": {
                    "box": [1722.16735839844, -285.70393371582, 5.40806865692139, 50.589111328125, 0, 0, 0, 50.5890960693359, 0, 0, 0, 0.90021276473999]
                },
                "content": {
                    "uri": "Tile_+059_+021/Tile_+059_+021.json"
                },
                "geometricError": 71.5494598798882
            }, {
                "boundingVolume": {
                    "box": [1722.79113769531, -185.71117401123, 12.7560157775879, 50.5909423828125, 0, 0, 0, 50.5891342163086, 0, 0, 0, 8.14298439025879]
                },
                "content": {
                    "uri": "Tile_+059_+022/Tile_+059_+022.json"
                },
                "geometricError": 72.0070284535943
            }, {
                "boundingVolume": {
                    "box": [1723.41357421875, -85.7185573577881, 12.8922352790833, 50.5914306640625, 0, 0, 0, 50.5892429351807, 0, 0, 0, 8.30024099349976]
                },
                "content": {
                    "uri": "Tile_+059_+023/Tile_+059_+023.json"
                },
                "geometricError": 72.025400782929
            }, {
                "boundingVolume": {
                    "box": [1724.03527832031, 14.2743854522705, 13.8084480762482, 50.5885009765625, 0, 0, 0, 50.5892391204834, 0, 0, 0, 9.1709201335907]
                },
                "content": {
                    "uri": "Tile_+059_+024/Tile_+059_+024.json"
                },
                "geometricError": 72.1288660796897
            }, {
                "boundingVolume": {
                    "box": [1724.40911865234, 75.4231605529785, 11.6732699871063, 50.3403930664063, 0, 0, 0, 11.7451057434082, 0, 0, 0, 7.08151745796204]
                },
                "content": {
                    "uri": "Tile_+059_+025/Tile_+059_+025.json"
                },
                "geometricError": 52.1751911593196
            }, {
                "boundingVolume": {
                    "box": [1797.44390869141, -380.166076660156, 13.3256312608719, 26.4188842773438, 0, 0, 0, 44.4364929199219, 0, 0, 0, 9.40558898448944]
                },
                "content": {
                    "uri": "Tile_+060_+020/Tile_+060_+020.json"
                },
                "geometricError": 52.5454513124314
            }, {
                "boundingVolume": {
                    "box": [1812.28704833984, -286.175262451172, 11.5870990753174, 40.7161254882813, 0, 0, 0, 50.4384155273438, 0, 0, 0, 7.63290023803711]
                },
                "content": {
                    "uri": "Tile_+060_+021/Tile_+060_+021.json"
                },
                "geometricError": 65.2694247081303
            }, {
                "boundingVolume": {
                    "box": [1822.78210449219, -186.271453857422, 15.3006939888, 50.5889892578125, 0, 0, 0, 50.5271301269531, 0, 0, 0, 11.2427039146423]
                },
                "content": {
                    "uri": "Tile_+060_+022/Tile_+060_+022.json"
                },
                "geometricError": 72.3784160113043
            }, {
                "boundingVolume": {
                    "box": [1823.40588378906, -86.3404502868652, 12.5961084365845, 50.58740234375, 0, 0, 0, 50.5890693664551, 0, 0, 0, 8.5899076461792]
                },
                "content": {
                    "uri": "Tile_+060_+023/Tile_+060_+023.json"
                },
                "geometricError": 72.0564065758371
            }, {
                "boundingVolume": {
                    "box": [1824.02978515625, 13.6523685455322, 15.3824796676636, 50.5882568359375, 0, 0, 0, 50.5891551971436, 0, 0, 0, 11.0295190811157]
                },
                "content": {
                    "uri": "Tile_+060_+024/Tile_+060_+024.json"
                },
                "geometricError": 72.3884289401293
            }, {
                "boundingVolume": {
                    "box": [1824.38507080078, 73.7163772583008, 9.60402154922485, 50.3248901367188, 0, 0, 0, 10.6603164672852, 0, 0, 0, 5.04884958267212]
                },
                "content": {
                    "uri": "Tile_+060_+025/Tile_+060_+025.json"
                },
                "geometricError": 51.6887588994351
            }, {
                "boundingVolume": {
                    "box": [1873.77648925781, -141.348236083984, 4.44181227684021, 1.0274658203125, 0, 0, 0, 4.982177734375, 0, 0, 0, 0.262368440628052]
                },
                "content": {
                    "uri": "Tile_+061_+022/Tile_+061_+022.json"
                },
                "geometricError": 5.09378230664111
            }, {
                "boundingVolume": {
                    "box": [1883.65350341797, -86.6555309295654, 9.82255268096924, 10.8458862304688, 0, 0, 0, 50.2822132110596, 0, 0, 0, 5.70098972320557]
                },
                "content": {
                    "uri": "Tile_+061_+023/Tile_+061_+023.json"
                },
                "geometricError": 51.7536037136625
            }, {
                "boundingVolume": {
                    "box": [1893.34643554688, 13.2779121398926, 10.3329606056213, 19.9166259765625, 0, 0, 0, 50.3416175842285, 0, 0, 0, 6.1720118522644]
                },
                "content": {
                    "uri": "Tile_+061_+024/Tile_+061_+024.json"
                },
                "geometricError": 54.4889363228122
            }, {
                "boundingVolume": {
                    "box": [1894.64739990234, 70.7054080963135, 9.54776215553284, 20.5929565429688, 0, 0, 0, 7.8891658782959, 0, 0, 0, 5.28816103935242]
                },
                "content": {
                    "uri": "Tile_+061_+025/Tile_+061_+025.json"
                },
                "geometricError": 22.6775978581064
            }],
            "geometricError": 700.379674431607
        }],
        "geometricError": 700.379674431607,
        "transform": [-0.860048066843865, -0.510213017001851, 0.0, 0.0, 0.268197168561964, -0.452090496848062, 0.850696456695934, 0.0, -0.434036405723617, 0.731639843052264, 0.525657244376012, 0.0, -2770907.60361716, 4670821.10507043, 3333353.96012987, 1.0]
    }
}
cc/tileset.json
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 440.204868379572,
    "root": {
        "boundingVolume": {
            "box": [1399.13610839844, -98.4928131103516, 17.3625670671463, 113.360473632813, 0, 0, 0, 188.134658813477, 0, 0, 0, 14.1362904310226]
        },
        "children": [{
            "boundingVolume": {
                "box": [1399.13610839844, -98.4928131103516, 17.3625670671463, 113.360473632813, 0, 0, 0, 188.134658813477, 0, 0, 0, 14.1362904310226]
            },
            "children": [{
                "boundingVolume": {
                    "box": [1329.28283691406, -251.359550476074, 16.0720038414001, 43.5072021484375, 0, 0, 0, 18.6329727172852, 0, 0, 0, 11.7183384895325]
                },
                "content": {
                    "uri": "Tile_+055_+021/Tile_+055_+021.json"
                },
                "geometricError": 48.7584225341977
            }, {
                "boundingVolume": {
                    "box": [1330.76959228516, -183.34806060791, 17.4266179800034, 42.6410522460938, 0, 0, 0, 50.4650802612305, 0, 0, 0, 14.0722395181656]
                },
                "content": {
                    "uri": "Tile_+055_+022/Tile_+055_+022.json"
                },
                "geometricError": 67.5500672648307
            }, {
                "boundingVolume": {
                    "box": [1343.38549804688, -83.4295806884766, 13.3076241016388, 30.647216796875, 0, 0, 0, 50.3902435302734, 0, 0, 0, 8.86118960380554]
                },
                "content": {
                    "uri": "Tile_+055_+023/Tile_+055_+023.json"
                },
                "geometricError": 59.6401645003559
            }, {
                "boundingVolume": {
                    "box": [1355.99951171875, 16.4887676239014, 12.5251359939575, 18.6517333984375, 0, 0, 0, 50.3155078887939, 0, 0, 0, 8.38973331451416]
                },
                "content": {
                    "uri": "Tile_+055_+024/Tile_+055_+024.json"
                },
                "geometricError": 54.3132131065945
            }, {
                "boundingVolume": {
                    "box": [1368.37573242188, 77.9040107727051, 6.60480356216431, 6.41845703125, 0, 0, 0, 11.7378349304199, 0, 0, 0, 2.24518442153931]
                },
                "content": {
                    "uri": "Tile_+055_+025/Tile_+055_+025.json"
                },
                "geometricError": 13.5651838396135
            }, {
                "boundingVolume": {
                    "box": [1407.76196289063, -259.938575744629, 15.907214641571, 35.7642822265625, 0, 0, 0, 26.6888961791992, 0, 0, 0, 11.5050873756409]
                },
                "content": {
                    "uri": "Tile_+056_+021/Tile_+056_+021.json"
                },
                "geometricError": 46.0841415018922
            }, {
                "boundingVolume": {
                    "box": [1421.63781738281, -183.753875732422, 17.1668101549149, 49.4112548828125, 0, 0, 0, 50.4975280761719, 0, 0, 0, 13.9405335187912]
                },
                "content": {
                    "uri": "Tile_+056_+022/Tile_+056_+022.json"
                },
                "geometricError": 72.0125747747334
            }, {
                "boundingVolume": {
                    "box": [1423.4345703125, -83.8446617126465, 13.146103978157, 50.58740234375, 0, 0, 0, 50.5813941955566, 0, 0, 0, 9.23278701305389]
                },
                "content": {
                    "uri": "Tile_+056_+023/Tile_+056_+023.json"
                },
                "geometricError": 72.1304864165157
            }, {
                "boundingVolume": {
                    "box": [1424.056640625, 16.1404838562012, 14.5895075798035, 50.58740234375, 0, 0, 0, 50.5891609191895, 0, 0, 0, 10.2280697822571]
                },
                "content": {
                    "uri": "Tile_+056_+024/Tile_+056_+024.json"
                },
                "geometricError": 72.2700621963674
            }, {
                "boundingVolume": {
                    "box": [1424.43774414063, 77.5803565979004, 13.805157661438, 50.35009765625, 0, 0, 0, 12.0362205505371, 0, 0, 0, 9.49176692962646]
                },
                "content": {
                    "uri": "Tile_+056_+025/Tile_+056_+025.json"
                },
                "geometricError": 52.6317069700521
            }, {
                "boundingVolume": {
                    "box": [1482.11926269531, -79.1935214996338, 5.75612854957581, 9.2208251953125, 0, 0, 0, 45.3083171844482, 0, 0, 0, 1.68560910224915]
                },
                "content": {
                    "uri": "Tile_+057_+023/Tile_+057_+023.json"
                },
                "geometricError": 46.2677911879815
            }, {
                "boundingVolume": {
                    "box": [1490.83251953125, 15.7759399414063, 12.0768136978149, 17.3740234375, 0, 0, 0, 50.3316650390625, 0, 0, 0, 8.07517910003662]
                },
                "content": {
                    "uri": "Tile_+057_+024/Tile_+057_+024.json"
                },
                "geometricError": 53.8548207081674
            }, {
                "boundingVolume": {
                    "box": [1493.28857421875, 77.2821998596191, 9.15342235565186, 19.2080078125, 0, 0, 0, 11.946231842041, 0, 0, 0, 4.94451904296875]
                },
                "content": {
                    "uri": "Tile_+057_+025/Tile_+057_+025.json"
                },
                "geometricError": 23.1540123502415
            }],
            "geometricError": 440.204868379572
        }],
        "geometricError": 440.204868379572,
        "transform": [-0.860048066843865, -0.510213017001851, 0.0, 0.0, 0.268197168561964, -0.452090496848062, 0.850696456695934, 0.0, -0.434036405723617, 0.731639843052264, 0.525657244376012, 0.0, -2770907.60361716, 4670821.10507043, 3333353.96012987, 1.0]
    }
}
dd/tileset.json
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 371.970268249901,
    "root": {
        "boundingVolume": {
            "box": [-1300.84271240234, -886.116760253906, -6.17444896697998, 139.575012207031, 0, 0, 0, 116.933471679688, 0, 0, 0, 37.8926019668579]
        },
        "children": [{
            "boundingVolume": {
                "box": [-1300.84271240234, -886.116760253906, -6.17444896697998, 139.575012207031, 0, 0, 0, 116.933471679688, 0, 0, 0, 37.8926019668579]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-1391.99407958984, -933.559753417969, 14.0356489419937, 48.4236450195313, 0, 0, 0, 48.149169921875, 0, 0, 0, 11.1117585897446]
                },
                "content": {
                    "uri": "Tile_+025_+004/Tile_+025_+004.json"
                },
                "geometricError": 69.1857148557412
            }, {
                "boundingVolume": {
                    "box": [-1369.02563476563, -852.159057617188, 2.13443279266357, 25.9090576171875, 0, 0, 0, 34.1532592773438, 0, 0, 0, 21.7199869155884]
                },
                "content": {
                    "uri": "Tile_+025_+005/Tile_+025_+005.json"
                },
                "geometricError": 48.0570725022815
            }, {
                "boundingVolume": {
                    "box": [-1299.24267578125, -994.438171386719, 9.6319876909256, 32.385498046875, 0, 0, 0, 8.612060546875, 0, 0, 0, 5.9280823469162]
                },
                "content": {
                    "uri": "Tile_+026_+003/Tile_+026_+003.json"
                },
                "geometricError": 34.0313125065579
            }, {
                "boundingVolume": {
                    "box": [-1294.17193603516, -936.282165527344, 16.2041157484055, 50.5923461914063, 0, 0, 0, 50.5336303710938, 0, 0, 0, 12.6391478776932]
                },
                "content": {
                    "uri": "Tile_+026_+004/Tile_+026_+004.json"
                },
                "geometricError": 72.6152969470457
            }, {
                "boundingVolume": {
                    "box": [-1293.55456542969, -836.444793701172, 6.14014911651611, 50.57958984375, 0, 0, 0, 50.5338439941406, 0, 0, 0, 25.3308382034302]
                },
                "content": {
                    "uri": "Tile_+026_+005/Tile_+026_+005.json"
                },
                "geometricError": 75.852591660895
            }, {
                "boundingVolume": {
                    "box": [-1292.90478515625, -778.007720947266, 15.3367151618004, 27.361083984375, 0, 0, 0, 8.82443237304688, 0, 0, 0, 13.8531003594398]
                },
                "content": {
                    "uri": "Tile_+026_+006/Tile_+026_+006.json"
                },
                "geometricError": 31.9125040238965
            }, {
                "boundingVolume": {
                    "box": [-1219.70953369141, -920.958221435547, 15.8824429512024, 24.8853149414063, 0, 0, 0, 34.5433654785156, 0, 0, 0, 12.3139815330505]
                },
                "content": {
                    "uri": "Tile_+027_+004/Tile_+027_+004.json"
                },
                "geometricError": 44.3188124785806
            }, {
                "boundingVolume": {
                    "box": [-1202.70550537109, -841.645172119141, -6.17444896697998, 41.4378051757813, 0, 0, 0, 45.6526794433594, 0, 0, 0, 37.8926019668579]
                },
                "content": {
                    "uri": "Tile_+027_+005/Tile_+027_+005.json"
                },
                "geometricError": 72.3678666395718
            }],
            "geometricError": 371.970268249901
        }],
        "geometricError": 371.970268249901,
        "transform": [-0.859624213482753, -0.510926816280138, 0.0, 0.0, 0.268445326760204, -0.451653926798071, 0.850850067255383, 0.0, -0.434722115994534, 0.731411319856156, 0.525408567737061, 0.0, -2775282.77578321, 4669358.11021673, 3331774.10493865, 1.0]
    }
}
ee/tileset.json
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 221.861093368121,
    "root": {
        "boundingVolume": {
            "box": [24.9149742126465, 458.556976318359, 5.52865505218506, 97.6052131652832, 0, 0, 0, 49.4085388183594, 0, 0, 0, 18.3740262985229]
        },
        "children": [{
            "boundingVolume": {
                "box": [24.9149742126465, 458.556976318359, 5.52865505218506, 97.6052131652832, 0, 0, 0, 49.4085388183594, 0, 0, 0, 18.3740262985229]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-53.5235767364502, 460.995025634766, 4.8595757484436, 19.1666622161865, 0, 0, 0, 44.6980590820313, 0, 0, 0, 17.1172251701355]
                },
                "content": {
                    "uri": "Tile_+038_+018/Tile_+038_+018.json"
                },
                "geometricError": 51.5584796491835
            }, {
                "boundingVolume": {
                    "box": [-49.5933418273926, 506.448089599609, 3.60871529579163, 15.2364234924316, 0, 0, 0, 1.51742553710938, 0, 0, 0, 0.110045909881592]
                },
                "content": {
                    "uri": "Tile_+038_+019/Tile_+038_+019.json"
                },
                "geometricError": 15.3121941995155
            }, {
                "boundingVolume": {
                    "box": [15.0548553466797, 457.191497802734, 5.52865505218506, 50.5630187988281, 0, 0, 0, 48.0430603027344, 0, 0, 0, 18.3740262985229]
                },
                "content": {
                    "uri": "Tile_+039_+018/Tile_+039_+018.json"
                },
                "geometricError": 72.1273828425906
            }, {
                "boundingVolume": {
                    "box": [-33.1613292694092, 505.072769165039, 3.53735184669495, 1.75724983215332, 0, 0, 0, 0.161758422851563, 0, 0, 0, 0.157356977462769]
                },
                "content": {
                    "uri": "Tile_+039_+019/Tile_+039_+019.json"
                },
                "geometricError": 1.77168111643222
            }, {
                "boundingVolume": {
                    "box": [93.4946136474609, 456.362838745117, 5.13061237335205, 29.0255737304688, 0, 0, 0, 45.5960540771484, 0, 0, 0, 17.7045965194702]
                },
                "content": {
                    "uri": "Tile_+040_+018/Tile_+040_+018.json"
                },
                "geometricError": 56.8765049533316
            }],
            "geometricError": 221.861093368121
        }],
        "geometricError": 221.861093368121,
        "transform": [-0.859624213482753, -0.510926816280138, 0.0, 0.0, 0.268445326760204, -0.451653926798071, 0.850850067255383, 0.0, -0.434722115994534, 0.731411319856156, 0.525408567737061, 0.0, -2775282.77578321, 4669358.11021673, 3331774.10493865, 1.0]
    }
}
js源码:
// *****************************************************
// 功能:合并多个三维瓦片图层。
// +文件系统:
// -+合并图层目录
// --源图层目录符号链接...
// -+入口文件:tileset.json
// --+配置对象
// ----asset:预设对象
// ----geometricError:几何误差
// ---+root:场景根对象
// ----+boundingVolume:边界框对象
// ------box:包围盒数组
// ----+children:子对象数组
// -----+源图层子对象...
// ------+boundingVolume:子对象边界框对象
// --------box:子对象包围盒数组
// ------+content:子对象内容
// --------uri:子对象json|b3dm文件路径
// -------geometricError:子对象几何误差
// -------transform:子对象转换矩阵数组
// -----geometricError:几何误差
// -----transform:转换矩阵数组
// 算法:
// / 1: 判断合并图层目录是否存在,非追加时如已存在则在确认后清空,如不确认则退出,如不存在则创建。
// / 2:依次合并源图层目录。
// / 2.1:在合并图层目录下创建各源图层目录的符号链接。
// / 2.2:依次合并各图层的tileset文件。
// / 2.2.1:首次新建或读取图层配置对象。
// / 2.2.2:非追加合并:取首个源图层配置对象中的转换矩阵为全局转换矩阵。
// / 2.2.3:计算源图层配置对象中子对象的转换矩阵:全局转换矩阵的逆矩阵 x源图层配置对象的转换矩阵。
// / 2.2.4:将源图层配置对象中的子对象放入,并修改uri属性和符号链接对应。
// / 2.2.5:计算图层配置对象的外围框属性值:外围框坐标:(最大坐标+最小坐标)/2,外围框半长:(最大坐标-最小坐标)/2。
// / 2.2.6:计算图层配置对象的外围框几何误差值:外围框外包圆的直径。
// / 2.3:保存tileset文件。
// 用法:node 3DTileJoin <是否追加合并:1|0> <合并图层目录> <源图层目录>,...
// 输出:
// / 开始合并<合并图层目录>...
// / <源图层目录>已合并。
// *****************************************************

// 导入模块
const $m=
{
  fs: require( "fs"),
  path: require( "path"),
  readline: require( "readline")
};
$m.matrix= new Matrix();

// 执行主函数
main();

// ******************* 【函数:主函数】 *********************
function main()
{
  // ================== 取命令行参数 =================
  var argIdx= 2; // 初始化参数索引
  // 取参数:是否追加合并
  var isAppend= process.argv[ argIdx++];
  if( !isAppend)
    return argErr( "缺少是否追加合并参数!");
  isAppend= isAppend== 1? true: isAppend== 0? false: null;
  if( isAppend== null)
    return argErr( "是否追加合并参数错误!");
  // 取参数:合并图层目录
  var joinLayerPath= process.argv[ argIdx++];
  if( !joinLayerPath)
    return argErr( "缺少合并图层目录参数!");
  joinLayerPath= $m.path.resolve( joinLayerPath); // 合并图层目录转绝对路径
  // 取参数:源图层目录
  var srcLayerPaths= delBlk( ( process.argv[ argIdx++]|| "").split( ",")); // 删除空值
  if( !srcLayerPaths.length)
    return argErr( "缺少源图层目录参数!");
  // 源图层目录转绝对路径
  for( var i= 0; i< srcLayerPaths.length; i++)
    srcLayerPaths[ i]= $m.path.resolve( srcLayerPaths[ i]);
  // 检测:源图层目录是否存在、源图层目录是否重复
  for( var i= 0, srcLayerPathm= {}; i< srcLayerPaths.length; i++)
  {
    var srcLayerPath= srcLayerPaths[ i];
    if( !$m.fs.existsSync( srcLayerPath))
      return stdout( "源图层目录不存在:"+ srcLayerPath);
    else if( srcLayerPathm[ srcLayerPath])
      return stdout( "源图层目录重复:"+ srcLayerPath);
    else
      srcLayerPathm[ srcLayerPath]= 1;
  }

  // ================== 新建合并图层目录 ==================
  // 合并图层目录已存在且非追加:确认后清空
  var isExit= $m.fs.existsSync( joinLayerPath);
  if( isExit&& !isAppend)
  {
    // 创建读行器
    var rl= $m.readline.createInterface(
    {
      input: process.stdin,
      output: process.stdout
    });
    // 输入参数:是否删除目录
    rl.question( "请确认是否需要清空此目录:"+ joinLayerPath+ "?(Y/N)  ", function( answer)
    {
      rl.close(), answer= answer.toUpperCase();
      answer== "Y"? ( emptyDir( joinLayerPath), joinLayer()) // 确认:清空
      : answer== "N"? stdout( "未确认!退出。") //
      : stdout( "输入错误!退出。"); // 不确认:退出
    });
  }
  // 合并图层目录不存在:创建
  else
    !isExit&& $m.fs.mkdirSync( joinLayerPath), isAppend= false, joinLayer(); // 创建目录,强制为非追加

  // 函数:合并图层
  function joinLayer()
  {
    var joinCfgo, joinTrsfInv; // 定义合并图层配置对象、合并图层转换矩阵的逆矩阵
    stdout( "开始合并"+ joinLayerPath+ "..."); // 输出:开始合并图层目录...
    // 依次合并源图层目录
    for( var i= 0; i< srcLayerPaths.length; i++)
    {
      var srcLayerPath= srcLayerPaths[ i], srcLayerNm= $m.path.parse( srcLayerPath).name; // 源图层路径、源图层目录名
      var joinLinkPath= $m.path.join( joinLayerPath, srcLayerNm); // 合并图层链接路径(合并图层链接/源图层目录名)
      // 创建源图层符号链接
      isSymLinkSync( joinLinkPath)&& $m.fs.unlinkSync( joinLinkPath); // 源图层已存在:删除原先的符号链接
      $m.fs.symlinkSync( srcLayerPath, joinLinkPath);
      // 读取源图层的配置文件
      var srcCfgo= readJsonFile( $m.path.join( srcLayerPath, "tileset.json"));
      if( !srcCfgo)
        continue; // 读取失败:继续下一个
      // 首次:生成合并图层配置对象、取合并图层转换矩阵的逆矩阵
      !i&& ( joinCfgo= !isAppend? // 非追加:初始化配置对象
        {
          "asset": srcCfgo.asset,
          "geometricError": 0.0,
          "root":
          {
            "boundingVolume":
            {
              "box": []
            },
            "children": [],
            "geometricError": 0.0,
            "transform": srcCfgo.root.transform
          }
        }
        : readJsonFile( $m.path.join( joinLayerPath, "tileset.json")) // 追加:从合并图层中读取
        , joinTrsfInv= $m.matrix.inv( $m.matrix.dConver( joinCfgo.root.transform))); // 取合并图层转换矩阵的逆矩阵
      // 计算子对象的转换矩阵
      var srcTrsf= $m.matrix.dConver( $m.matrix.mul( joinTrsfInv, $m.matrix.dConver( srcCfgo.root.transform)));
      // 设置源图层子对象的转换矩阵
      var srcRtChos= srcCfgo.root.children;
      for( var l= 0; l< srcRtChos.length; l++)
      {
        var srcRtCho= srcRtChos[ l];
        srcRtCho[ "transform"]= srcTrsf;
        // 替换uri开头为源图层目录名
        srcRtCho.content&& ( srcRtCho.content.uri= srcLayerNm+ "/"+ srcRtCho.content.uri);
        for( var j= 0; j< ( srcRtCho.children|| []).length; j++)
          srcRtCho.children[ j].content.uri= srcLayerNm+ "/"+ srcRtCho.children[ j].content.uri;
        // 合并源图层子对象
        for( var j= 0, chIdx= -1; j< joinCfgo.root.children.length&& chIdx== -1; j++)
        {
          var joinRtCh= joinCfgo.root.children[ j];
          // 子对象无内层对象
          if( joinRtCh.content&& srcRtCho.content&& joinRtCh.content.uri== srcRtCho.content.uri)
          {
            chIdx= j;
            continue;
          }
          // 子对象有内存对象
          else if( joinRtCh.children&& srcRtCho.children)
          {
            for( var k= 0, found= false; k< joinRtCh.children.length&& !found; k++)
              joinRtCh.children[ k].content.uri!= srcRtCho.children[ k].content.uri&& ( found= true);
            !found&& ( chIdx= j);
          }
        }
        isAppend&& chIdx>= 0&& joinCfgo.root.children.splice( chIdx, 1); // 追加合并已存在源图层:覆盖
        joinCfgo.root.children.push( srcRtCho);
      }
      // 输出:源图层目录已合并
      stdout( srcLayerPath+ "已合并。");
    }
    // 计算合并图层配置对象外围框属性数值
    var joinRtChs= joinCfgo.root.children;
    // 最大的x坐标、最小的x坐标、最大的y坐标、最小的y坐标、最大的z坐标、最小的z坐标、最大的z轴半长
    var maxX= null, minX= null, maxY= null, minY= null, maxZ= null, minZ= null;
    for( var i= 0; i< joinRtChs.length; i++)
    {
      var joinRtCh= joinRtChs[ i];
      var o= [ joinRtCh.boundingVolume.box[ 0]+ joinRtCh.transform[ 12], joinRtCh.boundingVolume.box[ 1]+ joinRtCh.transform[ 13], joinRtCh.boundingVolume.box[ 2]+ joinRtCh.transform[ 14]];
      var r= [ joinRtCh.boundingVolume.box[ 3], joinRtCh.boundingVolume.box[ 7], joinRtCh.boundingVolume.box[ 11]];
      var xa= [ o[ 0]- r[ 0], o[ 0]+ r[ 0]], ya= [ o[ 1]- r[ 1], o[ 1]+ r[ 1]], za= [ o[ 2]- r[ 2], o[ 2]+ r[ 2]];
      minX= !i? xa[ 0]: Math.min( xa[ 0], minX), maxX= !i? xa[ 1]: Math.max( xa[ 1], maxX);
      minY= !i? ya[ 0]: Math.min( ya[ 0], minY), maxY= !i? ya[ 1]: Math.max( ya[ 1], maxY);
      minZ= !i? za[ 0]: Math.min( za[ 0], minZ), maxZ= !i? za[ 1]: Math.max( za[ 1], maxZ);
    }
    // 计算:最外层包围盒x轴坐标、最外层包围盒y轴坐标、最外层包围盒z轴坐标
    var boxs= [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    boxs[ 0]= ( maxX+ minX)/ 2, boxs[ 1]= ( maxY+ minY)/ 2, boxs[ 2]= ( maxZ+ minZ)/ 2;
    // 计算:最外层包围盒x轴半长、最外层包围盒y轴半长、最外层包围盒z轴半长
    boxs[ 3]= ( maxX- minX)/ 2, boxs[ 7]= ( maxY- minY)/ 2, boxs[ 11]= ( maxZ- minZ)/ 2;
    joinCfgo.root.boundingVolume.box= boxs;
    // 计算:最外层包围盒几何误差值
    var geometricError= Math.sqrt( Math.pow( boxs[ 3], 2)+ Math.pow( boxs[ 7], 2))* 2;
    joinCfgo.geometricError= geometricError, joinCfgo.root.geometricError= geometricError;
    // 保存tileset文件
    try
    {
      $m.fs.writeFileSync( $m.path.join( joinLayerPath, "tileset.json"), JSON.stringify( joinCfgo));
    }catch( e)
    {
      stdout( e);
    }
    // 提示完成
    stdout( "图层合并完成。");
  }

  // 函数:参数错误
  function argErr( err)
  {
    var msg= err+ "\n用法:node 3DTileJoin <是否追加合并:1|0> <合并图层目录> <源图层目录>,...";
    stdout( msg);
  }

  // 函数:删除数组空元素
  function delBlk( items)
  {
    for( var i= 0; i< items.length; i++)
      !items[ i].trim()&& items.splice( i--, 1);
    return items;
  }

  // 函数:判断文件是否为符号链接(考虑文件不存在的情况)
  function isSymLinkSync( path)
  {
    var isSymLink= false;
    try
    {
      isSymLink= $m.fs.lstatSync( path).isSymbolicLink();
    }catch( e)
    {
      return false;
    }
    return isSymLink;
  }
}

// *********************【函数:标准输出】 ************************
function stdout( msg)
{
  console.log( msg);
}

// *********************【函数:读取单个json文件内容】 ************************
function readJsonFile( path)
{
  try
  {
    var jsono= $m.fs.readFileSync( path), jsono= JSON.parse( jsono.toString());
    return jsono;
  }catch( e)
  {
    stdout( e);
    stdout( "无法打开输入文件:"+ path);
  }
}

// *********************【函数:清空目标目录】 ************************
function emptyDir( tarPath)
{
  var sons= $m.fs.readdirSync( tarPath);
  for( var i= 0; i< sons.length; i++)
  {
    var son= sons[ i], sonPath= $m.path.join( tarPath, son);
    if( $m.fs.lstatSync( sonPath).isSymbolicLink()|| !$m.fs.statSync( sonPath).isDirectory())
      $m.fs.unlinkSync( sonPath);
    else
      emptyDir( sonPath), $m.fs.rmdirSync( sonPath);
  }
}

// 类:矩阵
function Matrix()
{
  var to= this;
  // ***********************【行列式】 ************************
  this.det= function( ms)
  {
    // 矩阵阶数
    var n= ms.length, detVal= 0;
    // n阶矩阵求行列式
    if( n> 3)
    {
      for( var column= 0; column< n; column++) // 去掉第 0行第column列的矩阵
      {
        var matrix= new Array( n- 1).fill( 0).map( function()
        {
          return new Array( n- 1).fill( 0);
        });
        for( var i= 0; i< n- 1; i++)
        {
          for( var j= 0; j< n- 1; j++)
            j< column? matrix[ i][ j]= ms[ i+ 1][ j]: matrix[ i][ j]= ms[ i+ 1][ j+ 1];
        }
        detVal+= ms[ 0][ column]* Math.pow( -1, 0+ column)* to.det( matrix);
      }
    }
    // 3阶矩阵求行列式
    else if( n== 3)
      detVal= ms[ 0][ 0]* ms[ 1][ 1]* ms[ 2][ 2]+ ms[ 0][ 1]* ms[ 1][ 2]* ms[ 2][ 0] //
        + ms[ 0][ 2]* ms[ 1][ 0]* ms[ 2][ 1]- ms[ 0][ 2]* ms[ 1][ 1]* ms[ 2][ 0] //
        - ms[ 0][ 1]* ms[ 1][ 0]* ms[ 2][ 2]- ms[ 0][ 0]* ms[ 1][ 2]* ms[ 2][ 1];
    // 2阶矩阵求行列式
    else if( n== 2)
      detVal= ms[ 0][ 0]* ms[ 1][ 1]- ms[ 0][ 1]* ms[ 1][ 0];
    // 1阶矩阵求行列式
    else if( n== 1)
      detVal= ms[ 0][ 0];
    return detVal;
  }

  // ************************* 【伴随矩阵】 *************************
  this.adjoint= function( ms)
  {
    // 初始化二维矩阵(置零)
    var adjM= new Array( ms.length).fill( 0).map( function()
    {
      return new Array( ms.length).fill( 0);
    });
    // 求各位置的代数余子式
    for( var row= 0; row< ms.length; row++)
    {
      for( var column= 0; column< ms.length; column++) // 去掉第 row 行第 column 列的矩阵
      {
        // 求各位置的余子式
        for( var i= 0, matrix= []; i< ms.length; i++)
        {
          if( i!= row)
          {
            for( var j= 0, arr= []; j< ms.length; j++)
              j!= column&& arr.push( ms[ i][ j]);
            matrix.push( arr);
          }
        }
        // 求代数余子式
        adjM[ row][ column]= Math.pow( -1, row+ column)* to.det( matrix);
      }
    }
    // 转置后返回
    return to.transpose( adjM);
  }

  // *********************** 【转置矩阵】 ************************
  this.transpose= function( ms)
  {
    var transM= new Array( ms.length).fill( 0).map( function()
    {
      return new Array( ms[ 0].length).fill( 0);
    });
    for( var i= 0; i< transM.length; i++)
    {
      for( var j= 0; j< transM[ 0].length; j++)
        transM[ i][ j]= ms[ j][ i];
    }
    return transM;
  }

  // *********************** 【逆矩阵】 ************************
  this.inv= function( ms)
  {
    var detVal= to.det( ms), invM= to.adjoint( ms);
    for( var i= 0; i< invM.length; i++)
    {
      for( var j= 0; j< invM.length; j++)
        invM[ i][ j]/= detVal;
    }
    return invM;
  }

  // ********************** 【矩阵相乘】 **********************
  this.mul= function( m1, m2)
  {
    var m3= [];
    // 求m1的列数
    for( var i= 0, cn1= 0; i< m1.length; i++)
      cn1= Math.max( cn1, m1[ i].length);
    // 求m2的列数
    for( var i= 0, cn2= 0; i< m2.length; i++)
      cn2= Math.max( cn2, m2[ i].length);
    // 乘
    for( var i= 0; i< m1.length; i++)
    {
      var l1= m1[ i], l3= m3[ i]= [];
      for( var j= 0; j< cn2; j++)
      {
        l3[ j]= 0;
        for( var l= 0; l< cn1; l++)
          l3[ j]+= ( l1[ l]|| 0)* ( m2[ l][ j]|| 0);
      }
    }
    return m3;
  };

  // ********************** 【矩阵数组维度转换】 **********************
  // 一维矩阵数组转二维数组/二维矩阵数组转一维数组
  this.dConver= function( ms)
  {
    var matrix, is2D= ms.every( function( item)
    {
      return Array.isArray( item);
    });
    // 二维转一维
    if( is2D)
    {
      matrix= new Array( Math.pow( ms.length, 2)).fill( 0);
      for( var i= 0; i< ms.length; i++)
      {
        var rows= ms[ i];
        for( var j= 0; j< rows.length; j++)
          matrix[ i+ j* rows.length]= rows[ j];
      }
    }
    // 一维转二维
    else
    {
      var n= Math.sqrt( ms.length); // 矩阵阶数
      matrix= new Array( n).fill( 0).map( function()
      {
        return new Array( n).fill( 0);
      });
      for( var i= 0; i< ms.length; i++)
        matrix[ i% n][ parseInt( i/ n)]= ms[ i];
    }
    return matrix;
  }
}
运行命令:

node D:\JAVA\3dtiles\js\3DTileJoin2_test 0 D:\JAVA\3dtiles\js_test_success D:\JAVA\3dtiles\data\aa,D:\JAVA\3dtiles\data\bb,D:\JAVA\3dtiles\data\cc,D:\JAVA\3dtiles\data\dd,D:\JAVA\3dtiles\data\ee

生成结果:
{
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    },
    "geometricError": 9325.869057604898,
    "root": {
        "boundingVolume": {
            "box": [341.8290726169498, -1031.7488150345162, -5.334247002843764, 4289.988496445352, 0, 0, 0, 1827.2813467730307, 0, 0, 0, 40.59645403409377]
        },
        "children": [{
            "boundingVolume": {
                "box": [-3675.8994140625, 545.641296386719, 11.9535970687866, 272.260009765625, 0, 0, 0, 249.891235351563, 0, 0, 0, 23.3086099624634]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-3935.02001953125, 574.504516601563, 15.7210890054703, 13.139404296875, 0, 0, 0, 25.2759399414063, 0, 0, 0, 11.8160890340805]
                },
                "content": {
                    "uri": "aa/Tile_+002_+029/Tile_+002_+029.json"
                },
                "geometricError": 30.8405098086856
            }, {
                "boundingVolume": {
                    "box": [-3931.19152832031, 630.064575195313, 5.76587748527527, 9.6800537109375, 0, 0, 0, 30.9617309570313, 0, 0, 0, 1.63892340660095]
                },
                "content": {
                    "uri": "aa/Tile_+002_+030/Tile_+002_+030.json"
                },
                "geometricError": 32.4810451438208
            }, {
                "boundingVolume": {
                    "box": [-3872.32775878906, 566.557830810547, 15.5438475459814, 50.4261474609375, 0, 0, 0, 33.1085510253906, 0, 0, 0, 15.1476407200098]
                },
                "content": {
                    "uri": "aa/Tile_+003_+029/Tile_+003_+029.json"
                },
                "geometricError": 62.1966519849389
            }, {
                "boundingVolume": {
                    "box": [-3872.03454589844, 628.938293457031, 18.1283311843872, 50.4095458984375, 0, 0, 0, 30.4552612304688, 0, 0, 0, 14.090537071228]
                },
                "content": {
                    "uri": "aa/Tile_+003_+030/Tile_+003_+030.json"
                },
                "geometricError": 60.5573157368986
            }, {
                "boundingVolume": {
                    "box": [-3749.26013183594, 352.109008789063, 19.1447021961212, 26.1177978515625, 0, 0, 0, 46.5369567871094, 0, 0, 0, 15.1629683971405]
                },
                "content": {
                    "uri": "aa/Tile_+004_+027/Tile_+004_+027.json"
                },
                "geometricError": 55.4774127211521
            }, {
                "boundingVolume": {
                    "box": [-3740.12866210938, 448.188674926758, 9.04387199878693, 17.607421875, 0, 0, 0, 50.3167572021484, 0, 0, 0, 5.57954967021942]
                },
                "content": {
                    "uri": "aa/Tile_+004_+028/Tile_+004_+028.json"
                },
                "geometricError": 53.5997083475893
            }, {
                "boundingVolume": {
                    "box": [-3772.3740234375, 548.456268310547, 19.1229840517044, 50.480712890625, 0, 0, 0, 50.5904846191406, 0, 0, 0, 15.4035738706589]
                },
                "content": {
                    "uri": "aa/Tile_+004_+029/Tile_+004_+029.json"
                },
                "geometricError": 73.1092989703366
            }, {
                "boundingVolume": {
                    "box": [-3772.05346679688, 619.552154541016, 18.2076432704926, 50.41162109375, 0, 0, 0, 21.6935119628906, 0, 0, 0, 14.1500952243805]
                },
                "content": {
                    "uri": "aa/Tile_+004_+030/Tile_+004_+030.json"
                },
                "geometricError": 56.6759666652712
            }, {
                "boundingVolume": {
                    "box": [-3689.02783203125, 297.003692626953, 10.0964844226837, 5.725341796875, 0, 0, 0, 1.25363159179688, 0, 0, 0, 4.35963416099548]
                },
                "content": {
                    "uri": "aa/Tile_+005_+026/Tile_+005_+026.json"
                },
                "geometricError": 7.30462462257396
            }, {
                "boundingVolume": {
                    "box": [-3673.70959472656, 348.031799316406, 12.3951093554497, 50.5650634765625, 0, 0, 0, 50.4035339355469, 0, 0, 0, 10.4135625958443]
                },
                "content": {
                    "uri": "aa/Tile_+005_+027/Tile_+005_+027.json"
                },
                "geometricError": 72.1511203206034
            }, {
                "boundingVolume": {
                    "box": [-3673.11413574219, 447.839309692383, 6.34941649436951, 50.5919189453125, 0, 0, 0, 50.5899505615234, 0, 0, 0, 10.5448610782623]
                },
                "content": {
                    "uri": "aa/Tile_+005_+028/Tile_+005_+028.json"
                },
                "geometricError": 72.3192882676973
            }, {
                "boundingVolume": {
                    "box": [-3672.49230957031, 547.832534790039, 18.5858655571938, 50.5924072265625, 0, 0, 0, 50.5895843505859, 0, 0, 0, 16.6763414740562]
                },
                "content": {
                    "uri": "aa/Tile_+005_+029/Tile_+005_+029.json"
                },
                "geometricError": 73.4642639567206
            }, {
                "boundingVolume": {
                    "box": [-3671.8740234375, 647.7919921875, 11.636326789856, 50.582763671875, 0, 0, 0, 50.5528564453125, 0, 0, 0, 21.4873533248901]
                },
                "content": {
                    "uri": "aa/Tile_+005_+030/Tile_+005_+030.json"
                },
                "geometricError": 74.6720404728155
            }, {
                "boundingVolume": {
                    "box": [-3665.76831054688, 730.397674560547, 12.528514623642, 44.778076171875, 0, 0, 0, 33.1688537597656, 0, 0, 0, 19.6651880741119]
                },
                "content": {
                    "uri": "aa/Tile_+005_+031/Tile_+005_+031.json"
                },
                "geometricError": 59.0928810211615
            }, {
                "boundingVolume": {
                    "box": [-3622.38244628906, 395.646423339844, 5.87387609481812, 1.3489990234375, 0, 0, 0, 2.1663818359375, 0, 0, 0, 0.234408378601074]
                },
                "content": {
                    "uri": "aa/Tile_+006_+027/Tile_+006_+027.json"
                },
                "geometricError": 2.56280235528877
            }, {
                "boundingVolume": {
                    "box": [-3591.23608398438, 447.522384643555, 11.8303036689758, 32.471923828125, 0, 0, 0, 50.2840118408203, 0, 0, 0, 7.67854261398315]
                },
                "content": {
                    "uri": "aa/Tile_+006_+028/Tile_+006_+028.json"
                },
                "geometricError": 60.3478889488445
            }, {
                "boundingVolume": {
                    "box": [-3572.49584960938, 547.324279785156, 11.0218200683594, 50.58984375, 0, 0, 0, 50.475830078125, 0, 0, 0, 21.2449989318848]
                },
                "content": {
                    "uri": "aa/Tile_+006_+029/Tile_+006_+029.json"
                },
                "geometricError": 74.5552928526268
            }, {
                "boundingVolume": {
                    "box": [-3571.88171386719, 647.205322265625, 10.7785501480103, 50.5970458984375, 0, 0, 0, 50.5909423828125, 0, 0, 0, 22.133563041687]
                },
                "content": {
                    "uri": "aa/Tile_+006_+030/Tile_+006_+030.json"
                },
                "geometricError": 74.8959219033318
            }, {
                "boundingVolume": {
                    "box": [-3571.29382324219, 746.071563720703, 18.3907251358032, 50.5609130859375, 0, 0, 0, 49.4609680175781, 0, 0, 0, 14.5039548873901]
                },
                "content": {
                    "uri": "aa/Tile_+006_+031/Tile_+006_+031.json"
                },
                "geometricError": 72.2022021595952
            }, {
                "boundingVolume": {
                    "box": [-3509.61206054688, 576.114654541016, 6.37169981002808, 13.11669921875, 0, 0, 0, 21.0632019042969, 0, 0, 0, 1.91424798965454]
                },
                "content": {
                    "uri": "aa/Tile_+007_+029/Tile_+007_+029.json"
                },
                "geometricError": 24.8871576967365
            }, {
                "boundingVolume": {
                    "box": [-3478.34790039063, 646.816314697266, 16.745255947113, 44.12158203125, 0, 0, 0, 50.3578186035156, 0, 0, 0, 12.6729989051819]
                },
                "content": {
                    "uri": "aa/Tile_+007_+030/Tile_+007_+030.json"
                },
                "geometricError": 68.1412415259338
            }, {
                "boundingVolume": {
                    "box": [-3471.40478515625, 741.000762939453, 17.6509721279144, 50.4560546875, 0, 0, 0, 44.9321594238281, 0, 0, 0, 13.3580210208893]
                },
                "content": {
                    "uri": "aa/Tile_+007_+031/Tile_+007_+031.json"
                },
                "geometricError": 68.8705243969495
            }, {
                "boundingVolume": {
                    "box": [-3412.68273925781, 734.155242919922, 10.6947717666626, 9.0433349609375, 0, 0, 0, 17.5325012207031, 0, 0, 0, 5.41533184051514]
                },
                "content": {
                    "uri": "aa/Tile_+008_+031/Tile_+008_+031.json"
                },
                "geometricError": 20.4571827291191
            }],
            "geometricError": 740.579323830987,
            "transform": [1, 0, 0, 0, 1.2432017357571995e-17, 1, -5.551115123125783e-17, 0, 1.1741393048713246e-17, 5.551115123125783e-17, 0.9999999999999998, 0, -2.7755747368212224e-10, 2.3283064365386963e-10, 0, 1]
        }, {
            "boundingVolume": {
                "box": [1678.00695800781, -167.3508644104, 14.9421647787094, 237.2333984375, 0, 0, 0, 257.251705169678, 0, 0, 0, 13.2210794687271]
            },
            "children": [{
                "boundingVolume": {
                    "box": [1456.77575683594, -283.401695251465, 9.57817316055298, 16.002197265625, 0, 0, 0, 49.5448379516602, 0, 0, 0, 5.28457307815552]
                },
                "content": {
                    "uri": "bb/Tile_+056_+021/Tile_+056_+021.json"
                },
                "geometricError": 52.3324755539293
            }, {
                "boundingVolume": {
                    "box": [1471.31585693359, -229.578811645508, 4.45599508285522, 1.51898193359375, 0, 0, 0, 4.85548400878906, 0, 0, 0, 0.0174999237060547]
                },
                "content": {
                    "uri": "bb/Tile_+056_+022/Tile_+056_+022.json"
                },
                "geometricError": 5.08756693533562
            }, {
                "boundingVolume": {
                    "box": [1531.82299804688, -348.998123168945, 10.2060108184814, 40.3277587890625, 0, 0, 0, 14.9526214599609, 0, 0, 0, 6.00887680053711]
                },
                "content": {
                    "uri": "bb/Tile_+057_+020/Tile_+057_+020.json"
                },
                "geometricError": 43.4282813138826
            }, {
                "boundingVolume": {
                    "box": [1522.18682861328, -284.460159301758, 9.90673196315765, 50.5840454101563, 0, 0, 0, 50.5893402099609, 0, 0, 0, 8.18564665317535]
                },
                "content": {
                    "uri": "bb/Tile_+057_+021/Tile_+057_+021.json"
                },
                "geometricError": 72.0071649495143
            }, {
                "boundingVolume": {
                    "box": [1522.80364990234, -184.549896240234, 9.43511211872101, 50.5891723632813, 0, 0, 0, 50.506591796875, 0, 0, 0, 5.92474162578583]
                },
                "content": {
                    "uri": "bb/Tile_+057_+022/Tile_+057_+022.json"
                },
                "geometricError": 71.7306262252761
            }, {
                "boundingVolume": {
                    "box": [1536.63287353516, -84.6287059783936, 10.7433174848557, 37.3843383789063, 0, 0, 0, 50.4350147247314, 0, 0, 0, 7.403111577034]
                },
                "content": {
                    "uri": "bb/Tile_+057_+023/Tile_+057_+023.json"
                },
                "geometricError": 63.2145990047746
            }, {
                "boundingVolume": {
                    "box": [1548.78259277344, 15.3128070831299, 11.0693670511246, 25.8543701171875, 0, 0, 0, 50.38356590271, 0, 0, 0, 7.47109162807465]
                },
                "content": {
                    "uri": "bb/Tile_+057_+024/Tile_+057_+024.json"
                },
                "geometricError": 57.120656310518
            }, {
                "boundingVolume": {
                    "box": [1557.44226074219, 77.4114685058594, 8.79704344272614, 17.3408203125, 0, 0, 0, 12.489372253418, 0, 0, 0, 5.12078511714935]
                },
                "content": {
                    "uri": "bb/Tile_+057_+025/Tile_+057_+025.json"
                },
                "geometricError": 21.9752339830746
            }, {
                "boundingVolume": {
                    "box": [1621.77416992188, -364.557540893555, 10.4570751190186, 50.3675537109375, 0, 0, 0, 30.0714874267578, 0, 0, 0, 6.32948684692383]
                },
                "content": {
                    "uri": "bb/Tile_+058_+020/Tile_+058_+020.json"
                },
                "geometricError": 59.0020951037097
            }, {
                "boundingVolume": {
                    "box": [1622.17553710938, -285.081962585449, 12.8714859485626, 50.5882568359375, 0, 0, 0, 50.5891189575195, 0, 0, 0, 8.59081149101257]
                },
                "content": {
                    "uri": "bb/Tile_+058_+021/Tile_+058_+021.json"
                },
                "geometricError": 72.0571490462324
            }, {
                "boundingVolume": {
                    "box": [1622.79650878906, -185.08927154541, 13.1854486465454, 50.589111328125, 0, 0, 0, 50.5890426635742, 0, 0, 0, 8.58977794647217]
                },
                "content": {
                    "uri": "bb/Tile_+058_+022/Tile_+058_+022.json"
                },
                "geometricError": 72.057572175005
            }, {
                "boundingVolume": {
                    "box": [1623.42102050781, -85.0964012145996, 10.2867512702942, 50.5892333984375, 0, 0, 0, 50.5891151428223, 0, 0, 0, 5.54497861862183]
                },
                "content": {
                    "uri": "bb/Tile_+058_+023/Tile_+058_+023.json"
                },
                "geometricError": 71.7584552136979
            }, {
                "boundingVolume": {
                    "box": [1624.04296875, 14.8963890075684, 10.8929178714752, 50.5892333984375, 0, 0, 0, 50.5891761779785, 0, 0, 0, 6.47345900535583]
                },
                "content": {
                    "uri": "bb/Tile_+058_+024/Tile_+058_+024.json"
                },
                "geometricError": 71.8362092102733
            }, {
                "boundingVolume": {
                    "box": [1624.42224121094, 76.6347541809082, 9.87600064277649, 50.348876953125, 0, 0, 0, 12.3346061706543, 0, 0, 0, 5.74333453178406]
                },
                "content": {
                    "uri": "bb/Tile_+058_+025/Tile_+058_+025.json"
                },
                "geometricError": 52.1549404310852
            }, {
                "boundingVolume": {
                    "box": [1721.67340087891, -379.611175537109, 16.0873470306396, 50.4609985351563, 0, 0, 0, 44.5035400390625, 0, 0, 0, 12.0758972167969]
                },
                "content": {
                    "uri": "bb/Tile_+059_+020/Tile_+059_+020.json"
                },
                "geometricError": 68.3571850119951
            }, {
                "boundingVolume": {
                    "box": [1722.16735839844, -285.70393371582, 5.40806865692139, 50.589111328125, 0, 0, 0, 50.5890960693359, 0, 0, 0, 0.90021276473999]
                },
                "content": {
                    "uri": "bb/Tile_+059_+021/Tile_+059_+021.json"
                },
                "geometricError": 71.5494598798882
            }, {
                "boundingVolume": {
                    "box": [1722.79113769531, -185.71117401123, 12.7560157775879, 50.5909423828125, 0, 0, 0, 50.5891342163086, 0, 0, 0, 8.14298439025879]
                },
                "content": {
                    "uri": "bb/Tile_+059_+022/Tile_+059_+022.json"
                },
                "geometricError": 72.0070284535943
            }, {
                "boundingVolume": {
                    "box": [1723.41357421875, -85.7185573577881, 12.8922352790833, 50.5914306640625, 0, 0, 0, 50.5892429351807, 0, 0, 0, 8.30024099349976]
                },
                "content": {
                    "uri": "bb/Tile_+059_+023/Tile_+059_+023.json"
                },
                "geometricError": 72.025400782929
            }, {
                "boundingVolume": {
                    "box": [1724.03527832031, 14.2743854522705, 13.8084480762482, 50.5885009765625, 0, 0, 0, 50.5892391204834, 0, 0, 0, 9.1709201335907]
                },
                "content": {
                    "uri": "bb/Tile_+059_+024/Tile_+059_+024.json"
                },
                "geometricError": 72.1288660796897
            }, {
                "boundingVolume": {
                    "box": [1724.40911865234, 75.4231605529785, 11.6732699871063, 50.3403930664063, 0, 0, 0, 11.7451057434082, 0, 0, 0, 7.08151745796204]
                },
                "content": {
                    "uri": "bb/Tile_+059_+025/Tile_+059_+025.json"
                },
                "geometricError": 52.1751911593196
            }, {
                "boundingVolume": {
                    "box": [1797.44390869141, -380.166076660156, 13.3256312608719, 26.4188842773438, 0, 0, 0, 44.4364929199219, 0, 0, 0, 9.40558898448944]
                },
                "content": {
                    "uri": "bb/Tile_+060_+020/Tile_+060_+020.json"
                },
                "geometricError": 52.5454513124314
            }, {
                "boundingVolume": {
                    "box": [1812.28704833984, -286.175262451172, 11.5870990753174, 40.7161254882813, 0, 0, 0, 50.4384155273438, 0, 0, 0, 7.63290023803711]
                },
                "content": {
                    "uri": "bb/Tile_+060_+021/Tile_+060_+021.json"
                },
                "geometricError": 65.2694247081303
            }, {
                "boundingVolume": {
                    "box": [1822.78210449219, -186.271453857422, 15.3006939888, 50.5889892578125, 0, 0, 0, 50.5271301269531, 0, 0, 0, 11.2427039146423]
                },
                "content": {
                    "uri": "bb/Tile_+060_+022/Tile_+060_+022.json"
                },
                "geometricError": 72.3784160113043
            }, {
                "boundingVolume": {
                    "box": [1823.40588378906, -86.3404502868652, 12.5961084365845, 50.58740234375, 0, 0, 0, 50.5890693664551, 0, 0, 0, 8.5899076461792]
                },
                "content": {
                    "uri": "bb/Tile_+060_+023/Tile_+060_+023.json"
                },
                "geometricError": 72.0564065758371
            }, {
                "boundingVolume": {
                    "box": [1824.02978515625, 13.6523685455322, 15.3824796676636, 50.5882568359375, 0, 0, 0, 50.5891551971436, 0, 0, 0, 11.0295190811157]
                },
                "content": {
                    "uri": "bb/Tile_+060_+024/Tile_+060_+024.json"
                },
                "geometricError": 72.3884289401293
            }, {
                "boundingVolume": {
                    "box": [1824.38507080078, 73.7163772583008, 9.60402154922485, 50.3248901367188, 0, 0, 0, 10.6603164672852, 0, 0, 0, 5.04884958267212]
                },
                "content": {
                    "uri": "bb/Tile_+060_+025/Tile_+060_+025.json"
                },
                "geometricError": 51.6887588994351
            }, {
                "boundingVolume": {
                    "box": [1873.77648925781, -141.348236083984, 4.44181227684021, 1.0274658203125, 0, 0, 0, 4.982177734375, 0, 0, 0, 0.262368440628052]
                },
                "content": {
                    "uri": "bb/Tile_+061_+022/Tile_+061_+022.json"
                },
                "geometricError": 5.09378230664111
            }, {
                "boundingVolume": {
                    "box": [1883.65350341797, -86.6555309295654, 9.82255268096924, 10.8458862304688, 0, 0, 0, 50.2822132110596, 0, 0, 0, 5.70098972320557]
                },
                "content": {
                    "uri": "bb/Tile_+061_+023/Tile_+061_+023.json"
                },
                "geometricError": 51.7536037136625
            }, {
                "boundingVolume": {
                    "box": [1893.34643554688, 13.2779121398926, 10.3329606056213, 19.9166259765625, 0, 0, 0, 50.3416175842285, 0, 0, 0, 6.1720118522644]
                },
                "content": {
                    "uri": "bb/Tile_+061_+024/Tile_+061_+024.json"
                },
                "geometricError": 54.4889363228122
            }, {
                "boundingVolume": {
                    "box": [1894.64739990234, 70.7054080963135, 9.54776215553284, 20.5929565429688, 0, 0, 0, 7.8891658782959, 0, 0, 0, 5.28816103935242]
                },
                "content": {
                    "uri": "bb/Tile_+061_+025/Tile_+061_+025.json"
                },
                "geometricError": 22.6775978581064
            }],
            "geometricError": 700.379674431607,
            "transform": [1, 0, 0, 0, 1.2432017357571995e-17, 1, -5.551115123125783e-17, 0, 1.1741393048713246e-17, 5.551115123125783e-17, 0.9999999999999998, 0, -2.7755747368212224e-10, 2.3283064365386963e-10, 0, 1]
        }, {
            "boundingVolume": {
                "box": [1399.13610839844, -98.4928131103516, 17.3625670671463, 113.360473632813, 0, 0, 0, 188.134658813477, 0, 0, 0, 14.1362904310226]
            },
            "children": [{
                "boundingVolume": {
                    "box": [1329.28283691406, -251.359550476074, 16.0720038414001, 43.5072021484375, 0, 0, 0, 18.6329727172852, 0, 0, 0, 11.7183384895325]
                },
                "content": {
                    "uri": "cc/Tile_+055_+021/Tile_+055_+021.json"
                },
                "geometricError": 48.7584225341977
            }, {
                "boundingVolume": {
                    "box": [1330.76959228516, -183.34806060791, 17.4266179800034, 42.6410522460938, 0, 0, 0, 50.4650802612305, 0, 0, 0, 14.0722395181656]
                },
                "content": {
                    "uri": "cc/Tile_+055_+022/Tile_+055_+022.json"
                },
                "geometricError": 67.5500672648307
            }, {
                "boundingVolume": {
                    "box": [1343.38549804688, -83.4295806884766, 13.3076241016388, 30.647216796875, 0, 0, 0, 50.3902435302734, 0, 0, 0, 8.86118960380554]
                },
                "content": {
                    "uri": "cc/Tile_+055_+023/Tile_+055_+023.json"
                },
                "geometricError": 59.6401645003559
            }, {
                "boundingVolume": {
                    "box": [1355.99951171875, 16.4887676239014, 12.5251359939575, 18.6517333984375, 0, 0, 0, 50.3155078887939, 0, 0, 0, 8.38973331451416]
                },
                "content": {
                    "uri": "cc/Tile_+055_+024/Tile_+055_+024.json"
                },
                "geometricError": 54.3132131065945
            }, {
                "boundingVolume": {
                    "box": [1368.37573242188, 77.9040107727051, 6.60480356216431, 6.41845703125, 0, 0, 0, 11.7378349304199, 0, 0, 0, 2.24518442153931]
                },
                "content": {
                    "uri": "cc/Tile_+055_+025/Tile_+055_+025.json"
                },
                "geometricError": 13.5651838396135
            }, {
                "boundingVolume": {
                    "box": [1407.76196289063, -259.938575744629, 15.907214641571, 35.7642822265625, 0, 0, 0, 26.6888961791992, 0, 0, 0, 11.5050873756409]
                },
                "content": {
                    "uri": "cc/Tile_+056_+021/Tile_+056_+021.json"
                },
                "geometricError": 46.0841415018922
            }, {
                "boundingVolume": {
                    "box": [1421.63781738281, -183.753875732422, 17.1668101549149, 49.4112548828125, 0, 0, 0, 50.4975280761719, 0, 0, 0, 13.9405335187912]
                },
                "content": {
                    "uri": "cc/Tile_+056_+022/Tile_+056_+022.json"
                },
                "geometricError": 72.0125747747334
            }, {
                "boundingVolume": {
                    "box": [1423.4345703125, -83.8446617126465, 13.146103978157, 50.58740234375, 0, 0, 0, 50.5813941955566, 0, 0, 0, 9.23278701305389]
                },
                "content": {
                    "uri": "cc/Tile_+056_+023/Tile_+056_+023.json"
                },
                "geometricError": 72.1304864165157
            }, {
                "boundingVolume": {
                    "box": [1424.056640625, 16.1404838562012, 14.5895075798035, 50.58740234375, 0, 0, 0, 50.5891609191895, 0, 0, 0, 10.2280697822571]
                },
                "content": {
                    "uri": "cc/Tile_+056_+024/Tile_+056_+024.json"
                },
                "geometricError": 72.2700621963674
            }, {
                "boundingVolume": {
                    "box": [1424.43774414063, 77.5803565979004, 13.805157661438, 50.35009765625, 0, 0, 0, 12.0362205505371, 0, 0, 0, 9.49176692962646]
                },
                "content": {
                    "uri": "cc/Tile_+056_+025/Tile_+056_+025.json"
                },
                "geometricError": 52.6317069700521
            }, {
                "boundingVolume": {
                    "box": [1482.11926269531, -79.1935214996338, 5.75612854957581, 9.2208251953125, 0, 0, 0, 45.3083171844482, 0, 0, 0, 1.68560910224915]
                },
                "content": {
                    "uri": "cc/Tile_+057_+023/Tile_+057_+023.json"
                },
                "geometricError": 46.2677911879815
            }, {
                "boundingVolume": {
                    "box": [1490.83251953125, 15.7759399414063, 12.0768136978149, 17.3740234375, 0, 0, 0, 50.3316650390625, 0, 0, 0, 8.07517910003662]
                },
                "content": {
                    "uri": "cc/Tile_+057_+024/Tile_+057_+024.json"
                },
                "geometricError": 53.8548207081674
            }, {
                "boundingVolume": {
                    "box": [1493.28857421875, 77.2821998596191, 9.15342235565186, 19.2080078125, 0, 0, 0, 11.946231842041, 0, 0, 0, 4.94451904296875]
                },
                "content": {
                    "uri": "cc/Tile_+057_+025/Tile_+057_+025.json"
                },
                "geometricError": 23.1540123502415
            }],
            "geometricError": 440.204868379572,
            "transform": [1, 0, 0, 0, 1.2432017357571995e-17, 1, -5.551115123125783e-17, 0, 1.1741393048713246e-17, 5.551115123125783e-17, 0.9999999999999998, 0, -2.7755747368212224e-10, 2.3283064365386963e-10, 0, 1]
        }, {
            "boundingVolume": {
                "box": [-1300.84271240234, -886.116760253906, -6.17444896697998, 139.575012207031, 0, 0, 0, 116.933471679688, 0, 0, 0, 37.8926019668579]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-1391.99407958984, -933.559753417969, 14.0356489419937, 48.4236450195313, 0, 0, 0, 48.149169921875, 0, 0, 0, 11.1117585897446]
                },
                "content": {
                    "uri": "dd/Tile_+025_+004/Tile_+025_+004.json"
                },
                "geometricError": 69.1857148557412
            }, {
                "boundingVolume": {
                    "box": [-1369.02563476563, -852.159057617188, 2.13443279266357, 25.9090576171875, 0, 0, 0, 34.1532592773438, 0, 0, 0, 21.7199869155884]
                },
                "content": {
                    "uri": "dd/Tile_+025_+005/Tile_+025_+005.json"
                },
                "geometricError": 48.0570725022815
            }, {
                "boundingVolume": {
                    "box": [-1299.24267578125, -994.438171386719, 9.6319876909256, 32.385498046875, 0, 0, 0, 8.612060546875, 0, 0, 0, 5.9280823469162]
                },
                "content": {
                    "uri": "dd/Tile_+026_+003/Tile_+026_+003.json"
                },
                "geometricError": 34.0313125065579
            }, {
                "boundingVolume": {
                    "box": [-1294.17193603516, -936.282165527344, 16.2041157484055, 50.5923461914063, 0, 0, 0, 50.5336303710938, 0, 0, 0, 12.6391478776932]
                },
                "content": {
                    "uri": "dd/Tile_+026_+004/Tile_+026_+004.json"
                },
                "geometricError": 72.6152969470457
            }, {
                "boundingVolume": {
                    "box": [-1293.55456542969, -836.444793701172, 6.14014911651611, 50.57958984375, 0, 0, 0, 50.5338439941406, 0, 0, 0, 25.3308382034302]
                },
                "content": {
                    "uri": "dd/Tile_+026_+005/Tile_+026_+005.json"
                },
                "geometricError": 75.852591660895
            }, {
                "boundingVolume": {
                    "box": [-1292.90478515625, -778.007720947266, 15.3367151618004, 27.361083984375, 0, 0, 0, 8.82443237304688, 0, 0, 0, 13.8531003594398]
                },
                "content": {
                    "uri": "dd/Tile_+026_+006/Tile_+026_+006.json"
                },
                "geometricError": 31.9125040238965
            }, {
                "boundingVolume": {
                    "box": [-1219.70953369141, -920.958221435547, 15.8824429512024, 24.8853149414063, 0, 0, 0, 34.5433654785156, 0, 0, 0, 12.3139815330505]
                },
                "content": {
                    "uri": "dd/Tile_+027_+004/Tile_+027_+004.json"
                },
                "geometricError": 44.3188124785806
            }, {
                "boundingVolume": {
                    "box": [-1202.70550537109, -841.645172119141, -6.17444896697998, 41.4378051757813, 0, 0, 0, 45.6526794433594, 0, 0, 0, 37.8926019668579]
                },
                "content": {
                    "uri": "dd/Tile_+027_+005/Tile_+027_+005.json"
                },
                "geometricError": 72.3678666395718
            }],
            "geometricError": 371.970268249901,
            "transform": [0.9999996554194588, 0.0004363781417063284, -0.0007062117813477209, 0, -0.0004361717010063091, 0.9999998621139483, 0.0002924488538288972, 0, 0.000706339302258286, -0.00029214072346267494, 0.9999997078692504, 0, 4509.297381684372, -1855.9799298739526, -1.8636501030996442, 1]
        }, {
            "boundingVolume": {
                "box": [24.9149742126465, 458.556976318359, 5.52865505218506, 97.6052131652832, 0, 0, 0, 49.4085388183594, 0, 0, 0, 18.3740262985229]
            },
            "children": [{
                "boundingVolume": {
                    "box": [-53.5235767364502, 460.995025634766, 4.8595757484436, 19.1666622161865, 0, 0, 0, 44.6980590820313, 0, 0, 0, 17.1172251701355]
                },
                "content": {
                    "uri": "ee/Tile_+038_+018/Tile_+038_+018.json"
                },
                "geometricError": 51.5584796491835
            }, {
                "boundingVolume": {
                    "box": [-49.5933418273926, 506.448089599609, 3.60871529579163, 15.2364234924316, 0, 0, 0, 1.51742553710938, 0, 0, 0, 0.110045909881592]
                },
                "content": {
                    "uri": "ee/Tile_+038_+019/Tile_+038_+019.json"
                },
                "geometricError": 15.3121941995155
            }, {
                "boundingVolume": {
                    "box": [15.0548553466797, 457.191497802734, 5.52865505218506, 50.5630187988281, 0, 0, 0, 48.0430603027344, 0, 0, 0, 18.3740262985229]
                },
                "content": {
                    "uri": "ee/Tile_+039_+018/Tile_+039_+018.json"
                },
                "geometricError": 72.1273828425906
            }, {
                "boundingVolume": {
                    "box": [-33.1613292694092, 505.072769165039, 3.53735184669495, 1.75724983215332, 0, 0, 0, 0.161758422851563, 0, 0, 0, 0.157356977462769]
                },
                "content": {
                    "uri": "ee/Tile_+039_+019/Tile_+039_+019.json"
                },
                "geometricError": 1.77168111643222
            }, {
                "boundingVolume": {
                    "box": [93.4946136474609, 456.362838745117, 5.13061237335205, 29.0255737304688, 0, 0, 0, 45.5960540771484, 0, 0, 0, 17.7045965194702]
                },
                "content": {
                    "uri": "ee/Tile_+040_+018/Tile_+040_+018.json"
                },
                "geometricError": 56.8765049533316
            }],
            "geometricError": 221.861093368121,
            "transform": [0.9999996554194588, 0.0004363781417063284, -0.0007062117813477209, 0, -0.0004361717010063091, 0.9999998621139483, 0.0002924488538288972, 0, 0.000706339302258286, -0.00029214072346267494, 0.9999997078692504, 0, 4509.297381684372, -1855.9799298739526, -1.8636501030996442, 1]
        }],
        "geometricError": 9325.869057604898,
        "transform": [-0.860048066843865, -0.510213017001851, 0, 0, 0.268197168561964, -0.452090496848062, 0.850696456695934, 0, -0.434036405723617, 0.731639843052264, 0.525657244376012, 0, -2770907.60361716, 4670821.10507043, 3333353.96012987, 1]
    }
}
java源码:
Matrix.java
package org.example.threedtiles;

import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;

import java.util.ArrayList;

public class Matrix {
    /**
     * 一维转二维
     *
     * @param ms
     * @return
     */
    public static double[][] dConver(double[] ms) {
        double[][] matrix;
        int n = (int) Math.sqrt(ms.length);
        matrix = new double[n][n];
        for (int i = 0; i < ms.length; i++) {
            int row = i % n;
            int col = (int) Math.floor(i / n);
            matrix[row][col] = ms[i];
        }
        return matrix;
    }

    /**
     * 二维转一维
     *
     * @param
     * @return
     */
    public static double[] converttwotoone(double[][] ms) {
        // 计算二维数组的元素个数
        int totalElements = 0;
        for (double[] row : ms) {
            totalElements += row.length;
        }
        double matrix[] = new double[totalElements];
        for (int i = 0; i < ms.length; i++) {
            double[] rows = ms[i];
            for (int j = 0; j < rows.length; j++)
                matrix[i + j * rows.length] = rows[j];
        }
        return matrix;
    }

    static double det(double[][] ms) {
        // 矩阵阶数
        int n = ms.length;
        double detVal = 0;
        // n阶矩阵求行列式
        if (n > 3) {
            for (int column = 0; column < n; column++) // 去掉第 0行第column列的矩阵
            {
                double[][] matrix = new double[n - 1][n - 1];
                for (int i = 0; i < n - 1; i++) {
                    for (int j = 0; j < n - 1; j++) {
                        if (j < column) {
                            matrix[i][j] = ms[i + 1][j];
                        } else {
                            matrix[i][j] = ms[i + 1][j + 1];
                        }
                    }
                }
                detVal += ms[0][column] * Math.pow(-1, 0 + column) * det(matrix);
            }
        }
        // 3阶矩阵求行列式
        else if (n == 3)
            detVal = ms[0][0] * ms[1][1] * ms[2][2] + ms[0][1] * ms[1][2] * ms[2][0] //
                    + ms[0][2] * ms[1][0] * ms[2][1] - ms[0][2] * ms[1][1] * ms[2][0] //
                    - ms[0][1] * ms[1][0] * ms[2][2] - ms[0][0] * ms[1][2] * ms[2][1];
            // 2阶矩阵求行列式
        else if (n == 2)
            detVal = ms[0][0] * ms[1][1] - ms[0][1] * ms[1][0];
            // 1阶矩阵求行列式
        else if (n == 1)
            detVal = ms[0][0];
        return detVal;
    }

    /**
     * 伴随矩阵
     *
     * @param
     * @return
     */


    public static double[][] adjoint(double[][] ms) {

        double[][] adjM = new double[ms.length][ms.length];


        for (int row = 0; row < ms.length; row++) {
            for (int column = 0; column < ms.length; column++) { // 去掉第 row 行第 column 列的矩阵
                ArrayList matrix = new ArrayList();
                for (int i = 0; i < ms.length; i++) {
                    if (i != row) {
                        //double[] arr = new double[ms.length];
                        ArrayList arr = new ArrayList();
                        for (int j = 0; j < ms.length; j++) {
                            if (j != column) {
                                arr.add(ms[i][j]);
                            }
                        }
                        matrix.add(arr);
                    }
                }
                // 将arraylist转化为二维矩阵
                double[][] matrix2 = new double[ms.length - 1][ms.length - 1];
                matrix2 = convertArrayToTwo(matrix);
                double a = Matrix.det(matrix2);
                adjM[row][column] = (Math.pow(-1, row + column) * Matrix.det(matrix2));
            }
        }

        // 转置并返回结果
        return Matrix.transpose(adjM);
    }

    public static double[][] transpose(double[][] ms) {
        double[][] transM = new double[ms.length][ms[0].length];
        for (int i = 0; i < transM.length; i++) {
            for (int j = 0; j < transM[0].length; j++) {
                transM[i][j] = ms[j][i];
            }
        }
        return transM;
    }

    /**
     * 逆矩阵
     *
     * @param ms
     * @return
     */
    public static double[][] inv(double[][] ms) {
        System.out.println("进入inv方法---");
        RealMatrix a = new Array2DRowRealMatrix(ms);
        double detVal = (int) (Matrix.det(a.getData()) + 0.5);
        double[][] invM = Matrix.adjoint(ms);
        for (int i = 0; i < invM.length; i++) {
            for (int j = 0; j < invM.length; j++)
                invM[i][j] /= detVal;
        }
        System.out.println("inv方法结束---");
        return invM;

    }

    /**
     * // ********************** 【矩阵相乘】 **********************
     *
     * @param m1
     * @param m2
     * @return
     */
    public static double[][] mul(double[][] m1, double[][] m2) {
        RealMatrix a = new Array2DRowRealMatrix(m1);
        RealMatrix b = new Array2DRowRealMatrix(m2);
        RealMatrix actual = a.multiply(b);
        return actual.getData();
    }
    private static double[][] convertArrayToTwo(ArrayList matrix) {
        // 将arraylist转化为一维数组
        double tra[][] = new double[matrix.size()][((ArrayList) matrix.get(0)).size()];
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < ((ArrayList) matrix.get(0)).size(); j++) {
                tra[i][j] = (double) ((ArrayList) matrix.get(i)).get(j);
            }
        }
        return tra;
    }

}
ThreeDTilesJoin2.java
package org.example.threedtiles;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

public class ThreeDTilesJoin2 {

    public static void main(String[] args) throws IOException {
        // 取参数:是否追加合并
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象

        // System.out.println("请输入追加合并参数0/1:");
        //int isAppendInt = scanner.nextInt(); // 接受用户输入的一行文本
        int isAppendInt = 0; // 接受用户输入的一行文本


        Boolean isAppend = isAppendInt == 1 ? true : isAppendInt == 0 ? false : null;
        // 取参数:合并图层目录
        System.out.println("请输入合并图层目标目录(绝对目录):");
        // String joinLayerPath = scanner.next();
        String joinLayerPath = "D:\\JAVA\\3dtiles\\java_test";
        // 取参数:源图层目录
        System.out.println("请输入源图层目录(多个目录用‘,’隔开):");
//        String srcLayerPaths = scanner.next();
        String srcLayerPaths = "D:\\JAVA\\3dtiles\\data\\aa,D:\\JAVA\\3dtiles\\data\\bb,D:\\JAVA\\3dtiles\\data\\cc,D:\\JAVA\\3dtiles\\data\\dd,D:\\JAVA\\3dtiles\\data\\ee";


        // ================== 新建合并图层目录 ==================
        // 合并图层目录已存在且非追加:确认后清空
        File joinLayerFile = new File(joinLayerPath);
        if (joinLayerFile.exists() && !isAppend) {
            joinLayer(joinLayerPath, srcLayerPaths.split(","), isAppend);
        } else {
            // 合并图层目录不存在:创建
            if (!joinLayerFile.exists()) {
                joinLayerFile.mkdirs();
            }

            isAppend = Boolean.FALSE;
            joinLayer(joinLayerPath, srcLayerPaths.split(","), isAppend);
        }
        scanner.close(); // 关闭scanner对象
    }


    public static JSONObject readJsonFile(String path) throws IOException {
        String jsonString = "";
        jsonString = new String(Files.readAllBytes(Paths.get(path)));
        return JSON.parseObject(jsonString);
    }



    // 将jsonarray转化为一维数组
    public static double[] converttoone(JSONArray jsonArray) {
        // 将arraylist转化为一维数组
        double tra[] = new double[jsonArray.size()];
        for (int i = 0; i < jsonArray.size(); i++) {
            tra[i] = jsonArray.getDoubleValue(i);
        }
        return tra;
    }




    // 函数:合并图层
    public static void joinLayer(String joinLayerPath, String[] srcLayerPaths, Boolean isAppend) throws IOException {
        JSONObject joinCfgo = new JSONObject();
        double[][] joinTrsfInv = new double[4][4];
        System.out.println("开始合并..." + joinLayerPath);
        // 依次合并源图层目录
        ArrayList srcRtChoList = new ArrayList();
        for (int i = 0; i < srcLayerPaths.length; i++) {
            String srcLayerPath = srcLayerPaths[i];
            System.out.println("开始合并目录" + srcLayerPath);
            // 读取源图层的配置文件
            JSONObject srcCfgo = readJsonFile(srcLayerPath + "\\" + "tileset.json");
            if (srcCfgo == null) {
                continue; // 读取失败:继续下一个
            }
            // 首次:生成合并图层配置对象、取合并图层转换矩阵的逆矩阵
            if (i == 0) {

                JSONObject asset = new JSONObject();
                asset.put("asset", srcCfgo.get("asset"));
                asset.put("geometricError", 0.0);
                JSONObject root = new JSONObject();
                JSONObject boundingVolume = new JSONObject();
                boundingVolume.put("box", new JSONArray());
                root.put("boundingVolume", boundingVolume);
                root.put("children", new JSONArray());
                root.put("geometricError", 0.0);
                root.put("transform", srcCfgo.getJSONObject("root").getJSONArray("transform"));

                asset.put("root", root);
                joinCfgo = !isAppend ? // 非追加:初始化配置对象
                        asset
                        : readJsonFile(joinLayerPath + "\\" + "tileset.json"); // 追加:从合并图层中读取
                // 取合并图层转换矩阵的逆矩阵
                double[] a = converttoone(joinCfgo.getJSONObject("root").getJSONArray("transform"));
                double[][] a2 = Matrix.dConver(a);
                joinTrsfInv = Matrix.inv(a2); // 取合并图层转换矩阵的逆矩阵
            }
            // 计算子对象的转换矩阵
            double[] b = converttoone(srcCfgo.getJSONObject("root").getJSONArray("transform"));
            double[] srcTrsf = Matrix.converttwotoone(Matrix.mul(joinTrsfInv, Matrix.dConver(b)));
            // 设置源图层子对象的转换矩阵
            JSONArray srcRtChos = srcCfgo.getJSONObject("root").getJSONArray("children");

            for (int l = 0; l < srcRtChos.size(); l++) {
                JSONObject srcRtCho = srcRtChos.getJSONObject(l);
                //JSONObject srcRtCho = new JSONObject();
                srcRtCho.put("transform", srcTrsf);
                // 替换uri开头为源图层目录名
                if (srcRtCho.getString("content") != null) {
                    srcRtCho.getJSONObject("content").put("uri", srcLayerPath + "/" + srcRtCho.getJSONObject("content").getString("uri"));
                }
                for (int j = 0; j < srcRtCho.getJSONArray("children").size(); j++) {
                    srcRtCho.getJSONArray("children").getJSONObject(j).getJSONObject("content").put("uri", srcLayerPath + "/" + srcRtCho.getJSONArray("children").getJSONObject(j).getJSONObject("content").getString("uri"));
                }
                // 合并源图层子对象
                int chIdx = -1;
                for (int j = 0; j < joinCfgo.getJSONObject("root").getJSONArray("children").size() && chIdx == -1; j++) {
                    JSONObject joinRtCh = joinCfgo.getJSONObject("root").getJSONArray("children").getJSONObject(j);
                    // 子对象无内层对象
                    if (joinRtCh.getJSONObject("content") != null && srcRtCho.getJSONObject("content") != null && joinRtCh.getJSONObject("content").getString("uri").equals(srcRtCho.getJSONObject("content").getString("uri"))) {
                        chIdx = j;
                        continue;
                    }
                    // 子对象有内存对象
                    if (joinRtCh.getJSONArray("children") != null && srcRtCho.getJSONArray("children") != null) {
                        Boolean found = false;

                        for (int k = 0; k < joinRtCh.getJSONArray("children").size() && !found; k++) {
                            if (!joinRtCh.getJSONArray("children").getJSONObject(k).getJSONObject("content").getString("uri").equals(srcRtCho.getJSONArray("children").getJSONObject(k).getJSONObject("content").getString("uri"))) {
                                found = true;
                            }
                        }
                        if (!found) {
                            chIdx = j;
                        }
                    }


                }
                if (isAppend && chIdx >= 0) {
                    joinCfgo.getJSONObject("root").getJSONArray("children").get(chIdx); // 追加合并已存在源图层:覆盖
                }

                srcRtChoList.add(srcRtCho);

            }

            System.out.println(srcLayerPath + " 已合并。");
        }
        joinCfgo.getJSONObject("root").put("children", srcRtChoList);
        System.out.println("全部已合并。");
        // 计算合并图层配置对象外围框属性数值
        JSONArray joinRtChs = joinCfgo.getJSONObject("root").getJSONArray("children");
        // 最大的x坐标、最小的x坐标、最大的y坐标、最小的y坐标、最大的z坐标、最小的z坐标、最大的z轴半长
        double maxX = 0.0, minX = 0.0, maxY = 0.0, minY = 0.0, maxZ = 0.0, minZ = 0.0;
        for (int i = 0; i < joinRtChs.size(); i++) {
            JSONObject joinRtCh = joinRtChs.getJSONObject(i);
            double[] o = new double[]{
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(0)).doubleValue() +
                            ((double) (joinRtCh.getJSONArray("transform").get(12))),
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(1)).doubleValue() +
                            ((double) (joinRtCh.getJSONArray("transform").get(13))),
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(2)).doubleValue()
                            + ((double) joinRtCh.getJSONArray("transform").get(14))
            };
            double[] r = new double[]{
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(3)).doubleValue(),
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(7)).doubleValue(),
                    ((BigDecimal) joinRtCh.getJSONObject("boundingVolume").getJSONArray("box").get(11)).doubleValue()
            };
            double[] xa = new double[]{o[0] - r[0], o[0] + r[0]};
            double[] ya = new double[]{o[1] - r[1], o[1] + r[1]};
            double[] za = new double[]{o[2] - r[2], o[2] + r[2]};
            if (i == 0) {
                minX = xa[0];
                maxX = xa[1];
                minY = ya[0];
                maxY = ya[1];
                minZ = za[0];
                maxZ = za[1];
            } else {
                minX = Math.min(xa[0], minX);
                maxX = Math.max(xa[1], maxX);
                minY = Math.min(ya[0], minY);
                maxY = Math.max(ya[1], maxY);
                minZ = Math.min(za[0], minZ);
                maxZ = Math.max(za[1], maxZ);
            }
        }
        // 计算:最外层包围盒x轴坐标、最外层包围盒y轴坐标、最外层包围盒z轴坐标
        double[] boxs = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        boxs[0] = (maxX + minX) / 2;
        boxs[1] = (maxY + minY) / 2;
        boxs[2] = (maxZ + minZ) / 2;

        // 计算:最外层包围盒x轴半长、最外层包围盒y轴半长、最外层包围盒z轴半长
        boxs[3] = (maxX - minX) / 2;
        boxs[7] = (maxY - minY) / 2;
        boxs[11] = (maxZ - minZ) / 2;

        joinCfgo.getJSONObject("root").getJSONObject("boundingVolume").put("box", boxs);

        // 计算:最外层包围盒几何误差值
        double geometricError = (double) Math.sqrt(Math.pow(boxs[3], 2) + Math.pow(boxs[7], 2)) * 2;
        joinCfgo.put("geometricError", geometricError);
        joinCfgo.getJSONObject("root").put("geometricError", geometricError);

        // 保存tileset文件
        try (FileWriter writer = new FileWriter(joinLayerPath + "\\" + "tileset.json")) {
            if (new File(joinLayerPath + "\\" + "tileset.json").exists()) {
                new File(joinLayerPath + "\\" + "tileset.json").delete();
            }
            writer.write(String.valueOf(joinCfgo));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 提示完成
        System.out.println("图层合并完成。");
    }
}
pom文件
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>
运行程序:

D:\JAVA\3dtiles\java_test

D:\JAVA\3dtiles\data\aa,D:\JAVA\3dtiles\data\bb,D:\JAVA\3dtiles\data\cc,D:\JAVA\3dtiles\data\dd,D:\JAVA\3dtiles\data\ee

生成合成文件
{
    "geometricError": 9325.869057604898,
    "root": {
        "geometricError": 9325.869057604898,
        "transform": [-0.860048066843865, -0.510213017001851, 0.0, 0.0, 0.268197168561964, -0.452090496848062, 0.850696456695934, 0.0, -0.434036405723617, 0.731639843052264, 0.525657244376012, 0.0, -2770907.60361716, 4670821.10507043, 3333353.96012987, 1.0],
        "children": [{
            "geometricError": 740.579323830987,
            "transform": [1.0, 0.0, 0.0, 0.0, 1.2432017357571995E-17, 1.0, -5.551115123125783E-17, 0.0, 1.1741393048713246E-17, 5.551115123125783E-17, 0.9999999999999998, 0.0, -2.7755747368212224E-10, 2.3283064365386963E-10, 0.0, 1.0],
            "children": [{
                "geometricError": 30.8405098086856,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+002_+029/Tile_+002_+029.json"
                },
                "boundingVolume": {
                    "box": [-3935.02001953125, 574.504516601563, 15.7210890054703, 13.139404296875, 0, 0, 0, 25.2759399414063, 0, 0, 0, 11.8160890340805]
                }
            }, {
                "geometricError": 32.4810451438208,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+002_+030/Tile_+002_+030.json"
                },
                "boundingVolume": {
                    "box": [-3931.19152832031, 630.064575195313, 5.76587748527527, 9.6800537109375, 0, 0, 0, 30.9617309570313, 0, 0, 0, 1.63892340660095]
                }
            }, {
                "geometricError": 62.1966519849389,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+003_+029/Tile_+003_+029.json"
                },
                "boundingVolume": {
                    "box": [-3872.32775878906, 566.557830810547, 15.5438475459814, 50.4261474609375, 0, 0, 0, 33.1085510253906, 0, 0, 0, 15.1476407200098]
                }
            }, {
                "geometricError": 60.5573157368986,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+003_+030/Tile_+003_+030.json"
                },
                "boundingVolume": {
                    "box": [-3872.03454589844, 628.938293457031, 18.1283311843872, 50.4095458984375, 0, 0, 0, 30.4552612304688, 0, 0, 0, 14.090537071228]
                }
            }, {
                "geometricError": 55.4774127211521,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+004_+027/Tile_+004_+027.json"
                },
                "boundingVolume": {
                    "box": [-3749.26013183594, 352.109008789063, 19.1447021961212, 26.1177978515625, 0, 0, 0, 46.5369567871094, 0, 0, 0, 15.1629683971405]
                }
            }, {
                "geometricError": 53.5997083475893,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+004_+028/Tile_+004_+028.json"
                },
                "boundingVolume": {
                    "box": [-3740.12866210938, 448.188674926758, 9.04387199878693, 17.607421875, 0, 0, 0, 50.3167572021484, 0, 0, 0, 5.57954967021942]
                }
            }, {
                "geometricError": 73.1092989703366,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+004_+029/Tile_+004_+029.json"
                },
                "boundingVolume": {
                    "box": [-3772.3740234375, 548.456268310547, 19.1229840517044, 50.480712890625, 0, 0, 0, 50.5904846191406, 0, 0, 0, 15.4035738706589]
                }
            }, {
                "geometricError": 56.6759666652712,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+004_+030/Tile_+004_+030.json"
                },
                "boundingVolume": {
                    "box": [-3772.05346679688, 619.552154541016, 18.2076432704926, 50.41162109375, 0, 0, 0, 21.6935119628906, 0, 0, 0, 14.1500952243805]
                }
            }, {
                "geometricError": 7.30462462257396,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+026/Tile_+005_+026.json"
                },
                "boundingVolume": {
                    "box": [-3689.02783203125, 297.003692626953, 10.0964844226837, 5.725341796875, 0, 0, 0, 1.25363159179688, 0, 0, 0, 4.35963416099548]
                }
            }, {
                "geometricError": 72.1511203206034,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+027/Tile_+005_+027.json"
                },
                "boundingVolume": {
                    "box": [-3673.70959472656, 348.031799316406, 12.3951093554497, 50.5650634765625, 0, 0, 0, 50.4035339355469, 0, 0, 0, 10.4135625958443]
                }
            }, {
                "geometricError": 72.3192882676973,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+028/Tile_+005_+028.json"
                },
                "boundingVolume": {
                    "box": [-3673.11413574219, 447.839309692383, 6.34941649436951, 50.5919189453125, 0, 0, 0, 50.5899505615234, 0, 0, 0, 10.5448610782623]
                }
            }, {
                "geometricError": 73.4642639567206,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+029/Tile_+005_+029.json"
                },
                "boundingVolume": {
                    "box": [-3672.49230957031, 547.832534790039, 18.5858655571938, 50.5924072265625, 0, 0, 0, 50.5895843505859, 0, 0, 0, 16.6763414740562]
                }
            }, {
                "geometricError": 74.6720404728155,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+030/Tile_+005_+030.json"
                },
                "boundingVolume": {
                    "box": [-3671.8740234375, 647.7919921875, 11.636326789856, 50.582763671875, 0, 0, 0, 50.5528564453125, 0, 0, 0, 21.4873533248901]
                }
            }, {
                "geometricError": 59.0928810211615,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+005_+031/Tile_+005_+031.json"
                },
                "boundingVolume": {
                    "box": [-3665.76831054688, 730.397674560547, 12.528514623642, 44.778076171875, 0, 0, 0, 33.1688537597656, 0, 0, 0, 19.6651880741119]
                }
            }, {
                "geometricError": 2.56280235528877,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+006_+027/Tile_+006_+027.json"
                },
                "boundingVolume": {
                    "box": [-3622.38244628906, 395.646423339844, 5.87387609481812, 1.3489990234375, 0, 0, 0, 2.1663818359375, 0, 0, 0, 0.234408378601074]
                }
            }, {
                "geometricError": 60.3478889488445,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+006_+028/Tile_+006_+028.json"
                },
                "boundingVolume": {
                    "box": [-3591.23608398438, 447.522384643555, 11.8303036689758, 32.471923828125, 0, 0, 0, 50.2840118408203, 0, 0, 0, 7.67854261398315]
                }
            }, {
                "geometricError": 74.5552928526268,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+006_+029/Tile_+006_+029.json"
                },
                "boundingVolume": {
                    "box": [-3572.49584960938, 547.324279785156, 11.0218200683594, 50.58984375, 0, 0, 0, 50.475830078125, 0, 0, 0, 21.2449989318848]
                }
            }, {
                "geometricError": 74.8959219033318,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+006_+030/Tile_+006_+030.json"
                },
                "boundingVolume": {
                    "box": [-3571.88171386719, 647.205322265625, 10.7785501480103, 50.5970458984375, 0, 0, 0, 50.5909423828125, 0, 0, 0, 22.133563041687]
                }
            }, {
                "geometricError": 72.2022021595952,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+006_+031/Tile_+006_+031.json"
                },
                "boundingVolume": {
                    "box": [-3571.29382324219, 746.071563720703, 18.3907251358032, 50.5609130859375, 0, 0, 0, 49.4609680175781, 0, 0, 0, 14.5039548873901]
                }
            }, {
                "geometricError": 24.8871576967365,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+007_+029/Tile_+007_+029.json"
                },
                "boundingVolume": {
                    "box": [-3509.61206054688, 576.114654541016, 6.37169981002808, 13.11669921875, 0, 0, 0, 21.0632019042969, 0, 0, 0, 1.91424798965454]
                }
            }, {
                "geometricError": 68.1412415259338,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+007_+030/Tile_+007_+030.json"
                },
                "boundingVolume": {
                    "box": [-3478.34790039063, 646.816314697266, 16.745255947113, 44.12158203125, 0, 0, 0, 50.3578186035156, 0, 0, 0, 12.6729989051819]
                }
            }, {
                "geometricError": 68.8705243969495,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+007_+031/Tile_+007_+031.json"
                },
                "boundingVolume": {
                    "box": [-3471.40478515625, 741.000762939453, 17.6509721279144, 50.4560546875, 0, 0, 0, 44.9321594238281, 0, 0, 0, 13.3580210208893]
                }
            }, {
                "geometricError": 20.4571827291191,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\aa/Tile_+008_+031/Tile_+008_+031.json"
                },
                "boundingVolume": {
                    "box": [-3412.68273925781, 734.155242919922, 10.6947717666626, 9.0433349609375, 0, 0, 0, 17.5325012207031, 0, 0, 0, 5.41533184051514]
                }
            }],
            "boundingVolume": {
                "box": [-3675.8994140625, 545.641296386719, 11.9535970687866, 272.260009765625, 0, 0, 0, 249.891235351563, 0, 0, 0, 23.3086099624634]
            }
        }, {
            "geometricError": 700.379674431607,
            "transform": [1.0, 0.0, 0.0, 0.0, 1.2432017357571995E-17, 1.0, -5.551115123125783E-17, 0.0, 1.1741393048713246E-17, 5.551115123125783E-17, 0.9999999999999998, 0.0, -2.7755747368212224E-10, 2.3283064365386963E-10, 0.0, 1.0],
            "children": [{
                "geometricError": 52.3324755539293,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+056_+021/Tile_+056_+021.json"
                },
                "boundingVolume": {
                    "box": [1456.77575683594, -283.401695251465, 9.57817316055298, 16.002197265625, 0, 0, 0, 49.5448379516602, 0, 0, 0, 5.28457307815552]
                }
            }, {
                "geometricError": 5.08756693533562,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+056_+022/Tile_+056_+022.json"
                },
                "boundingVolume": {
                    "box": [1471.31585693359, -229.578811645508, 4.45599508285522, 1.51898193359375, 0, 0, 0, 4.85548400878906, 0, 0, 0, 0.0174999237060547]
                }
            }, {
                "geometricError": 43.4282813138826,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+020/Tile_+057_+020.json"
                },
                "boundingVolume": {
                    "box": [1531.82299804688, -348.998123168945, 10.2060108184814, 40.3277587890625, 0, 0, 0, 14.9526214599609, 0, 0, 0, 6.00887680053711]
                }
            }, {
                "geometricError": 72.0071649495143,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+021/Tile_+057_+021.json"
                },
                "boundingVolume": {
                    "box": [1522.18682861328, -284.460159301758, 9.90673196315765, 50.5840454101563, 0, 0, 0, 50.5893402099609, 0, 0, 0, 8.18564665317535]
                }
            }, {
                "geometricError": 71.7306262252761,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+022/Tile_+057_+022.json"
                },
                "boundingVolume": {
                    "box": [1522.80364990234, -184.549896240234, 9.43511211872101, 50.5891723632813, 0, 0, 0, 50.506591796875, 0, 0, 0, 5.92474162578583]
                }
            }, {
                "geometricError": 63.2145990047746,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+023/Tile_+057_+023.json"
                },
                "boundingVolume": {
                    "box": [1536.63287353516, -84.6287059783936, 10.7433174848557, 37.3843383789063, 0, 0, 0, 50.4350147247314, 0, 0, 0, 7.403111577034]
                }
            }, {
                "geometricError": 57.120656310518,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+024/Tile_+057_+024.json"
                },
                "boundingVolume": {
                    "box": [1548.78259277344, 15.3128070831299, 11.0693670511246, 25.8543701171875, 0, 0, 0, 50.38356590271, 0, 0, 0, 7.47109162807465]
                }
            }, {
                "geometricError": 21.9752339830746,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+057_+025/Tile_+057_+025.json"
                },
                "boundingVolume": {
                    "box": [1557.44226074219, 77.4114685058594, 8.79704344272614, 17.3408203125, 0, 0, 0, 12.489372253418, 0, 0, 0, 5.12078511714935]
                }
            }, {
                "geometricError": 59.0020951037097,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+020/Tile_+058_+020.json"
                },
                "boundingVolume": {
                    "box": [1621.77416992188, -364.557540893555, 10.4570751190186, 50.3675537109375, 0, 0, 0, 30.0714874267578, 0, 0, 0, 6.32948684692383]
                }
            }, {
                "geometricError": 72.0571490462324,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+021/Tile_+058_+021.json"
                },
                "boundingVolume": {
                    "box": [1622.17553710938, -285.081962585449, 12.8714859485626, 50.5882568359375, 0, 0, 0, 50.5891189575195, 0, 0, 0, 8.59081149101257]
                }
            }, {
                "geometricError": 72.057572175005,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+022/Tile_+058_+022.json"
                },
                "boundingVolume": {
                    "box": [1622.79650878906, -185.08927154541, 13.1854486465454, 50.589111328125, 0, 0, 0, 50.5890426635742, 0, 0, 0, 8.58977794647217]
                }
            }, {
                "geometricError": 71.7584552136979,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+023/Tile_+058_+023.json"
                },
                "boundingVolume": {
                    "box": [1623.42102050781, -85.0964012145996, 10.2867512702942, 50.5892333984375, 0, 0, 0, 50.5891151428223, 0, 0, 0, 5.54497861862183]
                }
            }, {
                "geometricError": 71.8362092102733,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+024/Tile_+058_+024.json"
                },
                "boundingVolume": {
                    "box": [1624.04296875, 14.8963890075684, 10.8929178714752, 50.5892333984375, 0, 0, 0, 50.5891761779785, 0, 0, 0, 6.47345900535583]
                }
            }, {
                "geometricError": 52.1549404310852,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+058_+025/Tile_+058_+025.json"
                },
                "boundingVolume": {
                    "box": [1624.42224121094, 76.6347541809082, 9.87600064277649, 50.348876953125, 0, 0, 0, 12.3346061706543, 0, 0, 0, 5.74333453178406]
                }
            }, {
                "geometricError": 68.3571850119951,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+020/Tile_+059_+020.json"
                },
                "boundingVolume": {
                    "box": [1721.67340087891, -379.611175537109, 16.0873470306396, 50.4609985351563, 0, 0, 0, 44.5035400390625, 0, 0, 0, 12.0758972167969]
                }
            }, {
                "geometricError": 71.5494598798882,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+021/Tile_+059_+021.json"
                },
                "boundingVolume": {
                    "box": [1722.16735839844, -285.70393371582, 5.40806865692139, 50.589111328125, 0, 0, 0, 50.5890960693359, 0, 0, 0, 0.90021276473999]
                }
            }, {
                "geometricError": 72.0070284535943,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+022/Tile_+059_+022.json"
                },
                "boundingVolume": {
                    "box": [1722.79113769531, -185.71117401123, 12.7560157775879, 50.5909423828125, 0, 0, 0, 50.5891342163086, 0, 0, 0, 8.14298439025879]
                }
            }, {
                "geometricError": 72.025400782929,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+023/Tile_+059_+023.json"
                },
                "boundingVolume": {
                    "box": [1723.41357421875, -85.7185573577881, 12.8922352790833, 50.5914306640625, 0, 0, 0, 50.5892429351807, 0, 0, 0, 8.30024099349976]
                }
            }, {
                "geometricError": 72.1288660796897,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+024/Tile_+059_+024.json"
                },
                "boundingVolume": {
                    "box": [1724.03527832031, 14.2743854522705, 13.8084480762482, 50.5885009765625, 0, 0, 0, 50.5892391204834, 0, 0, 0, 9.1709201335907]
                }
            }, {
                "geometricError": 52.1751911593196,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+059_+025/Tile_+059_+025.json"
                },
                "boundingVolume": {
                    "box": [1724.40911865234, 75.4231605529785, 11.6732699871063, 50.3403930664063, 0, 0, 0, 11.7451057434082, 0, 0, 0, 7.08151745796204]
                }
            }, {
                "geometricError": 52.5454513124314,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+020/Tile_+060_+020.json"
                },
                "boundingVolume": {
                    "box": [1797.44390869141, -380.166076660156, 13.3256312608719, 26.4188842773438, 0, 0, 0, 44.4364929199219, 0, 0, 0, 9.40558898448944]
                }
            }, {
                "geometricError": 65.2694247081303,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+021/Tile_+060_+021.json"
                },
                "boundingVolume": {
                    "box": [1812.28704833984, -286.175262451172, 11.5870990753174, 40.7161254882813, 0, 0, 0, 50.4384155273438, 0, 0, 0, 7.63290023803711]
                }
            }, {
                "geometricError": 72.3784160113043,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+022/Tile_+060_+022.json"
                },
                "boundingVolume": {
                    "box": [1822.78210449219, -186.271453857422, 15.3006939888, 50.5889892578125, 0, 0, 0, 50.5271301269531, 0, 0, 0, 11.2427039146423]
                }
            }, {
                "geometricError": 72.0564065758371,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+023/Tile_+060_+023.json"
                },
                "boundingVolume": {
                    "box": [1823.40588378906, -86.3404502868652, 12.5961084365845, 50.58740234375, 0, 0, 0, 50.5890693664551, 0, 0, 0, 8.5899076461792]
                }
            }, {
                "geometricError": 72.3884289401293,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+024/Tile_+060_+024.json"
                },
                "boundingVolume": {
                    "box": [1824.02978515625, 13.6523685455322, 15.3824796676636, 50.5882568359375, 0, 0, 0, 50.5891551971436, 0, 0, 0, 11.0295190811157]
                }
            }, {
                "geometricError": 51.6887588994351,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+060_+025/Tile_+060_+025.json"
                },
                "boundingVolume": {
                    "box": [1824.38507080078, 73.7163772583008, 9.60402154922485, 50.3248901367188, 0, 0, 0, 10.6603164672852, 0, 0, 0, 5.04884958267212]
                }
            }, {
                "geometricError": 5.09378230664111,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+061_+022/Tile_+061_+022.json"
                },
                "boundingVolume": {
                    "box": [1873.77648925781, -141.348236083984, 4.44181227684021, 1.0274658203125, 0, 0, 0, 4.982177734375, 0, 0, 0, 0.262368440628052]
                }
            }, {
                "geometricError": 51.7536037136625,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+061_+023/Tile_+061_+023.json"
                },
                "boundingVolume": {
                    "box": [1883.65350341797, -86.6555309295654, 9.82255268096924, 10.8458862304688, 0, 0, 0, 50.2822132110596, 0, 0, 0, 5.70098972320557]
                }
            }, {
                "geometricError": 54.4889363228122,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+061_+024/Tile_+061_+024.json"
                },
                "boundingVolume": {
                    "box": [1893.34643554688, 13.2779121398926, 10.3329606056213, 19.9166259765625, 0, 0, 0, 50.3416175842285, 0, 0, 0, 6.1720118522644]
                }
            }, {
                "geometricError": 22.6775978581064,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\bb/Tile_+061_+025/Tile_+061_+025.json"
                },
                "boundingVolume": {
                    "box": [1894.64739990234, 70.7054080963135, 9.54776215553284, 20.5929565429688, 0, 0, 0, 7.8891658782959, 0, 0, 0, 5.28816103935242]
                }
            }],
            "boundingVolume": {
                "box": [1678.00695800781, -167.3508644104, 14.9421647787094, 237.2333984375, 0, 0, 0, 257.251705169678, 0, 0, 0, 13.2210794687271]
            }
        }, {
            "geometricError": 440.204868379572,
            "transform": [1.0, 0.0, 0.0, 0.0, 1.2432017357571995E-17, 1.0, -5.551115123125783E-17, 0.0, 1.1741393048713246E-17, 5.551115123125783E-17, 0.9999999999999998, 0.0, -2.7755747368212224E-10, 2.3283064365386963E-10, 0.0, 1.0],
            "children": [{
                "geometricError": 48.7584225341977,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+055_+021/Tile_+055_+021.json"
                },
                "boundingVolume": {
                    "box": [1329.28283691406, -251.359550476074, 16.0720038414001, 43.5072021484375, 0, 0, 0, 18.6329727172852, 0, 0, 0, 11.7183384895325]
                }
            }, {
                "geometricError": 67.5500672648307,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+055_+022/Tile_+055_+022.json"
                },
                "boundingVolume": {
                    "box": [1330.76959228516, -183.34806060791, 17.4266179800034, 42.6410522460938, 0, 0, 0, 50.4650802612305, 0, 0, 0, 14.0722395181656]
                }
            }, {
                "geometricError": 59.6401645003559,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+055_+023/Tile_+055_+023.json"
                },
                "boundingVolume": {
                    "box": [1343.38549804688, -83.4295806884766, 13.3076241016388, 30.647216796875, 0, 0, 0, 50.3902435302734, 0, 0, 0, 8.86118960380554]
                }
            }, {
                "geometricError": 54.3132131065945,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+055_+024/Tile_+055_+024.json"
                },
                "boundingVolume": {
                    "box": [1355.99951171875, 16.4887676239014, 12.5251359939575, 18.6517333984375, 0, 0, 0, 50.3155078887939, 0, 0, 0, 8.38973331451416]
                }
            }, {
                "geometricError": 13.5651838396135,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+055_+025/Tile_+055_+025.json"
                },
                "boundingVolume": {
                    "box": [1368.37573242188, 77.9040107727051, 6.60480356216431, 6.41845703125, 0, 0, 0, 11.7378349304199, 0, 0, 0, 2.24518442153931]
                }
            }, {
                "geometricError": 46.0841415018922,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+056_+021/Tile_+056_+021.json"
                },
                "boundingVolume": {
                    "box": [1407.76196289063, -259.938575744629, 15.907214641571, 35.7642822265625, 0, 0, 0, 26.6888961791992, 0, 0, 0, 11.5050873756409]
                }
            }, {
                "geometricError": 72.0125747747334,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+056_+022/Tile_+056_+022.json"
                },
                "boundingVolume": {
                    "box": [1421.63781738281, -183.753875732422, 17.1668101549149, 49.4112548828125, 0, 0, 0, 50.4975280761719, 0, 0, 0, 13.9405335187912]
                }
            }, {
                "geometricError": 72.1304864165157,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+056_+023/Tile_+056_+023.json"
                },
                "boundingVolume": {
                    "box": [1423.4345703125, -83.8446617126465, 13.146103978157, 50.58740234375, 0, 0, 0, 50.5813941955566, 0, 0, 0, 9.23278701305389]
                }
            }, {
                "geometricError": 72.2700621963674,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+056_+024/Tile_+056_+024.json"
                },
                "boundingVolume": {
                    "box": [1424.056640625, 16.1404838562012, 14.5895075798035, 50.58740234375, 0, 0, 0, 50.5891609191895, 0, 0, 0, 10.2280697822571]
                }
            }, {
                "geometricError": 52.6317069700521,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+056_+025/Tile_+056_+025.json"
                },
                "boundingVolume": {
                    "box": [1424.43774414063, 77.5803565979004, 13.805157661438, 50.35009765625, 0, 0, 0, 12.0362205505371, 0, 0, 0, 9.49176692962646]
                }
            }, {
                "geometricError": 46.2677911879815,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+057_+023/Tile_+057_+023.json"
                },
                "boundingVolume": {
                    "box": [1482.11926269531, -79.1935214996338, 5.75612854957581, 9.2208251953125, 0, 0, 0, 45.3083171844482, 0, 0, 0, 1.68560910224915]
                }
            }, {
                "geometricError": 53.8548207081674,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+057_+024/Tile_+057_+024.json"
                },
                "boundingVolume": {
                    "box": [1490.83251953125, 15.7759399414063, 12.0768136978149, 17.3740234375, 0, 0, 0, 50.3316650390625, 0, 0, 0, 8.07517910003662]
                }
            }, {
                "geometricError": 23.1540123502415,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\cc/Tile_+057_+025/Tile_+057_+025.json"
                },
                "boundingVolume": {
                    "box": [1493.28857421875, 77.2821998596191, 9.15342235565186, 19.2080078125, 0, 0, 0, 11.946231842041, 0, 0, 0, 4.94451904296875]
                }
            }],
            "boundingVolume": {
                "box": [1399.13610839844, -98.4928131103516, 17.3625670671463, 113.360473632813, 0, 0, 0, 188.134658813477, 0, 0, 0, 14.1362904310226]
            }
        }, {
            "geometricError": 371.970268249901,
            "transform": [0.9999996554194588, 4.363781417063284E-4, -7.062117813477209E-4, 0.0, -4.361717010063091E-4, 0.9999998621139483, 2.924488538288972E-4, 0.0, 7.06339302258286E-4, -2.9214072346267494E-4, 0.9999997078692504, 0.0, 4509.297381684372, -1855.9799298739526, -1.8636501030996442, 1.0],
            "children": [{
                "geometricError": 69.1857148557412,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+025_+004/Tile_+025_+004.json"
                },
                "boundingVolume": {
                    "box": [-1391.99407958984, -933.559753417969, 14.0356489419937, 48.4236450195313, 0, 0, 0, 48.149169921875, 0, 0, 0, 11.1117585897446]
                }
            }, {
                "geometricError": 48.0570725022815,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+025_+005/Tile_+025_+005.json"
                },
                "boundingVolume": {
                    "box": [-1369.02563476563, -852.159057617188, 2.13443279266357, 25.9090576171875, 0, 0, 0, 34.1532592773438, 0, 0, 0, 21.7199869155884]
                }
            }, {
                "geometricError": 34.0313125065579,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+026_+003/Tile_+026_+003.json"
                },
                "boundingVolume": {
                    "box": [-1299.24267578125, -994.438171386719, 9.6319876909256, 32.385498046875, 0, 0, 0, 8.612060546875, 0, 0, 0, 5.9280823469162]
                }
            }, {
                "geometricError": 72.6152969470457,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+026_+004/Tile_+026_+004.json"
                },
                "boundingVolume": {
                    "box": [-1294.17193603516, -936.282165527344, 16.2041157484055, 50.5923461914063, 0, 0, 0, 50.5336303710938, 0, 0, 0, 12.6391478776932]
                }
            }, {
                "geometricError": 75.852591660895,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+026_+005/Tile_+026_+005.json"
                },
                "boundingVolume": {
                    "box": [-1293.55456542969, -836.444793701172, 6.14014911651611, 50.57958984375, 0, 0, 0, 50.5338439941406, 0, 0, 0, 25.3308382034302]
                }
            }, {
                "geometricError": 31.9125040238965,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+026_+006/Tile_+026_+006.json"
                },
                "boundingVolume": {
                    "box": [-1292.90478515625, -778.007720947266, 15.3367151618004, 27.361083984375, 0, 0, 0, 8.82443237304688, 0, 0, 0, 13.8531003594398]
                }
            }, {
                "geometricError": 44.3188124785806,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+027_+004/Tile_+027_+004.json"
                },
                "boundingVolume": {
                    "box": [-1219.70953369141, -920.958221435547, 15.8824429512024, 24.8853149414063, 0, 0, 0, 34.5433654785156, 0, 0, 0, 12.3139815330505]
                }
            }, {
                "geometricError": 72.3678666395718,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\dd/Tile_+027_+005/Tile_+027_+005.json"
                },
                "boundingVolume": {
                    "box": [-1202.70550537109, -841.645172119141, -6.17444896697998, 41.4378051757813, 0, 0, 0, 45.6526794433594, 0, 0, 0, 37.8926019668579]
                }
            }],
            "boundingVolume": {
                "box": [-1300.84271240234, -886.116760253906, -6.17444896697998, 139.575012207031, 0, 0, 0, 116.933471679688, 0, 0, 0, 37.8926019668579]
            }
        }, {
            "geometricError": 221.861093368121,
            "transform": [0.9999996554194588, 4.363781417063284E-4, -7.062117813477209E-4, 0.0, -4.361717010063091E-4, 0.9999998621139483, 2.924488538288972E-4, 0.0, 7.06339302258286E-4, -2.9214072346267494E-4, 0.9999997078692504, 0.0, 4509.297381684372, -1855.9799298739526, -1.8636501030996442, 1.0],
            "children": [{
                "geometricError": 51.5584796491835,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\ee/Tile_+038_+018/Tile_+038_+018.json"
                },
                "boundingVolume": {
                    "box": [-53.5235767364502, 460.995025634766, 4.8595757484436, 19.1666622161865, 0, 0, 0, 44.6980590820313, 0, 0, 0, 17.1172251701355]
                }
            }, {
                "geometricError": 15.3121941995155,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\ee/Tile_+038_+019/Tile_+038_+019.json"
                },
                "boundingVolume": {
                    "box": [-49.5933418273926, 506.448089599609, 3.60871529579163, 15.2364234924316, 0, 0, 0, 1.51742553710938, 0, 0, 0, 0.110045909881592]
                }
            }, {
                "geometricError": 72.1273828425906,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\ee/Tile_+039_+018/Tile_+039_+018.json"
                },
                "boundingVolume": {
                    "box": [15.0548553466797, 457.191497802734, 5.52865505218506, 50.5630187988281, 0, 0, 0, 48.0430603027344, 0, 0, 0, 18.3740262985229]
                }
            }, {
                "geometricError": 1.77168111643222,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\ee/Tile_+039_+019/Tile_+039_+019.json"
                },
                "boundingVolume": {
                    "box": [-33.1613292694092, 505.072769165039, 3.53735184669495, 1.75724983215332, 0, 0, 0, 0.161758422851563, 0, 0, 0, 0.157356977462769]
                }
            }, {
                "geometricError": 56.8765049533316,
                "content": {
                    "uri": "D:\\JAVA\\3dtiles\\data\\ee/Tile_+040_+018/Tile_+040_+018.json"
                },
                "boundingVolume": {
                    "box": [93.4946136474609, 456.362838745117, 5.13061237335205, 29.0255737304688, 0, 0, 0, 45.5960540771484, 0, 0, 0, 17.7045965194702]
                }
            }],
            "boundingVolume": {
                "box": [24.9149742126465, 458.556976318359, 5.52865505218506, 97.6052131652832, 0, 0, 0, 49.4085388183594, 0, 0, 0, 18.3740262985229]
            }
        }],
        "boundingVolume": {
            "box": [341.8290726169498, -1031.7488150345162, -5.334247002843764, 4289.988496445352, 0.0, 0.0, 0.0, 1827.2813467730307, 0.0, 0.0, 0.0, 40.59645403409377]
        }
    },
    "asset": {
        "generatetool": "cesiumlab2@www.cesiumlab.com/osgb2tiles3",
        "version": "1.0"
    }
}
遇到的问题:

求矩阵行列式时,使用工具包LUDecomposition计算时,以下矩阵结果为0,和js中相同矩阵计算结果(-8.326672684688674e-17)不同,原矩阵:0.268197168561964,-0.434036405723617,-2770907.60361716,

-0.452090496848062,0.731639843052264,4670821.10507043,

0,0,1

    static double det(double[][] ms) {
        RealMatrix matrix = new Array2DRowRealMatrix(ms);
        LUDecomposition lu1 = new LUDecomposition(matrix);
        System.out.println("det方法结束");
    }

求矩阵运算的jar包:Apache Commons Math
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>
计算代数余子式
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.SingularValueDecomposition;

public class MatrixExample {

    public static void main(String[] args) {
        double[][] matrixData = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        RealMatrix matrix = MatrixUtils.createRealMatrix(matrixData);
        
        // 获取子矩阵
        RealMatrix subMatrix = matrix.getSubMatrix(0, 1, 0, 1);
        
        // 计算子矩阵的行列式值
        double minorDeterminant = subMatrix.getDeterminant();
        
        System.out.println("代数余子式的行列式值为: " + minorDeterminant);
    }
}
计算行列式
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.RealMatrix;

public class Main {
    public static void main(String[] args) {
        // 创建一个二维数组表示矩阵
        double[][] matrixData = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        // 将二维数组转换为实数矩阵对象
        RealMatrix matrix = new Array2DRowRealMatrix(matrixData);

        // 创建LUDecomposition对象
        LUDecomposition luDecomposition = new LUDecomposition(matrix);

        // 获取行列式的值
        double determinant = luDecomposition.getDeterminant();

        // 打印行列式的值
        System.out.println("Determinant of the matrix: " + determinant);
    }
}
转置矩阵
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;

public class Main {
    public static void main(String[] args) {
        // 创建一个二维数组表示矩阵
        double[][] matrixData = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        // 将二维数组转换为实数矩阵对象
        RealMatrix matrix = new Array2DRowRealMatrix(matrixData);

        // 计算矩阵的转置
        RealMatrix transposedMatrix = matrix.transpose();

        // 打印转置后的矩阵
        System.out.println("Original Matrix:");
        printMatrix(matrix);
        System.out.println("\nTransposed Matrix:");
        printMatrix(transposedMatrix);
    }

    // 辅助方法:打印矩阵
    public static void printMatrix(RealMatrix matrix) {
        int rows = matrix.getRowDimension();
        int columns = matrix.getColumnDimension();

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                System.out.print(matrix.getEntry(i, j) + "\t");
            }
            System.out.println();
        }
    }
}
计算逆矩阵
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.DecompositionSolver;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.RealMatrix;

public class Main {
    public static void main(String[] args) {
        // 创建一个二维数组表示矩阵
        double[][] matrixData = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        // 将二维数组转换为实数矩阵对象
        RealMatrix matrix = new Array2DRowRealMatrix(matrixData);

        // 创建LUDecomposition对象
        LUDecomposition luDecomposition = new LUDecomposition(matrix);

        // 获取分解求解器
        DecompositionSolver solver = luDecomposition.getSolver();

        // 计算逆矩阵
        RealMatrix inverseMatrix = solver.getInverse();

        // 打印逆矩阵
        System.out.println("Original Matrix:");
        printMatrix(matrix);
        System.out.println("\nInverse Matrix:");
        printMatrix(inverseMatrix);
    }

    // 辅助方法:打印矩阵
    public static void printMatrix(RealMatrix matrix) {
        int rows = matrix.getRowDimension();
        int columns = matrix.getColumnDimension();

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                System.out.print(matrix.getEntry(i, j) + "\t");
            }
            System.out.println();
        }
    }
}
矩阵相乘
public static double[][] mul(double[][] m1, double[][] m2) {
    RealMatrix a = new Array2DRowRealMatrix(m1);
    RealMatrix b = new Array2DRowRealMatrix(m2);
    RealMatrix actual = a.multiply(b);
    return actual.getData();
}
需要注意

这个uri需要是相对目录,需要能从当前合并后的tileset目录下,找到top目录下的某个json,所以如果要直接使用上述java代码,还需要修改下uri的赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust 适合哪些场景?

目录 二、Rust 适合哪些场景&#xff1f; 三、Rust 社区的发展趋势如何&#xff1f; 四、Rust 快速搭建一个WebServer服务器 一、Rust是什么&#xff1f; Rust是一门赋予每个人构建可靠且高效软件能力的语言。 Rust 程序设计语言 一门帮助每个人构建可靠且高效软件的语言。…

2024年美国市场亚太游戏品牌数字广告洞察报告

来源&#xff1a;Sensor Tower 美国是全球最大的游戏市场之一&#xff0c;也是亚太游戏品牌出海的重要市场。2023年Q2至2024年Q1&#xff0c;美国市​场广告投放额排名前10的亚太游戏品牌&#xff0c;合计支出 超过7.5亿美元&#xff0c;环比上涨23%。 排名第一的米哈游(miHoY…

【将Maven源改为国内阿里云镜像源】

目录 一、如何配置Maven镜像源&#xff1f; 二、Idea中的Maven配置 ​三、项目与你本地仓库和中央仓库的联系 一、如何配置Maven镜像源&#xff1f; 1、打开你的Maven用户设置文件(settings.xml)。默认情况下&#xff0c;该文件存在于你的用户目录下的.m2文件夹中。如果你没…

内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac 简单总结

第126天&#xff1a;内网安全-隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac_内网安全-隧道技术_ssh_dns_icmp_smb_上线通讯linux_mac-CSDN博客 内网渗透—隧道技术_隧道技术csdn-CSDN博客 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上…

光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型

光伏设备制造5G智能工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台&#xff0c;光伏设备制造企业可以实现对生产过程的全面监控和智能管理&#xff0c;提高生产效率&#…

人工智能|推荐系统——工业界的推荐系统之涨指标

一、推荐系统的评价指标 涨指标的方法有哪些&#xff1f; 二、涨指标的方法&#xff1a;召回 2.1 改进双塔模型 2.2 Item-to-Item (I2I) 2.3 类似I2I 的模型 2.4 总结&#xff1a;改进召回模型 三、涨指标的方法&#xff1a;排序模型 3.1 精排模型的改进 3.2 粗排模型的改进 3…

宝塔面板如何删除一个站点

我们一般的网站都是PHPMySQL开发的&#xff0c;所以删除站点&#xff0c;就要先删数据库&#xff0c;再删网站目录 注意&#xff1a;一点要确保无用的再删 删除站点目录

第十二届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 卡片试题 B: 相乘试题 C: 直线试题 D: 路径试题 E : \mathrm{E}: E: 回路计数试题 F: 时间显示试题 G: 最少砝码试题 H : \mathrm{H}: H: 杨辉三角形试题 I: 双向排序试题 J:分果果 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&…

远动通讯屏,组成和功能介绍

远动通讯屏&#xff0c;组成和功能介绍 远动通讯屏是基于电网安全建设而投入的远方监控厂站信息、远方切除电网负荷的设备&#xff1b;主经是由远动装置、通讯管理机、交换机、GPS对时装置、数字通道防雷器、模拟通道防雷器、屏柜及附件等设备组成。变电站远动通讯系统是指对广…

Middle for Mac:简洁高效的文本编辑软件

追求简洁与高效&#xff1f;Middle for Mac将是您文本编辑的最佳选择。这款Mac平台上的文本编辑器&#xff0c;以其独特的魅力和实用的功能&#xff0c;赢得了众多用户的喜爱。 Middle注重用户体验&#xff0c;采用简洁直观的界面设计&#xff0c;让您能够迅速上手并享受高效的…

如何减少冗长变量声明的代码行数

减少冗长变量声明的代码行数有几种方法&#xff0c;具体取决于编程语言和上下文。以下是一些常见的技巧&#xff1a; 问题背景 在编写代码时&#xff0c;经常需要定义许多变量和参数。如果这些变量和参数过多&#xff0c;会导致代码行数增加&#xff0c;可读性降低。例如&…

Metes and Bounds Pro for Mac 激活版:精准数据转换与绘图利器

Metes and Bounds Pro for Mac是一款专为土地测量和边界划定而设计的专业软件&#xff0c;为Mac用户提供了高效、精确的测量工具。其核心功能在于其全面的测量工具和简便的操作流程&#xff0c;能够满足在土地管理、房地产开发、农业规划等领域的多样化需求。 这款软件集合了距…

Java转Kotlin

Kotlin 是一种静态编程语言 2011JetBrains开始开发Kotlin&#xff0c;用于多平台应用&#xff08;能脱离虚拟机&#xff0c;直接编译成可以在win,mac,linux运行的二进制代码&#xff09; 2017获得谷歌官方支持 语法简洁&#xff08;减少了大量的样板代码&#xff0c;语法糖&…

RS3236-3.3YF5 封装SOT-23-5 线性稳压器 带过温保护

RS3236-3.3YF5 是一款由Runic&#xff08;润石&#xff09;公司生产的线性稳压器&#xff08;LDO&#xff09;&#xff0c;以下是该器件的一些功能和参数介绍&#xff1a; 品牌: Runic 产品类型: 线性稳压器 (LDO) 输入电压范围: 最大 7.5V 输出电压: 固定 3.3V 输出电流: 最大…

系分-历年论文题目

年份试题一试题二试题三试题四2023年信息系统数据转换与迁移敏捷开发方法论Devops及其应用论信息系统可行性分析2022年论原型法及其在信息系统开发中的应用论面向对象设计方法及其应用2021年论面向对象的信息系统分析方法论静态测试方法及其应用论富互联网应用的客户端开发技术…

机器学习-12-sklearn案例03-flask对外提供服务

整体思路 训练一个模型&#xff0c;把模型保存 写一个基于flask的web服务&#xff0c;在web运行时加载模型&#xff0c;并在对应的接口调用模型进行预测并返回 使用curl进行测试&#xff0c;测试通过 再创建一个html页面&#xff0c;接受参数输入&#xff0c;并返回。 目录结…

Go 单元测试完全指南(一)- 基本测试流程

为什么写单元测试&#xff1f; 关于测试&#xff0c;有一张很经典的图&#xff0c;如下&#xff1a; 说明&#xff1a; 测试类型成本速度频率E2E 测试高慢低集成测试中中中单元测试低快高 也就是说&#xff0c;单元测试是最快、最便宜的测试方式。这不难理解&#xff0c;单元…

人形机器人大热,优必选、傅利叶智能的春天还有多远?

配图来自Canva可画 进入2024年以来&#xff0c;机器人领域仍然十分热闹。前脚&#xff0c;斯坦福大学华人团队开源的既会做家务、又会煎蛋煮饭的MobileALOHA机器人&#xff0c;在全网刷屏&#xff0c;让不少人直呼“机器人养老有望”&#xff1b;后脚&#xff0c;马斯克就发了…

ERP系统:驱动企业高效、准确发展的核心引擎

企业资源规划&#xff08;ERP&#xff09;系统作为大型组织内部不同计算机系统的桥梁&#xff0c;发挥着至关重要的作用。在没有ERP系统的情况下&#xff0c;各部门可能各自拥有一套为其特定任务定制的系统&#xff0c;但这些系统之间是相互孤立的。而引入ERP软件后&#xff0c…

【STM32 |程序实测】LED灯闪烁、LED灯流水线、蜂鸣器

LED闪烁&LED流水灯&蜂鸣器的面包板接线图&#xff0c;及对应程序示例 LED闪烁 面包板接线图如下 开启APB2时钟&#xff0c;并且在GPIOA上进行配置&#xff0c;推挽输出&#xff0c;引脚A0&#xff0c;50HZ速度 #include "stm32f10x.h" /…