UNPKG

@idm-plugin/ghg

Version:

idm plugin for greenhouse gas

1,626 lines 363 kB
var m5 = Object.defineProperty; var S5 = (l, e, o) => e in l ? m5(l, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : l[e] = o; var q = (l, e, o) => (S5(l, typeof e != "symbol" ? e + "" : e, o), o); import Q from "@log4js-node/log4js-api"; import * as v from "@turf/turf"; let n5; typeof process < "u" && process.versions && process.versions.node && (n5 = require("fs")); let j; try { j = Q.getLogger("eu-ets"); } catch { } finally { } const W = class W { static async readBoundaries(e) { if (!n5) throw new Error("readBoundaries is only available in Node.js environment. Please use browser-compatible method to load boundaries data."); const o = n5.readFileSync(e, "utf-8"); return JSON.parse(o); } static async convert2Geojson(e) { const o = []; for (const r of e) { const n = r.bound; let a = n.at(-1); const i = n.at(-2); i[0] === a[0] && i[1] === a[1] && n.pop(); const s = n.at(0); a = n.at(-1), (s[0] !== a[0] || s[1] !== a[1]) && n.push(s); const c = n.map((u) => [u[1], u[0]]); o.push([c]); } return v.multiPolygon(o); } /** * Check if the port is in the EU MRV boundaries. * @param port 位置 * @param options * @returns true if the port is in the EU MRV boundaries. */ static async isInEU(e, o = {}) { const t = v.point([e.lng, e.lat]), r = v.booleanPointInPolygon(t, W.euMrvBoundaries, { ignoreBoundary: !1 }); return j == null || j.info("[%s] port(%j) is in-eu: %s", o.requestId, e, r), r; } /** * FuelEU delayed in Norway and Iceland(https://www.sdir.no/en/news/FuelEu_delayed_in_Norway/) * @param port 位置 * @param options * @returns true if the port is in the FuelEU exclude area. */ static async isFuelEUExclude(e, o = {}) { const t = v.point([e.lng, e.lat]), r = v.booleanPointInPolygon(t, W.fuelEuExclude, { ignoreBoundary: !1 }); return j == null || j.info("[%s] port(%j) is excluded from eu: %s", o.requestId, e, r), r; } }; q(W, "boundaries", { type: "Feature", properties: {}, geometry: { type: "MultiPolygon", coordinates: [ [ [ [10.10742, 58.07788], [6.81152, 56.84897], [7.4707, 55.22902], [7.60254, 54.1367], [4.30664, 53.46189], [2.68066, 52.07951], [1.88965, 51.20688], [0.79102, 50.62507], [-0.13184, 49.86632], [-3.2959, 49.83798], [-5.75684, 48.40003], [-11.7334, 41.54148], [-9.66797, 35.88905], [-6.89941, 35.81781], [-5.81726, 35.9113], [-4.3396, 36.16449], [-0.41748, 36.75649], [4.72412, 38.09998], [9.82178, 37.77071], [11.5741, 37.20408], [12.01355, 36.4257], [12.48596, 35.24113], [19.75342, 35.56798], [25.33447, 33.50476], [32.65137, 33.4131], [35.17822, 34.84988], [35.37598, 36.26199], [31.94824, 35.58585], [28.93799, 35.83563], [28.49854, 36.41244], [28.32825, 36.58025], [27.70203, 36.4257], [27.35046, 36.61553], [27.23511, 36.72568], [27.46033, 36.87083], [27.27905, 36.9455], [27.1637, 37.02448], [27.13623, 37.26968], [27.11975, 37.48358], [27.01538, 37.58594], [26.95358, 37.65882], [26.99066, 37.68817], [27.09503, 37.70338], [27.13898, 37.76854], [27.05658, 37.84558], [26.80939, 37.95503], [26.1145, 38.11295], [26.19141, 38.35458], [26.2793, 38.44068], [26.32874, 38.48369], [26.3356, 38.56427], [26.26694, 38.65442], [26.61987, 38.83543], [26.73523, 39.06611], [26.55396, 39.25778], [26.4798, 39.35766], [26.48941, 39.44998], [26.35345, 39.45104], [26.15707, 39.43195], [25.97717, 39.44044], [26.07742, 39.69345], [26.10077, 39.80432], [26.04721, 39.89499], [25.98679, 39.97817], [26.21887, 40.39676], [26.4386, 40.55555], [26.06506, 40.54303], [25.9552, 40.70563], [26.0424, 40.72853], [26.07193, 40.72384], [26.32324, 40.83044], [26.48804, 41.01307], [26.55396, 41.19519], [26.89453, 41.52503], [27.16919, 41.80408], [28.34473, 41.88592], [30.36621, 44.90258], [29.68506, 45.32125], [22.76367, 54.40614], [19.59961, 54.47004], [18.0835, 55.71473], [10.65674, 59.06315], [10.10742, 58.07788] ] ], [ [ [-24.16992, 67.27204], [-26.80664, 64.77413], [-18.54492, 62.14498], [-9.31641, 63.62674], [-8.4375, 67.33986], [-18.28125, 68.39918], [-24.16992, 67.27204] ] ], [ [ [10.67871, 59.08574], [9.22852, 57.9615], [4.57031, 57.93818], [3.07617, 62.85515], [7.29492, 65.21989], [11.38184, 67.3906], [14.98535, 70.5249], [26.80664, 71.96539], [33.61816, 70.31874], [31.46484, 70.37785], [30.81116, 69.91521], [30.85785, 69.79983], [30.82764, 69.78465], [30.92651, 69.67427], [30.95398, 69.56139], [30.66833, 69.52491], [30.35522, 69.61503], [30.12451, 69.67045], [30.08057, 69.42669], [29.13574, 68.98993], [28.74023, 68.56038], [30.32227, 67.74276], [29.42139, 66.64427], [30.76172, 65.65827], [32.16797, 62.71446], [28.07007, 60.60315], [27.79541, 60.33782], [28.67432, 60.0429], [27.90527, 59.86137], [27.86133, 59.54546], [28.14697, 59.44508], [28.30078, 59.04055], [28.14697, 58.24016], [28.10303, 57.563], [28.45459, 56.02295], [26.2793, 54.00777], [24.30176, 53.73572], [23.33496, 53.74871], [22.76367, 54.40614], [22.82959, 54.90188], [22.17041, 55.10352], [21.46729, 55.22902], [21.09375, 55.20395], [21.00586, 55.62179], [16.09497, 56.57764], [10.67871, 59.08574] ] ], [ [ [-7.20154, 55.06893], [-6.99829, 55.17887], [-6.86646, 55.23529], [-7.11914, 55.44771], [-8.08594, 55.5193], [-9.25049, 54.99337], [-10.85449, 53.96901], [-10.85449, 52.38901], [-10.21729, 50.99993], [-7.40479, 51.60437], [-6.24023, 52.01194], [-5.66895, 52.65639], [-5.76782, 53.7617], [-6.05896, 53.9884], [-6.25671, 54.1045], [-6.95984, 54.23634], [-7.43225, 54.12704], [-7.94312, 54.29409], [-8.15186, 54.45407], [-8.02551, 54.54021], [-7.68494, 54.62934], [-7.85522, 54.74048], [-7.58606, 54.73731], [-7.4762, 54.86712], [-7.39929, 54.99022], [-7.20154, 55.06893] ] ], [ [ [-15.16113, 29.36303], [-18.21533, 29.31514], [-18.28125, 27.23509], [-15.35889, 27.17647], [-13.93066, 27.73216], [-13.12866, 29.02735], [-12.84302, 29.77391], [-15.16113, 29.36303] ] ], [ [ [-61.59485, 16.57829], [-62.00684, 16.35177], [-61.96289, 15.85567], [-61.61682, 15.71295], [-61.0675, 15.7764], [-60.82031, 16.13554], [-60.88623, 16.46769], [-61.40259, 16.62567], [-61.59485, 16.57829] ] ], [ [ [-53.83301, 6.06409], [-54.14063, 5.58318], [-54.54712, 4.97056], [-54.32739, 3.28311], [-54.56909, 2.30651], [-53.80005, 1.90029], [-52.59155, 2.06498], [-51.87744, 3.72175], [-51.61377, 4.10537], [-51.60278, 4.23686], [-51.5918, 4.91583], [-53.00903, 5.9439], [-53.83301, 6.06409] ] ], [ [ [-61.16089, 14.95009], [-61.41907, 14.80675], [-61.17737, 14.36551], [-60.69397, 14.35487], [-60.5896, 14.58358], [-60.83679, 14.85985], [-61.16089, 14.95009] ] ], [ [ [45.20325, -12.57065], [44.95605, -12.55456], [44.94507, -12.76359], [44.94507, -13.02597], [45.16479, -13.10623], [45.32959, -13.02061], [45.35706, -12.80109], [45.30212, -12.63498], [45.20325, -12.57065] ] ], [ [ [-63.13705, 18.0943], [-63.16383, 18.09071], [-63.17276, 18.06101], [-63.15491, 18.04403], [-63.13362, 18.05317], [-63.1089, 18.05317], [-63.09311, 18.04403], [-63.08006, 18.0486], [-63.06702, 18.0584], [-63.05122, 18.06297], [-63.02856, 18.05383], [-63.01071, 18.05252], [-62.98187, 18.0486], [-62.94617, 18.10539], [-62.95715, 18.14585], [-63.06358, 18.14259], [-63.1192, 18.12171], [-63.13705, 18.0943] ] ], [ [ [55.31616, -20.73557], [54.94263, -21.1255], [55.46997, -21.55528], [56.15112, -21.49396], [56.40381, -20.86908], [55.67871, -20.48877], [55.31616, -20.73557] ] ], [ [ [-16.83655, 33.19733], [-17.44629, 33.00866], [-17.65503, 32.5607], [-16.75415, 32.30571], [-15.75989, 32.28249], [-16.00159, 33.16974], [-16.3092, 33.42686], [-16.83655, 33.19733] ] ], [ [ [-26.72974, 39.3343], [-31.15723, 40.00237], [-31.76147, 39.45316], [-30.53101, 38.03079], [-26.15845, 36.85325], [-23.68652, 36.46547], [-23.48877, 38.39334], [-26.16943, 39.15562], [-26.72974, 39.3343] ] ] ] } }), q(W, "euMrvBoundaries", { type: "Feature", properties: {}, geometry: { type: "MultiPolygon", coordinates: [ [ [ [10.10742, 58.07788], [6.81152, 56.84897], [7.4707, 55.22902], [7.60253, 54.1367], [4.30663, 53.46188], [2.68067, 52.07952], [1.88965, 51.20688], [0.79102, 50.62507], [-0.13183, 49.86632], [-2.06818, 49.8433], [-2.0462, 49.68007], [-2.14233, 49.54125], [-1.81823, 49.21042], [-1.91987, 48.86472], [-2.406, 48.81228], [-3.52662, 48.96398], [-5.75683, 48.40003], [-11.7334, 41.54148], [-9.66797, 35.88905], [-6.89942, 35.81782], [-6.37618, 35.92687], [-6.08643, 35.97023], [-5.85708, 35.9491], [-5.56183, 35.95745], [-5.49042, 35.98023], [-5.4578, 36.00607], [-5.35308, 36.04217], [-5.33763, 36.05493], [-5.35068, 36.06187], [-5.36305, 36.07657], [-5.3754, 36.09627], [-5.39668, 36.13095], [-5.38708, 36.14702], [-5.3627, 36.16005], [-5.35085, 36.15632], [-5.33248, 36.1595], [-5.23293, 36.14342], [-5.22675, 36.1057], [-5.25627, 36.05908], [-5.29198, 35.98245], [-5.38673, 35.95855], [-5.39017, 35.92353], [-5.37935, 35.91185], [-5.37643, 35.8935], [-5.373, 35.88182], [-5.35308, 35.87292], [-5.34278, 35.87403], [-5.32493, 35.85622], [-5.23842, 35.87903], [-5.14228, 35.96578], [-5.10933, 36.05465], [-5.0283, 36.08352], [-4.8539, 36.08458], [-4.3396, 36.16448], [-0.41748, 36.75648], [4.72412, 38.09998], [9.82178, 37.77072], [11.5741, 37.20408], [12.01355, 36.4257], [12.48597, 35.24113], [14.91943, 35.62158], [16.61133, 37.30028], [17.73193, 39.01065], [18.67675, 39.58875], [18.7207, 40.4971], [17.13867, 41.44273], [16.32568, 42.03297], [17.81982, 42.67437], [18.55042, 42.34637], [18.5669, 42.39102], [18.59437, 42.44575], [17.69897, 43.06888], [15.79833, 44.80912], [16.36963, 45.35987], [17.77588, 45.12005], [19.0503, 44.80133], [18.84155, 45.36758], [19.30298, 45.98933], [20.1709, 46.157], [21.03882, 45.65245], [21.6211, 45.10455], [21.44532, 44.74673], [22.31323, 44.52785], [23.00537, 44.10337], [22.85157, 43.19717], [22.36817, 42.4721], [22.91748, 41.6565], [22.63183, 41.07935], [21.57715, 40.94672], [20.61035, 40.3298], [20.30137, 39.7093], [20.17398, 39.6517], [20.0909, 39.68235], [20.04525, 39.6961], [20.03392, 39.70072], [20.01812, 39.6945], [20.0104, 39.69173], [20.00163, 39.68315], [19.98207, 39.67945], [19.9553, 39.73755], [19.98482, 39.78453], [19.86328, 39.96238], [19.27002, 40.03182], [19.17938, 39.67972], [20.25878, 37.21283], [25.33447, 33.50477], [32.65137, 33.4131], [35.17822, 34.84988], [35.37598, 36.26198], [31.55273, 35.54563], [29.69363, 35.96633], [29.6648, 36.11652], [29.61117, 36.14875], [29.6158, 36.16733], [29.59155, 36.17778], [29.56532, 36.1629], [29.5376, 36.16338], [29.51305, 36.18347], [29.46842, 36.16615], [29.34723, 36.1595], [28.49853, 36.41243], [28.32825, 36.58025], [27.98767, 36.5008], [27.92725, 36.54827], [27.93137, 36.62765], [27.9039, 36.70145], [27.77687, 36.6921], [27.68967, 36.6045], [27.33535, 36.6001], [27.23512, 36.72568], [27.41638, 36.81148], [27.48298, 36.86643], [27.44865, 36.91422], [27.40265, 36.94495], [27.28523, 36.94112], [27.22652, 36.94687], [27.18087, 36.97485], [27.11838, 37.00145], [27.17262, 37.04942], [27.0813, 37.14062], [27.17193, 37.25875], [27.11425, 37.39635], [27.06207, 37.53587], [26.95358, 37.65882], [26.99067, 37.68817], [27.09503, 37.70338], [27.13898, 37.76853], [27.05658, 37.84558], [26.80938, 37.95503], [26.11588, 38.11727], [26.19142, 38.35458], [26.2793, 38.44068], [26.32873, 38.48368], [26.3356, 38.56427], [26.26693, 38.65442], [26.61987, 38.83543], [26.73523, 39.06612], [26.55397, 39.25778], [26.4798, 39.35767], [26.48942, 39.44998], [26.35345, 39.45103], [26.15707, 39.43195], [25.97717, 39.44043], [26.02112, 39.67548], [25.9552, 39.73677], [25.85907, 39.79588], [25.7602, 39.8992], [25.68055, 39.94975], [25.56243, 40.06547], [25.5954, 40.23132], [26.21887, 40.39677], [26.4386, 40.55555], [26.06507, 40.54303], [25.9552, 40.70563], [26.0424, 40.72853], [26.07193, 40.72383], [26.32323, 40.83043], [26.48803, 41.01307], [26.55397, 41.19518], [26.89453, 41.52503], [27.16918, 41.80408], [28.34473, 41.88592], [30.36622, 44.90258], [29.68507, 45.32125], [22.76367, 54.40613], [19.59962, 54.47003], [18.0835, 55.71473], [10.9156, 58.94363], [10.6382, 58.95886], [10.33813, 58.93159], [10.12939, 58.6598], [10.10742, 58.07788] ] ], [ [ [-24.16992, 67.27203], [-26.80663, 64.77413], [-18.54492, 62.14498], [-9.31642, 63.62673], [-8.4375, 67.33987], [-18.28125, 68.39918], [-24.16992, 67.27203] ] ], [ [ [10.67871, 59.08574], [9.22852, 57.9615], [4.57031, 57.93818], [3.07617, 62.85515], [7.29492, 65.21989], [11.38184, 67.3906], [14.98535, 70.5249], [26.80664, 71.96539], [33.61816, 70.31874], [31.46484, 70.37785], [30.81116, 69.91521], [30.85785, 69.79983], [30.82764, 69.78465], [30.92651, 69.67427], [30.95398, 69.56139], [30.66833, 69.52491], [30.35522, 69.61503], [30.12451, 69.67045], [30.08057, 69.42669], [29.13574, 68.98993], [28.74023, 68.56038], [30.32227, 67.74276], [29.42139, 66.64427], [30.76172, 65.65827], [32.16797, 62.71446], [28.07007, 60.60315], [27.79541, 60.33782], [28.67432, 60.0429], [27.90527, 59.86137], [27.86133, 59.54546], [28.14697, 59.44508], [28.30078, 59.04055], [28.14697, 58.24016], [28.10303, 57.563], [28.45459, 56.02295], [26.2793, 54.00777], [24.30176, 53.73572], [23.33496, 53.74871], [22.76367, 54.40614], [22.82959, 54.90188], [22.17041, 55.10352], [21.46729, 55.22902], [21.09375, 55.20395], [21.00586, 55.62179], [16.09497, 56.57764], [10.67871, 59.08574] ] ], [ [ [-7.20154, 55.06893], [-6.99829, 55.17887], [-6.86646, 55.23529], [-7.11914, 55.44771], [-8.08594, 55.5193], [-9.25049, 54.99337], [-10.85449, 53.96901], [-10.85449, 52.38901], [-10.21729, 50.99993], [-7.40479, 51.60437], [-6.24023, 52.01194], [-5.66895, 52.65639], [-5.76782, 53.7617], [-6.05896, 53.9884], [-6.25671, 54.1045], [-6.95984, 54.23634], [-7.43225, 54.12704], [-7.94312, 54.29409], [-8.15186, 54.45407], [-8.02551, 54.54021], [-7.68494, 54.62934], [-7.85522, 54.74048], [-7.58606, 54.73731], [-7.4762, 54.86712], [-7.39929, 54.99022], [-7.20154, 55.06893] ] ], [ [ [-15.16113, 29.36303], [-18.21533, 29.31514], [-18.28125, 27.23509], [-15.35889, 27.17647], [-13.93066, 27.73216], [-13.12866, 29.02735], [-12.84302, 29.77391], [-15.16113, 29.36303] ] ], [ [ [-61.59485, 16.57829], [-62.00684, 16.35177], [-61.96289, 15.85567], [-61.61682, 15.71295], [-61.0675, 15.7764], [-60.82031, 16.13554], [-60.88623, 16.46769], [-61.40259, 16.62567], [-61.59485, 16.57829] ] ], [ [ [-53.83301, 6.06409], [-54.14063, 5.58318], [-54.54712, 4.97056], [-54.32739, 3.28311], [-54.56909, 2.30651], [-53.80005, 1.90029], [-52.59155, 2.06498], [-51.87744, 3.72175], [-51.61377, 4.10537], [-51.60278, 4.23686], [-51.5918, 4.91583], [-53.00903, 5.9439], [-53.83301, 6.06409] ] ], [ [ [-61.16089, 14.95009], [-61.41907, 14.80675], [-61.17737, 14.36551], [-60.69397, 14.35487], [-60.5896, 14.58358], [-60.83679, 14.85985], [-61.16089, 14.95009] ] ], [ [ [45.20325, -12.57065], [44.95605, -12.55456], [44.94507, -12.76359], [44.94507, -13.02597], [45.16479, -13.10623], [45.32959, -13.02061], [45.35706, -12.80109], [45.30212, -12.63498], [45.20325, -12.57065] ] ], [ [ [-63.13705, 18.0943], [-63.16383, 18.09071], [-63.17276, 18.06101], [-63.15491, 18.04403], [-63.13362, 18.05317], [-63.1089, 18.05317], [-63.09311, 18.04403], [-63.08006, 18.0486], [-63.06702, 18.0584], [-63.05122, 18.06297], [-63.02856, 18.05383], [-63.01071, 18.05252], [-62.98187, 18.0486], [-62.94617, 18.10539], [-62.95715, 18.14585], [-63.06358, 18.14259], [-63.1192, 18.12171], [-63.13705, 18.0943] ] ], [ [ [55.31616, -20.73557], [54.94263, -21.1255], [55.46997, -21.55528], [56.15112, -21.49396], [56.40381, -20.86908], [55.67871, -20.48877], [55.31616, -20.73557] ] ], [ [ [-16.83655, 33.19733], [-17.44629, 33.00866], [-17.65503, 32.5607], [-16.75415, 32.30571], [-15.75989, 32.28249], [-16.00159, 33.16974], [-16.3092, 33.42686], [-16.83655, 33.19733] ] ], [ [ [-26.72974, 39.3343], [-31.15723, 40.00237], [-31.76147, 39.45316], [-30.53101, 38.03079], [-26.15845, 36.85325], [-23.68652, 36.46547], [-23.48877, 38.39334], [-26.16943, 39.15562], [-26.72974, 39.3343] ] ] ] } }), q(W, "fuelEuExclude", { type: "Feature", properties: {}, geometry: { type: "MultiPolygon", coordinates: [ [ [ [10.35048, 58.97197], [9.22852, 57.9615], [4.57032, 57.93818], [3.07617, 62.85515], [7.29492, 65.21988], [11.38183, 67.3906], [14.98535, 70.5249], [26.80663, 71.96538], [31.48682, 70.39262], [30.55298, 70.06183], [30.97047, 69.93783], [30.95947, 69.87367], [30.90453, 69.83773], [31.0199, 69.5518], [30.60242, 69.51147], [30.2124, 69.62652], [29.39942, 68.9978], [28.76222, 69.17037], [29.13573, 69.67998], [28.34473, 69.74855], [27.99317, 70.07307], [16.74317, 66.99883], [12.87598, 62.93523], [13.44727, 61.2068], [12.46673, 59.97838], [12.18383, 59.86688], [11.95862, 59.66913], [11.69768, 59.59693], [11.88172, 59.29113], [11.77185, 59.0038], [11.651, 58.87627], [11.53563, 58.87627], [11.45737, 58.88762], [11.45873, 58.933], [11.45598, 58.98542], [11.41582, 59.03685], [11.3839, 59.08822], [11.33927, 59.1143], [11.30423, 59.10583], [11.18477, 59.08008], [11.15662, 59.08008], [11.10855, 59.00238], [11.07147, 58.97815], [10.91783, 58.94283], [10.88677, 58.94807], [10.74052, 58.95567], [10.35048, 58.97197] ] ], [ [ [-24.16992, 67.27203], [-26.80663, 64.77413], [-18.54492, 62.14498], [-9.31642, 63.62673], [-8.4375, 67.33987], [-18.28125, 68.39918], [-24.16992, 67.27203] ] ] ] } }); let y = W, L; try { L = Q.getLogger("eu-ets"); } catch { } finally { } const E5 = { 2024: 0.4, 2025: 0.7, 2026: 1 }; var O5 = /* @__PURE__ */ ((l) => (l[l.PROP5 = 0.99] = "PROP5", l[l.PROP10 = 0.97] = "PROP10", l[l.PROP15 = 0.95] = "PROP15", l[l.NONE = 1] = "NONE", l))(O5 || {}); const A = { MDO_Factor: { co2: 3.206, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0427, //MJ/g wtt: 14.4, //gCO2eq/MJ rwd: 1 }, MGO_Factor: { co2: 3.206, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0427, //MJ/g wtt: 14.4, //gCO2eq/MJ rwd: 1 }, HFO_Factor: { co2: 3.114, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0405, //MJ/g wtt: 13.5, //gCO2eq/MJ rwd: 1 }, LFO_Factor: { co2: 3.151, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.041, //MJ/g wtt: 13.2, //gCO2eq/MJ rwd: 1 }, LNG_OTTO_MEDIUM_SPD_Factor: { co2: 2.75, // gCO2/gFuel ch4: 0, n2o: 11e-5, cj: 3.1, // 燃料泄漏排放因子 lcv: 0.0491, //MJ/g wtt: 18.5 //gCO2eq/MJ }, LNG_OTTO_SLOW_SPD_Factor: { co2: 2.75, // gCO2/gFuel ch4: 0, n2o: 11e-5, cj: 1.7, // 燃料泄漏排放因子 lcv: 0.0491, //MJ/g wtt: 18.5 //gCO2eq/MJ }, LNG_DIESEL_SLOW_SPD_Factor: { co2: 2.75, // gCO2/gFuel ch4: 0, n2o: 11e-5, cj: 0.2, // 燃料泄漏排放因子 lcv: 0.0491, //MJ/g wtt: 18.5 //gCO2eq/MJ }, LNG_LBSI_Factor: { co2: 2.75, // gCO2/gFuel ch4: 0, n2o: 11e-5, cj: 2.6, // 燃料泄漏排放因子 lcv: 0.0491, //MJ/g wtt: 18.5 //gCO2eq/MJ }, ETHANE_Factor: { co2: 2.927, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0464, //MJ/g wtt: 18.5 //gCO2eq/MJ }, LPG_PROPANE_Factor: { co2: 3, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.046, //MJ/g wtt: 7.8 //gCO2eq/MJ }, LPG_BUTANE_Factor: { co2: 3.03, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.046, //MJ/g wtt: 7.8 //gCO2eq/MJ }, // LPG_Factor: { // co2: 3.03, // gCO2/gFuel // }, METHANOL_Factor: { co2: 1.375, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0199, //MJ/g wtt: 31.3 //gCO2eq/MJ }, // 英国政府温室气体转换因子 (UK GHG Conversion Factors) // 参考: https://www.gov.uk/government/publications/greenhouse-gas-reporting-conversion-factors-2026 // CO2/CH4/N2O 中 CH4/N2O 已为 CO2e, 这里用 GWP_AR5(CH4=28, N2O=265) 反算为原始 g/gFuel: // co2 = kgCO2/t / 1000 // ch4 = (kgCH4(CO2e)/t / 1000) / 28 // n2o = (kgN2O(CO2e)/t / 1000) / 265 // Marine gas oil (LSGO/MDO/MGO), 镴分型燃油 UK_MARINE_GAS_OIL_Factor: { co2: 3.20599, // 3205.99000 kgCO2/t / 1000 ch4: 324e-7, // 0.90720 kgCH4(CO2e)/t / 1000 / 28 n2o: 1449328679245283e-19, // 38.40721 kgN2O(CO2e)/t / 1000 / 265 lcv: 0.042569, //MJ/g, Net CV 42.569 GJ/t wtt: 17.47364 //gCO2eq/MJ, WTT 743.83524 kgCO2e/t / 42.569 GJ/t }, // Marine fuel oil (VLSFO/HFO), 残渣型/重质燃油 UK_MARINE_FUEL_OIL_Factor: { co2: 3.11399, // 3113.99000 kgCO2/t / 1000 ch4: 508e-7, // 1.42240 kgCH4(CO2e)/t / 1000 / 28 n2o: 14845637735849058e-20, // 39.34094 kgN2O(CO2e)/t / 1000 / 265 lcv: 0.040752, //MJ/g, Net CV 40.752 GJ/t wtt: 17.54185 //gCO2eq/MJ, WTT 714.86545 kgCO2e/t / 40.752 GJ/t }, // Waste oils, 废油 UK_WASTE_OILS_Factor: { co2: 3.17109, // 3171.09000 kgCO2/t / 1000 ch4: 1268e-7, // 3.55040 kgCH4(CO2e)/t / 1000 / 28 n2o: 16882550943396227e-20, // 44.73876 kgN2O(CO2e)/t / 1000 / 265 lcv: 0.042208, //MJ/g, Net CV 42.208 GJ/t wtt: 26.46032 //gCO2eq/MJ, WTT 1116.83712 kgCO2e/t / 42.208 GJ/t }, CUSTOM_Factor: { co2: 3.114, // gCO2/gFuel ch4: 5e-5, n2o: 18e-5, lcv: 0.0405, //MJ/g wtt: 13.5, //gCO2eq/MJ E: 90.389, rwd: 1 } }, T = { CO2: 1, CH4: 28, N2O: 265 }, D = { CO2: 1, CH4: 25, N2O: 298 }; var p = /* @__PURE__ */ ((l) => (l.HFO = "HFO", l.LFO = "LFO", l.MGO = "MGO", l.MDO = "MDO", l.LNG_OTTO_MEDIUM_SPD = "LNG_OTTO_MEDIUM_SPD", l.LNG_OTTO_SLOW_SPD = "LNG_OTTO_SLOW_SPD", l.LNG_DIESEL_SLOW_SPD = "LNG_DIESEL_SLOW_SPD", l.LNG_LBSI = "LNG_LBSI", l.LPG_PROPANE = "LPG_PROPANE", l.LPG_BUTANE = "LPG_BUTANE", l.LNG = "LNG", l.METHANOL = "METHANOL", l.BIODIESEL = "BIODIESEL", l.ETHANE = "ETHANE", l.UK_MARINE_GAS_OIL = "UK_MARINE_GAS_OIL", l.UK_MARINE_FUEL_OIL = "UK_MARINE_FUEL_OIL", l.UK_WASTE_OILS = "UK_WASTE_OILS", l))(p || {}), G5 = /* @__PURE__ */ ((l) => (l.EU_MRV_Non_EU = "Non EU", l.EU_MRV_Arrived_EU = "Arrived EU", l.EU_MRV_Departed_EU = "Departed EU", l.EU_MRV_Between_EU = "Between EU", l))(G5 || {}); class Z { /** * 计算MRV (Monitoring/Reporting/Verification) 和 TTW (Tank to Wake) * @param cons 燃料消耗, 单位 mt * @param fc 排放因子, 单位 gGHG/gFuel * @param cj 燃料泄漏系数, 单位 % * @param lcv 燃料热值, 单位 MJ/g * @param ch4 是否是 CH4(甲烷) * @returns { * mrv, 燃料产生的温室气体排放量, 单位 mt * ttw, 燃料从Tank到Wake的温室气体排放常量, 单位 gGHG/gFuel * } */ static calculateMRV(e, o, t, r, n) { let a = 0, i = 0; return t ? n ? (a = e * (1 - t / 100) * o + e * (t / 100), i = ((1 - t / 100) * o + t / 100) / r) : (a = e * (1 - t / 100) * o, i = (1 - t / 100) * o / r) : (a = e * o, i = o / r), { mrv: a, ttw: i }; } /** *计算WtT (Well to Tank) GHG Intensity * @param factor * @returns WtT GHG Intensity, 单位 gCO2eq/MJ */ static calculateWtT(e) { let o = 0; return e.wtt ? o = e.wtt : e.E && e.lcv && (o = e.E - e.co2 / e.lcv), o; } /** * 计算 CO2 MRV (Monitoring/Reporting/Verification) * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param customFactor 自定义排放因子 * @param options 配置项 * @returns { mrv, ttw } */ static calculateCO2MRV(e, o, t, r = {}) { const n = A[`${o}_Factor`] || A.CUSTOM_Factor, a = (t == null ? void 0 : t.co2) || n.co2, i = (t == null ? void 0 : t.cj) || n.cj, s = (t == null ? void 0 : t.lcv) || n.lcv, { mrv: c, ttw: u } = this.calculateMRV(e, a, i, s || 0); return L == null || L.info("[%s] co2 emission: %j", r.requestId, { cons: e, type: o, factor: n, customFactor: t, mrv: c, ttw: u }), { mrv: Math.round(c * T.CO2 * 1e5) / 1e5, mrvGWP: T.CO2, ttw: Math.round(u * D.CO2 * 1e5) / 1e5, ttwGWP: D.CO2, fc: a, cj: i, lcv: s }; } /** * 计算 CH4 MRV (Monitoring/Reporting/Verification) * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param customFactor 自定义排放因子 * @param options 配置项 * @returns { mrv, ttw } */ static calculateCH4MRV(e, o, t, r = {}) { const n = A[`${o}_Factor`] || A.CUSTOM_Factor, a = (t == null ? void 0 : t.ch4) || n.ch4, i = (t == null ? void 0 : t.cj) || n.cj, s = (t == null ? void 0 : t.lcv) || n.lcv, { mrv: c, ttw: u } = this.calculateMRV(e, a || 0, i, s || 0, !0); return L == null || L.info("[%s] ch4 emission: %j", r.requestId, { cons: e, type: o, factor: n, customFactor: t, mrv: c, ttw: u }), { mrv: Math.round(c * T.CH4 * 1e5) / 1e5, mrvGWP: T.CH4, ttw: Math.round(u * D.CH4 * 1e5) / 1e5, ttwGWP: D.CH4, fc: a, cj: i, lcv: s }; } /** * 计算 N2O MRV (Monitoring/Reporting/Verification) * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param customFactor 自定义排放因子 * @param options 配置项 * @returns { mrv, ttw } */ static calculateN2OMRV(e, o, t, r = {}) { const n = A[`${o}_Factor`] || A.CUSTOM_Factor, a = (t == null ? void 0 : t.n2o) || n.n2o, i = (t == null ? void 0 : t.cj) || n.cj, s = (t == null ? void 0 : t.lcv) || n.lcv, { mrv: c, ttw: u } = this.calculateMRV(e, a || 0, i, s || 0); return L == null || L.info("[%s] n2o emission: %j", r.requestId, { cons: e, type: o, factor: n, customFactor: t, mrv: c, ttw: u }), { mrv: Math.round(c * T.N2O * 1e5) / 1e5, mrvGWP: T.N2O, ttw: Math.round(u * D.N2O * 1e5) / 1e5, ttwGWP: D.N2O, fc: a, cj: i, lcv: s }; } /** * 计算单一燃料的GHG MRV (Monitoring/Reporting/Verification) * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param year 年份 * @param price 碳税价格 * @param options * @return { * ghg, MRV需要报告的温室气体排放量,2024之后需要报告CO2, CH4, N2O, 单位 mt * ghg2, ETS需要报告的温室气体排放量,2026之后需要报告CO2, CH4, N2O, 单位 mt * euas, 需要交纳的EUAS份额, 2026年以后需全额交纳, 单位 mt * price, 碳税价格, 单位 €/tCO2, 常量 * year, 年份, 常量 * ratio, EUAS交纳比例, 常量 * cost, EUAS成本, 单位 € * energy, 燃料转能量, 计算fuelEU时使用, 单位 TJ * lcv, 燃料低位热值, 计算fuelEU时使用, 单位 MJ/g, 常量(不同燃料取值不同) * wtt, Well to Tank, 计算fuelEU时使用, 单位 gCO2eq/MJ, 常量(不同燃料取值不同) * ttw, Tank to Wake, 计算fuelEU时使用, 单位 gGHG/gFuel, 常量(不同燃料取值不同) * co2, CO2排放量, 单位 mt * ch4, CH4排放量, 单位 mt * n2o, N2O排放量, 单位 mt * } * @deprecated */ static calculateGHGMRV(e, o, t = 64.56, r = 2025, n = {}) { const a = this.calculateCO2MRV(e, o, n.factor, n), i = this.calculateCH4MRV(e, o, n.factor, n), s = this.calculateN2OMRV(e, o, n.factor, n), c = n.factor || A[`${o}_Factor`] || A.CUSTOM_Factor; let u = 0, d = 0; const g = this.getEUETSRatio(r); r >= 2026 ? d = a.mrv + i.mrv + s.mrv : d = a.mrv, r >= 2024 ? u = a.mrv + i.mrv + s.mrv : u = a.mrv, u = Math.round(u * 1e5) / 1e5, d = Math.round(d * 1e5) / 1e5; const f = Math.round(d * g * 1e5) / 1e5, G = Math.round(t * f * 100) / 100, I = Math.round(this.calculateWtT(c) * 1e5) / 1e5, w = Math.round((a.ttw + i.ttw + s.ttw) * 1e5) / 1e5, m = c.lcv || 0, N = Math.round(e * m * 1e5) / 1e5; return { ghg: u, ghg2: d, euas: f, price: t, year: r, ratio: g, cost: G, energy: N, lcv: m, wtt: I, ttw: w, co2: a, ch4: i, n2o: s }; } /** * 计算单一燃料的GHG MRV (Monitoring/Reporting/Verification) * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param year 年份 * @param price 碳税价格 * @param options * @return { * ghg, MRV需要报告的温室气体排放量,2024之后需要报告CO2, CH4, N2O, 单位 mt * ghg2, ETS需要报告的温室气体排放量,2026之后需要报告CO2, CH4, N2O, 单位 mt * euas, 需要交纳的EUAS份额, 2026年以后需全额交纳, 单位 mt * price, 碳税价格, 单位 €/tCO2, 常量 * year, 年份, 常量 * ratio, EUAS交纳比例, 常量 * cost, EUAS成本, 单位 € * co2, CO2排放量, 单位 mt * ch4, CH4排放量, 单位 mt * n2o, N2O排放量, 单位 mt * } */ static calculateSingleGHGMRV(e, o, t = 64.56, r = 2025, n = {}) { const a = this.calculateCO2MRV(e, o, n.factor, n), i = this.calculateCH4MRV(e, o, n.factor, n), s = this.calculateN2OMRV(e, o, n.factor, n), c = n.factor || A[`${o}_Factor`] || A.CUSTOM_Factor; let u = 0, d = 0; const g = this.getEUETSRatio(r); r >= 2026 ? d = a.mrv + i.mrv + s.mrv : d = a.mrv, r >= 2024 ? u = a.mrv + i.mrv + s.mrv : u = a.mrv, u = Math.round(u * 1e5) / 1e5, d = Math.round(d * 1e5) / 1e5; const f = Math.round(d * g * 1e5) / 1e5, G = Math.round(t * f * 100) / 100; return { ghg: u, ghg2: d, euas: f, price: t, year: r, ratio: g, cost: G, co2: a, ch4: i, n2o: s, factor: c }; } /** * 计算单一燃料的FuelEU * @param cons 油耗, 单位 mt * @param type 油耗类型 * @param options * @return { * energy, 燃料转能量, 计算fuelEU时使用, 单位 MJ * lcv, 燃料低位热值, 计算fuelEU时使用, 单位 MJ/g, 常量(不同燃料取值不同) * wtt, Well to Tank, 计算fuelEU时使用, 单位 gCO2eq/MJ, 常量(不同燃料取值不同) * ttw, Tank to Wake, 计算fuelEU时使用, 单位 gGHG/gFuel, 常量(不同燃料取值不同) * co2, CO2排放量, 单位 mt * ch4, CH4排放量, 单位 mt * n2o, N2O排放量, 单位 mt * } */ static calculateSingleFuelEU(e, o, t = {}) { const r = this.calculateCO2MRV(e, o, t.factor, t), n = this.calculateCH4MRV(e, o, t.factor, t), a = this.calculateN2OMRV(e, o, t.factor, t), i = t.factor || A[`${o}_Factor`] || A.CUSTOM_Factor, s = Math.round(this.calculateWtT(i) * 1e5) / 1e5, c = Math.round((r.ttw + n.ttw + a.ttw) * 1e5) / 1e5, u = i.lcv || 0; return { energy: Math.round(e * u * 1e5) / 1e5, lcv: u, wtt: s, ttw: c, rawTtw: { co2: r.ttw, ch4: n.ttw, n2o: a.ttw }, cons: e, factor: i }; } /** * 计算多燃料的GHG MRV * @param fuels 按类型分组油耗类型及消耗 * @param ek 岸电消耗能量,单位 kwh 1kwh = 3.6MJ * @param year 年份 * @param options */ static calculateMultiFuelEU(e, o = 0, t = 2025, r = {}) { o = o * 3.6 || 0; const n = { euets: { ...T }, fuelEU: { ...D } }, a = e.reduce((I, w) => { var h; const m = w.customFactor || w.factor, N = this.calculateSingleFuelEU(w.cons || w.consumption || 0, w.type, { requestId: r.requestId, factor: m }), C = I[w.type] || { energy: 0, energy2: 0, wttEmission: 0, ttwEmission: 0, wtwEmission: 0, cons: 0 }, U = Math.round((C.wttEmission + N.wtt * N.energy) * 1e5) / 1e5, P = Math.round((C.ttwEmission + N.ttw * N.energy) * 1e5) / 1e5, S = Math.round((C.wtwEmission + N.wtt * N.energy + N.ttw * N.energy) * 1e5) / 1e5; return I[w.type] = { cons: Math.round((C.cons + N.cons) * 1e5) / 1e5, // 累计能量, TJ energy: Math.round((C.energy + N.energy) * 1e5) / 1e5, // 累计能量, TJ, 使用rwd, 作为分母时使用 energy2: Math.round((C.energy2 + N.energy * (((h = N.factor) == null ? void 0 : h.rwd) || 1)) * 1e5) / 1e5, // 排放已计算,作为分母时要使用rwd wtt: N.wtt, wttEmission: U, ttw: N.ttw, ttwEmission: P, wtw: Math.round((N.wtt + N.ttw) * 1e5) / 1e5, wtwEmission: S, lcv: N.lcv, rawTtw: N.rawTtw, factor: N.factor, gwp: n }, I; }, {}), i = r.fwind || 1, s = Object.values(a).reduce( (I, w) => (I.wtt = Math.round((I.wtt + w.wtt) * 1e5) / 1e5, I.ttw = Math.round((I.ttw + w.ttw) * 1e5) / 1e5, I.energy = Math.round((I.energy + w.energy) * 1e5) / 1e5, I.energy2 = Math.round((I.energy2 + w.energy2) * 1e5) / 1e5, I.wtwEmission = Math.round((I.wtwEmission + w.wtwEmission) * 1e5) / 1e5, I.ttwEmission = Math.round((I.ttwEmission + w.ttwEmission) * 1e5) / 1e5, I.wttEmission = Math.round((I.wttEmission + w.wttEmission) * 1e5) / 1e5, I), { wtt: 0, ttw: 0, energy: 0, energy2: 0, wtwEmission: 0, wttEmission: 0, ttwEmission: 0 } ); let c = 0, u = 0, d = 0, g = 0, f = 0, G = 0; return t >= 2025 && (c = s.energy2 ? Math.round(s.wttEmission / (s.energy2 + o) * 1e5) / 1e5 : 0, u = s.energy2 ? Math.round(s.ttwEmission / (s.energy2 + o) * 1e5) / 1e5 : 0, d = Math.round(i * (c + u) * 1e5) / 1e5, g = this.calculateGHGITarget(t), f = Math.round((g - d) * (s.energy + o) * 1e8) / 1e8, G = f < 0 ? Math.round(Math.abs(f * 1e6) / (d * 41e3) * 2400) : 0), { year: t, fwind: i, energy: s.energy, energy2: s.energy2, ek: o, wtwEmission: Math.round((s.wttEmission + s.ttwEmission) * 1e5) / 1e5, wttGhgi: c, ttwGhgi: u, actualGhgi: d, targetGhgi: g, balance: f, penalty: G, fuels: a }; } /** * 计算多燃料的GHG MRV * @param fuels 按类型分组油耗类型及消耗 * @param year 年份 * @param price 碳税价格 * @param options */ static calculateMultiGHGMRV(e, o = 2025, t = 64.56, r = {}) { const n = { euets: { ...T }, fuelEU: { ...D } }, a = this.getEUETSRatio(o), i = e.reduce((c, u) => { const d = u.customFactor || u.factor, g = this.calculateSingleGHGMRV(u.cons || u.consumption || 0, u.type, t, o, { requestId: r.requestId, factor: d }), f = c[u.type] || { ghg: 0, ghg2: 0, euas: 0, cost: 0, cons: 0, co2: 0, ch4: 0, n2o: 0, factor: d, gwp: n }; return c[u.type] = { co2: Math.round((f.co2 + g.co2.mrv) * 1e5) / 1e5, ch4: Math.round((f.ch4 + g.ch4.mrv) * 1e5) / 1e5, n2o: Math.round((f.n2o + g.n2o.mrv) * 1e5) / 1e5, ghg: Math.round((f.ghg + g.ghg) * 1e5) / 1e5, ghg2: Math.round((f.ghg2 + g.ghg2) * 1e5) / 1e5, euas: Math.round((f.euas + g.euas) * 1e5) / 1e5, cost: Math.round((f.cost + g.cost) * 1e5) / 1e5, cons: Math.round((f.cons + (u.cons || u.consumption || 0)) * 1e5) / 1e5, factor: g.factor, gwp: n }, c; }, {}), s = Object.values(i).reduce( (c, u) => (c.ghg = Math.round((c.ghg + u.ghg) * 1e5) / 1e5, c.ghg2 = Math.round((c.ghg2 + u.ghg2) * 1e5) / 1e5, c.euas = Math.round((c.euas + u.euas) * 1e5) / 1e5, c.cost = Math.round((c.cost + u.cost) * 1e5) / 1e5, c.co2 = Math.round((c.co2 + u.co2) * 1e5) / 1e5, c.ch4 = Math.round((c.ch4 + u.ch4) * 1e5) / 1e5, c.n2o = Math.round((c.n2o + u.n2o) * 1e5) / 1e5, c), { ghg: 0, ghg2: 0, euas: 0, cost: 0, co2: 0, ch4: 0, n2o: 0 } ); return { year: o, price: t, ratio: a, ghg: s.ghg, ghg2: s.ghg2, euas: s.euas, cost: s.cost, fuels: i }; } /** * 计算MRV及FuelEU * @param fuels 按类型分组油耗类型及消耗 * @param year 年份 * @param price 碳税价格 * @param options * @deprecated */ static calculateGHGMRV2(e, o = 2025, t = 64.56, r = {}) { let n = 0, a = 0, i = 0, s = 0, c = 0, u = 0, d = 0; const g = /* @__PURE__ */ new Map(); for (const S of e) { const h = this.calculateGHGMRV(S.cons || S.consumption || 0, S.type, t, o, { requestId: r.requestId, factor: S.customFactor || S.factor }); n = Math.round((n + h.ghg) * 1e5) / 1e5, a = Math.round((a + h.ghg2) * 1e5) / 1e5, i = Math.round((i + h.euas) * 1e5) / 1e5, s = Math.round((s + h.cost) * 1e5) / 1e5, c = Math.round((c + h.energy) * 1e5) / 1e5, u = Math.round((u + h.wtt * h.energy) * 1e5) / 1e5, d = Math.round((d + h.ttw * h.energy) * 1e5) / 1e5; const E = g.get(S.type) || { cons: 0, ghg: 0, ghg2: 0, co2: 0, ch4: 0, n2o: 0, euas: 0, cost: 0, energy: 0, wtt: 0, ttw: { total: 0, co2: 0, ch4: 0, n2o: 0 }, lcv: 0, wtw: 0, type: S.type, wttEmission: 0, ttwEmission: 0, wtwEmission: 0 }; E.cons = Math.round((E.cons + (S.cons || S.consumption || 0)) * 1e5) / 1e5, E.ghg = Math.round((E.ghg + h.ghg) * 1e5) / 1e5, E.ghg2 = Math.round((E.ghg2 + h.ghg2) * 1e5) / 1e5, E.co2 = Math.round((E.co2 + h.co2.mrv) * 1e5) / 1e5, E.ch4 = Math.round((E.ch4 + h.ch4.mrv) * 1e5) / 1e5, E.n2o = Math.round((E.n2o + h.n2o.mrv) * 1e5) / 1e5, E.euas = Math.round((E.euas + h.euas) * 1e5) / 1e5, E.cost = Math.round((E.cost + h.cost) * 1e5) / 1e5, E.energy = Math.round((E.energy + h.energy) * 1e5) / 1e5, E.lcv = h.lcv, E.co2fc = h.co2.fc, E.co2cj = h.co2.cj, E.ch4fc = h.ch4.fc, E.ch4cj = h.ch4.cj, E.n2ofc = h.n2o.fc, E.n2ocj = h.n2o.cj, E.co2MRVGWP = h.co2.mrvGWP, E.ch4MRVGWP = h.ch4.mrvGWP, E.n2oMRVGWP = h.n2o.mrvGWP, E.co2TTWGWP = h.co2.ttwGWP, E.ch4TTWGWP = h.ch4.ttwGWP, E.n20TTWGWP = h.n2o.ttwGWP, E.wtt = h.wtt, E.ttw.total = h.ttw, E.ttw.co2 = h.co2.ttw, E.ttw.ch4 = h.ch4.ttw, E.ttw.n2o = h.n2o.ttw, E.wtw = Math.round((h.wtt + h.ttw) * 1e5) / 1e5, E.wttEmission = Math.round((E.wttEmission + h.wtt * h.energy) * 1e5) / 1e5, E.ttwEmission = Math.round((E.ttwEmission + h.ttw * h.energy) * 1e5) / 1e5, E.wtwEmission = Math.round((E.wttEmission + E.ttwEmission) * 1e5) / 1e5, g.set(S.type, E); } const f = this.getEUETSRatio(o), G = Array.from(g.values()), I = r.fwind || 1; let w = 0, m = 0, N = 0, C = 0, U = 0, P = 0; if (o >= 2025) { w = c ? Math.round(u / c * 1e5) / 1e5 : 0, m = c ? Math.round(d / c * 1e5) / 1e5 : 0, N = Math.round(I * (w + m) * 1e5) / 1e5, C = this.calculateGHGITarget(o), U = Math.round((C - N) * c * 1e8) / 1e8; const S = U * 1e6; P = S < 0 ? Math.round(Math.abs(S) / (N * 41e3) * 2400) : 0; } return { year: o, price: t, fwind: I, ratio: f, ghg: n, ghg2: a, euas: i, cost: s, energy: c, wtwEmission: Math.round((u + d) * 1e5) / 1e5, wttGhgi: w, ttwGhgi: m, actualGhgi: N, targetGhgi: C, balance: U, penalty: P, fuels: G }; } /** * 计算 EUETS Ratio, 不同年份交纳的比例不同,2026年以后需全额交纳 * @param year * @returns * @deprecated use getEUETSRatio instead */ static getEUETSRadio(e) { return e > 2026 ? 1 : e >= 2024 && E5[e] || 0; } /** * 计算 EUETS Ratio, 不同年份交纳的比例不同,2026年以后需全额交纳 * @param year * @returns */ static getEUETSRatio(e) { return e > 2026 ? 1 : e >= 2024 && E5[e] || 0; } /** * 计算 GHG Intensity Target, 单位 gCO₂eq/MJ * @param year * @returns */ static calculateGHGITarget(e) { let o = 91.16; return e >= 2025 && (e >= 2050 ? o = o * (1 - 0.8) : e >= 2045 ? o = o * (1 - 0.62) : e >= 2040 ? o = o * (1 - 0.31) : e >= 2035 ? o = o * (1 - 0.145) : e >= 2030 ? o = o * (1 - 0.06) : o = o * (1 - 0.02)), Math.round(o * 1e5) / 1e5; } /** * 计算 EUMRV Leg Category * @param departure 出发地 * @param destination 目的地 * @param fuelEU 是否是fuelEU, 注意 EUETS和fuelEU不同,fuelEU在Norway and Iceland将被视为第三国,在EEA执行50%标准 * @param options 配置项 * @returns * @deprecated */ static async calculateEUMRVLegCategory(e, o, t = !1, r = {}) { let n = "Non EU"; const a = { departure: 0, destination: 0, atSea: 0 }; if (e && o) { let i = await y.isInEU(e, r), s = await y.isInEU(o, r); t && (i = i && !await y.isFuelEUExclude(e, r), s = s && !await y.isFuelEUExclude(o, r)), i && s ? (n = "Between EU", a.departure = 1, a.destination = 1, a.atSea = 1) : i ? (n = "Departed EU", a.departure = 1, a.destination = 0, a.atSea = 0.5) : s && (n = "Arrived EU", a.departure = 0, a.destination = 1, a.atSea = 0.5); } return { category: n, areaRate: a }; } /** * 计算 EUMRV Category * @param departure 出发地 * @param destination 目的地 * @param options 配置项 * @returns { category, areaRate } 是否在EU,以及对应计算比例 */ static async calculateEUMRVCategory(e, o, t = {}) { let r = "Non EU"; const n = { departure: 0, destination: 0, atSea: 0 }; if (e && o) { const a = await y.isInEU(e, t), i = await y.isInEU(o, t); a && i ? (r = "Between EU", n.departure = 1, n.destination = 1, n.atSea = 1) : a ? (r = "Departed EU", n.departure = 1, n.destination = 0, n.atSea = 0.5) : i && (r = "Arrived EU", n.departure = 0, n.destination = 1, n.atSea = 0.5); } return { category: r, areaRate: n }; } /** * 计算 Fuel EU Category * 注意 EUETS和fuelEU不同,fuelEU在Norway and Iceland将被视为第三国,在EEA执行50%标准 * FuelEU delayed in Norway and Iceland(https://www.sdir.no/en/news/FuelEu_delayed_in_Norway/) * @param departure 出发地 * @param destination 目的地 * @param options 配置项 * @returns { category, areaRate } 是否在EU,以及对应计算比例 */ static async calculateFuelEUCategory(e, o, t = {}) { let r = "Non EU"; const n = { departure: 0, destination: 0, atSea: 0 }; if (e && o) { let a = await y.isInEU(e, t), i = await y.isInEU(o, t); a = a && !await y.isFuelEUExclude(e, t), i = i && !await y.isFuelEUExclude(o, t), a && i ? (r = "Between EU", n.departure = 1, n.destination = 1, n.atSea = 1) : a ? (r = "Departed EU", n.departure = 1, n.destination = 0, n.atSea = 0.5) : i && (r = "Arrived EU", n.departure = 0, n.destination = 1, n.atSea = 0.5); } return { category: r, areaRate: n }; } } const C5 = "FeatureCollection", P5 = [ { type: "Feature", properties: { MRGID: 49036, GEONAME: "British 12 NM", POL_TYPE: "12NM", MRGID_TER1: 2208, TERRITORY1: "United Kingdom", MRGID_SOV1: 2208, SOVEREIGN1: "United Kingdom", ISO_TER1: "GBR", X_1: -3.62792, Y_1: 55.44507, MRGID_EEZ: 5696, AREA_KM2: 112588, ISO_SOV1: "GBR", UN_SOV1: 826, UN_TER1: 826 }, geometry: { type: "Polygon", coordinates: [ [ [ 1.546694, 51.03775 ], [ 1.696378, 51.089461 ], [ 1.768495, 51.388904 ], [ 1.49357, 51.697942 ], [ 1.868014, 51.994016 ], [ 2.042114, 52.341641 ], [ 2.002024, 52.798745 ], [ 1.502597, 53.095291 ], [ 0.678634, 53.239545 ], [ 0.434664, 53.733228 ], [ 0.164783, 53.971983 ], [ 0.222328, 54.213953 ], [ -0.339184, 54.628312 ], [ -0.976555, 54.861628 ], [ -1.285025, 55.729858 ], [ -1.688339, 55.880902 ], [ -2.274032, 56.381014 ], [ -1.418323, 57.40912 ], [ -1.496141, 57.707845 ], [ -1.884119, 57.887865 ], [ -3.053418, 57.884656 ], [ -3.248815, 58.026039 ], [ -2.765307, 58.283556 ], [ -2.530711, 58.707376 ], [ -2.323169, 58.806971 ], [ -2.008384, 59.208757 ], [ -1.977783, 59.392907 ], [ -1