完成时间轴前后端数据连通
This commit is contained in:
@@ -151,4 +151,27 @@ function jenks_with_stratified_sampling(data, n_classes, sample_size = 10000) {
|
||||
return jenks_breaks_jenkspy(sampled_data, n_classes);
|
||||
}
|
||||
|
||||
module.exports = { prettyBreaksClassification, jenks_breaks_jenkspy, jenks_with_stratified_sampling };
|
||||
/**
|
||||
* 根据指定的方法计算数据的分类断点。
|
||||
* @param {Array<number>} data - 要分类的数值数据数组。
|
||||
* @param {number} segments - 要创建的段数或类别数。
|
||||
* @param {string} classificationMethod - 要使用的分类方法。支持的值:"pretty_breaks" 或 "jenks_optimized"。
|
||||
* @returns {Array<number>} 分类的断点数组。如果数据为空或无效,则返回空数组。
|
||||
*/
|
||||
function calculateClassification(
|
||||
data,
|
||||
segments,
|
||||
classificationMethod
|
||||
) {
|
||||
if (!data || data.length === 0) {
|
||||
return [];
|
||||
}
|
||||
if (classificationMethod === "pretty_breaks") {
|
||||
return prettyBreaksClassification(data, segments);
|
||||
}
|
||||
if (classificationMethod === "jenks_optimized") {
|
||||
return jenks_with_stratified_sampling(data, segments);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { prettyBreaksClassification, jenks_breaks_jenkspy, jenks_with_stratified_sampling, calculateClassification };
|
||||
35
src/utils/parseColor.js
Normal file
35
src/utils/parseColor.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* 将颜色字符串解析为包含红色、绿色、蓝色和 alpha 分量的对象。
|
||||
* 支持 rgba、rgb 和十六进制颜色格式。对于 rgba 和 rgb,提取 r、g、b 和 a(如果未提供,则默认为 1)。
|
||||
* 对于十六进制(例如 #RRGGBB),提取 r、g、b。(e.g., "rgba(255, 0, 0, 0.5)", "rgb(255, 0, 0)", or "#FF0000").
|
||||
* @param {string} color - 要解析的颜色字符串(例如 "rgba(255, 0, 0, 0.5)"、"rgb(255, 0, 0)" 或 "#FF0000")。
|
||||
* @returns {{r: number, g: number, b: number, a?: number}} 包含颜色分量的对象:
|
||||
* - r: 红色分量 (0-255)
|
||||
* - g: 绿色分量 (0-255)
|
||||
* - b: 蓝色分量 (0-255)
|
||||
* - a: Alpha 分量 (0-1),如果未指定则默认为 1
|
||||
**/
|
||||
function parseColor(color) {
|
||||
// 解析 rgba 格式的颜色
|
||||
const match = color.match(
|
||||
/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/
|
||||
);
|
||||
if (match) {
|
||||
return {
|
||||
r: parseInt(match[1], 10),
|
||||
g: parseInt(match[2], 10),
|
||||
b: parseInt(match[3], 10),
|
||||
// 如果没有 alpha 值,默认为 1
|
||||
a: match[4] ? parseFloat(match[4]) : 1,
|
||||
};
|
||||
}
|
||||
// 如果还是十六进制格式,保持原来的解析方式
|
||||
const hex = color.replace("#", "");
|
||||
return {
|
||||
r: parseInt(hex.slice(0, 2), 16),
|
||||
g: parseInt(hex.slice(2, 4), 16),
|
||||
b: parseInt(hex.slice(4, 6), 16),
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = { parseColor };
|
||||
Reference in New Issue
Block a user