使用js/java合并3dtiles

目录

前言:

需合并的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的赋值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【中级软件设计师】上午题15-计算机网络

上午题15-计算机网络 1 网络设备2 协议簇3 TCP和UDP4 SMTP和POP35 ARP和RARP6 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;7 URL8 浏览器9 IP地址和子网划分10 IPv611 Windows命令12 路由器 1 网络设备 物理层设备&#xff1a;中继器、集线器&#xff0…

目标检测正负样本区分和平衡

1、正负样本定义 rpn和rcnn的正负样本定义都是基于MaxIoUAssigner&#xff0c;只不过定义阈值不一样而已。 MaxIoUAssigner的操作包括4个步骤&#xff1a; 首先初始化时候假设每个anchor的mask都是-1&#xff0c;表示都是忽略anchor 将每个anchor和所有gt的iou的最大Iou小于…

C# SolidWorks 二次开发 -从零开始创建一个插件(3) 发布插件

五一节过完了吧&#xff0c;该上班学习了吧&#xff1f; 如何把自己开发好的程序优雅的给别人使用。 今天我们来简单讲解一下&#xff0c;这个之前不少粉丝咨询过相关问题&#xff0c;自己开发好的东西&#xff0c;如何给同事或者其它人使用。 先列一下使用到的主要工具&am…

什么是存量与流量?

存量与流量是反映经济状况的两类指标&#xff0c;在统计和国民经济核算中得到广泛运用。存量与流量之间既有密切的联系&#xff0c;又有一定区别。 一、存量与流量的基本概念 存量是某一时点结存的量&#xff0c;体现了某一时点上持有的经济价值或物量&#xff1b;流量是一段…

基于YOLO的车牌与车型识别系统

一、项目背景与意义 随着智能交通系统的快速发展&#xff0c;车辆识别技术在交通管理、安防监控、自动收费、停车管理等领域发挥着至关重要的作用。车牌识别和车型识别作为车辆识别技术的核心组成部分&#xff0c;能够有效提升交通运营效率&#xff0c;加强公共安全监控&#…

阿里云发布通义千问2.5,OpenCompass上得分追平GPT-4 Turbo

5月9日消息&#xff0c;阿里云正式发布通义千问2.5&#xff0c;模型性能全面赶超GPT-4 Turbo&#xff0c;成为地表最强中文大模型。同时&#xff0c;通义千问最新开源的1100亿参数模型在多个基准测评收获最佳成绩&#xff0c;超越Meta的Llama-3-70B&#xff0c;成为开源领域最强…

Davinci工程CANTP模块讲解

配置CAN的TP模式&#xff0c;涉及BSW\CanTp\CanTp.c和CanTp.h CanTpChannels 他有两组收发&#xff0c;功能诊断和物理诊断。 功能诊断有自己的参数要求 物理诊断的接收要求相对多一些 由于发送只有一个&#xff0c;所以我们把它放在物理诊断接收那组里面。 CanTpGeneral 也…

关于在阿拉伯语中占位符出现的问题

项目中用到了阿语的翻译&#xff0c;本来是直接复制过来就行&#xff0c;但是在一个使用到占位符的地方出现了问题 这是正常的内容但是粘贴到studio后却不是这样的 变成这样了那个逗号一样的文字的位置变了&#xff0c;这样一来占位符彻底无法用了还会报错。 经过多方尝试和群…

学习Uni-app开发小程序Day3

经过五一长假&#xff0c;回过头在去看学习的东西&#xff0c;发现仍然是一筹莫展的&#xff0c;看来&#xff0c;学习是不能松懈的&#xff0c;得&#xff0c;自己在把以前的从头复习一遍&#xff0c;加深印象。今天在继续听课&#xff0c;但是出现一个问题&#xff0c;是黑码…

大家都是怎么写毕业论文的? 推荐4个AI工具

写作这件事一直让我们从小学时期就开始头痛&#xff0c;初高中时期800字的作文让我们焦头烂额&#xff0c;一篇作文里用尽了口水话&#xff0c;拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业&#xff0c;结果毕业前的最后一道坎拦住我们的是毕业论文&#xff0c;这玩意不…

FMEA如何在设计活动中有效应用?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA 在现代产品设计和开发过程中&#xff0c;FMEA&#xff08;失效模式与影响分析&#xff09;已经成为了一种不可或缺的工具。它的核心目标是在产品或过程设计的早期阶段&#xff0c;通过识别和分析潜在的失效模式&#xff0c;预防和控制可能出现…

汽车软件研发工具链丨怿星科技新产品重磅发布

“创新引领未来”聚焦汽车软件新基建&#xff0c;4月27日下午&#xff0c;怿星科技2024新产品发布会在北京圆满举行&#xff01;智能汽车领域的企业代表、知名大企业负责人、投资机构代表、研究机构代表齐聚现场&#xff0c;线上直播同步开启&#xff0c;共同见证怿星科技从单点…

用一只小猪来解释 On-Prem, IaaS, PaaS 和 SaaS 的区别

亚马逊云科技首席布道师 Jeff Barr 在推上发过一张图&#xff0c;用一只小猪&#x1f437;讲清了 On-Prem, IaaS, PaaS 和 SaaS 的区别。 虽然历史悠久&#xff0c;但图片内容一点也没有过时。 On-prem 本地部署 本地部署&#xff08;on-prem, 或 on-premise&#xff09;指将…

qwfgjk

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

IDEA设置 | 个性化设置

文章目录 IDEA设置总结IDEA自动生成序列化ID IDEA设置总结 本篇博客将专注于整理IDEA新UI界面的相关设置 IDEA自动生成序列化ID CtrlAltS快捷键打开设置界面 选择Editor→Inspections→JVM languages→Test frameworks&#xff0c;勾选上Serializable class without serialVe…

vxe-table 区域选取、复制粘贴功能,的基本使用

vxe-table区域选取、复制粘贴功能&#xff0c;的基本使用&#xff08;注&#xff1a;该功能仅支持企业版&#xff0c;这里仅供部分演示&#xff09; 1.鼠标区域选择功能&#xff1a; 参数说明&#xff1a; mouse-config.area 是否开启鼠标单元格区域选取 <template>&l…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台&#xff0c;部署为独立的调度服务平台 github地址&#xff1a;xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度…

【系统架构师】-案例篇-UML用例图

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目&#xff0c;用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2]&#xff0c;漏洞在2020年于此 代码合…

20万元奖励!成都市2023年度工业企业稳规成长奖项目申报对象奖励、材料程序

一、申报对象及奖励标准 2020年度&#xff08;2020年3月—2021年2月&#xff09;首次进入成都市规模以上工业名录库的企业&#xff0c;自上规当年起连续两年&#xff08;2021—2022年&#xff09;年度营业收入均保持在15%&#xff08;含&#xff09;以上增速的&#xff0c;一次…