@idm-plugin/ghg
Version:
idm plugin for greenhouse gas
1,626 lines • 363 kB
JavaScript
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