leflet使用kriging.js构建气象图层

article/2025/5/2 16:18:16

一、克里金法

  • kriging.js

  • kriging.js是一个 Javascript 库,通过普通克里金算法提供空间预测和映射功能。

  • 克里金法是一种高斯过程,其中使用核回归将二维坐标映射到某个目标变量。该算法经过专门设计,可通过为变异函数参数分配先验参数来准确地对较小的数据集进行建模。

二、构图函数调用

  • canvas在地图实例标签同列,定义一个canvas标签

在这里插入图片描述

-POINT数据
在这里插入图片描述

  • world数据
    在这里插入图片描述

import kriging from "./kirging.js";// 定义一个WEATHER_LAYERS图层
// 气象图层
// let WEATHER_LAYERS = L.layerGroup([], {
//   zIndex: 9,
// }).addTo(L_MAP);/*** 气温图层* @param {*} canvas:canvas = window.document.querySelector("#canvasMap");* @param {*} POINT* @param {*} world:边界*/
export const ADD_WEATHER_LAYER = (canvas, POINT, world) => {//WEATHER_LAYERS图层清空WEATHER_LAYERS.clearLayers();//遍历world边界数据,生成scope边界线const positions = [];world[0].forEach(function (point) {positions.push([point[1], point[0]]);});const scope = L.polyline(positions, { color: "rgba(0,0,0,0)" });WEATHER_LAYERS.addLayer(scope);//根据scope边界线的范围,计算范围变量const xlim = [scope.getBounds()._southWest.lng,scope.getBounds()._northEast.lng,];const ylim = [scope.getBounds()._southWest.lat,scope.getBounds()._northEast.lat,];//进行克里金插值function loadkriging() {canvas.width = 1000;canvas.height = 1000;const n = POINT.length;const t = []; //数值const x = []; //经度const y = []; //纬度for (let i = 0; i < n; i++) {t.push(POINT[i].properties.air_temp);x.push(POINT[i].geometry.coordinates[0]);y.push(POINT[i].geometry.coordinates[1]);// WEATHER_LAYERS.addLayer(//   L.circle([y[i], x[i]], { color: "rgba(0,0,0,0)" })// );//定义文本内容const divText = L.divIcon({html: `${POINT[i].properties.air_temp}`,className: "weather_number",bgPos: [0, 40],});const text = L.marker([POINT[i].geometry.coordinates[1], POINT[i].geometry.coordinates[0]],{icon: divText,});WEATHER_LAYERS.addLayer(text);}//对数据集进行训练const variogram = kriging.train(t, x, y, "exponential", 0, 100);//使用variogram对象使polygons描述的地理位置内的格网元素具备不一样的预测值,最后一个参数,是插值格点精度大小const grid = kriging.grid(world, variogram, (ylim[1] - ylim[0]) / 150);const colors = ["#002f86","#1a5ca6","#2075d2","#3ca0f0","#abe7f6","#abe7f6","#d2fbff","#f3ffee","#d0ffd0","#bffe8b","#fcfe9c","#fff3c4","#fecfa5","#fa9589","#ff5500","#e60000",];//将得到的格网grid渲染至canvas上kriging.plot(canvas, grid, [xlim[0], xlim[1]], [ylim[0], ylim[1]], colors);}//将canvas对象转换成image的URLfunction returnImage() {return canvas.toDataURL("image/png");}loadkriging();const imageBounds = [[ylim[0], xlim[0]],[ylim[1], xlim[1]],];const weather_layer = L.imageOverlay(returnImage(), imageBounds, {opacity: 0.8,});WEATHER_LAYERS.addLayer(weather_layer);
};

三、实例展示

在这里插入图片描述

四、kirging.js

// Extend the Array class
Array.prototype.max = function () {return Math.max.apply(null, this);
};
Array.prototype.min = function () {return Math.min.apply(null, this);
};
Array.prototype.mean = function () {var i, sum;for (i = 0, sum = 0; i < this.length; i++) sum += this[i];return sum / this.length;
};
Array.prototype.pip = function (x, y) {var i,j,c = false;for (i = 0, j = this.length - 1; i < this.length; j = i++) {if (this[i][1] > y != this[j][1] > y &&x <((this[j][0] - this[i][0]) * (y - this[i][1])) /(this[j][1] - this[i][1]) +this[i][0]) {c = !c;}}return c;
};var kriging = (function () {var kriging = {};var createArrayWithValues = function (value, n) {var array = [];for (var i = 0; i < n; i++) {array.push(value);}return array;};// Matrix algebraconst kriging_matrix_diag = function (c, n) {var Z = createArrayWithValues(0, n * n);for (let i = 0; i < n; i++) Z[i * n + i] = c;return Z;};const kriging_matrix_transpose = function (X, n, m) {var i,j,Z = Array(m * n);for (i = 0; i < n; i++) for (j = 0; j < m; j++) Z[j * n + i] = X[i * m + j];return Z;};const kriging_matrix_scale = function (X, c, n, m) {var i, j;for (i = 0; i < n; i++) for (j = 0; j < m; j++) X[i * m + j] *= c;};const kriging_matrix_add = function (X, Y, n, m) {var i,j,Z = Array(n * m);for (i = 0; i < n; i++)for (j = 0; j < m; j++) Z[i * m + j] = X[i * m + j] + Y[i * m + j];return Z;};// Naive matrix multiplicationconst kriging_matrix_multiply = function (X, Y, n, m, p) {var i,j,k,Z = Array(n * p);for (i = 0; i < n; i++) {for (j = 0; j < p; j++) {Z[i * p + j] = 0;for (k = 0; k < m; k++) Z[i * p + j] += X[i * m + k] * Y[k * p + j];}}return Z;};// Cholesky decompositionconst kriging_matrix_chol = function (X, n) {var i,j,k,sum,p = Array(n);for (i = 0; i < n; i++) p[i] = X[i * n + i];for (i = 0; i < n; i++) {for (j = 0; j < i; j++) p[i] -= X[i * n + j] * X[i * n + j];if (p[i] <= 0) return false;p[i] = Math.sqrt(p[i]);for (j = i + 1; j < n; j++) {for (k = 0; k < i; k++) X[j * n + i] -= X[j * n + k] * X[i * n + k];X[j * n + i] /= p[i];}}for (i = 0; i < n; i++) X[i * n + i] = p[i];return true;};// Inversion of cholesky decompositionconst kriging_matrix_chol2inv = function (X, n) {var i, j, k, sum;for (i = 0; i < n; i++) {X[i * n + i] = 1 / X[i * n + i];for (j = i + 1; j < n; j++) {sum = 0;for (k = i; k < j; k++) sum -= X[j * n + k] * X[k * n + i];X[j * n + i] = sum / X[j * n + j];}}for (i = 0; i < n; i++) for (j = i + 1; j < n; j++) X[i * n + j] = 0;for (i = 0; i < n; i++) {X[i * n + i] *= X[i * n + i];for (k = i + 1; k < n; k++) X[i * n + i] += X[k * n + i] * X[k * n + i];for (j = i + 1; j < n; j++)for (k = j; k < n; k++) X[i * n + j] += X[k * n + i] * X[k * n + j];}for (i = 0; i < n; i++) for (j = 0; j < i; j++) X[i * n + j] = X[j * n + i];};// Inversion via gauss-jordan eliminationconst kriging_matrix_solve = function (X, n) {var m = n;var b = Array(n * n);var indxc = Array(n);var indxr = Array(n);var ipiv = Array(n);var i, icol, irow, j, k, l, ll;var big, dum, pivinv, temp;for (i = 0; i < n; i++)for (j = 0; j < n; j++) {if (i == j) b[i * n + j] = 1;else b[i * n + j] = 0;}for (j = 0; j < n; j++) ipiv[j] = 0;for (i = 0; i < n; i++) {big = 0;for (j = 0; j < n; j++) {if (ipiv[j] != 1) {for (k = 0; k < n; k++) {if (ipiv[k] == 0) {if (Math.abs(X[j * n + k]) >= big) {big = Math.abs(X[j * n + k]);irow = j;icol = k;}}}}}++ipiv[icol];if (irow != icol) {for (l = 0; l < n; l++) {temp = X[irow * n + l];X[irow * n + l] = X[icol * n + l];X[icol * n + l] = temp;}for (l = 0; l < m; l++) {temp = b[irow * n + l];b[irow * n + l] = b[icol * n + l];b[icol * n + l] = temp;}}indxr[i] = irow;indxc[i] = icol;if (X[icol * n + icol] == 0) return false; // Singularpivinv = 1 / X[icol * n + icol];X[icol * n + icol] = 1;for (l = 0; l < n; l++) X[icol * n + l] *= pivinv;for (l = 0; l < m; l++) b[icol * n + l] *= pivinv;for (ll = 0; ll < n; ll++) {if (ll != icol) {dum = X[ll * n + icol];X[ll * n + icol] = 0;for (l = 0; l < n; l++) X[ll * n + l] -= X[icol * n + l] * dum;for (l = 0; l < m; l++) b[ll * n + l] -= b[icol * n + l] * dum;}}}for (l = n - 1; l >= 0; l--)if (indxr[l] != indxc[l]) {for (k = 0; k < n; k++) {temp = X[k * n + indxr[l]];X[k * n + indxr[l]] = X[k * n + indxc[l]];X[k * n + indxc[l]] = temp;}}return true;};// Variogram modelsconst kriging_variogram_gaussian = function (h, nugget, range, sill, A) {return (nugget +((sill - nugget) / range) *(1.0 - Math.exp(-(1.0 / A) * Math.pow(h / range, 2))));};const kriging_variogram_exponential = function (h, nugget, range, sill, A) {return (nugget +((sill - nugget) / range) * (1.0 - Math.exp(-(1.0 / A) * (h / range))));};const kriging_variogram_spherical = function (h, nugget, range, sill, A) {if (h > range) return nugget + (sill - nugget) / range;return (nugget +((sill - nugget) / range) *(1.5 * (h / range) - 0.5 * Math.pow(h / range, 3)));};// Train using gaussian processes with bayesian priorskriging.train = function (t, x, y, model, sigma2, alpha) {var variogram = {t: t,x: x,y: y,nugget: 0.0,range: 0.0,sill: 0.0,A: 1 / 3,n: 0,};switch (model) {case "gaussian":variogram.model = kriging_variogram_gaussian;break;case "exponential":variogram.model = kriging_variogram_exponential;break;case "spherical":variogram.model = kriging_variogram_spherical;break;}// Lag distance/semivariancevar i,j,k,l,n = t.length;var distance = Array((n * n - n) / 2);for (i = 0, k = 0; i < n; i++)for (j = 0; j < i; j++, k++) {distance[k] = Array(2);distance[k][0] = Math.pow(Math.pow(x[i] - x[j], 2) + Math.pow(y[i] - y[j], 2),0.5);distance[k][1] = Math.abs(t[i] - t[j]);}distance.sort(function (a, b) {return a[0] - b[0];});variogram.range = distance[(n * n - n) / 2 - 1][0];// Bin lag distancevar lags = (n * n - n) / 2 > 30 ? 30 : (n * n - n) / 2;var tolerance = variogram.range / lags;var lag = createArrayWithValues(0, lags);var semi = createArrayWithValues(0, lags);if (lags < 30) {for (l = 0; l < lags; l++) {lag[l] = distance[l][0];semi[l] = distance[l][1];}} else {for (i = 0, j = 0, k = 0, l = 0;i < lags && j < (n * n - n) / 2;i++, k = 0) {while (distance[j][0] <= (i + 1) * tolerance) {lag[l] += distance[j][0];semi[l] += distance[j][1];j++;k++;if (j >= (n * n - n) / 2) break;}if (k > 0) {lag[l] /= k;semi[l] /= k;l++;}}if (l < 2) return variogram; // Error: Not enough points}// Feature transformationn = l;variogram.range = lag[n - 1] - lag[0];var X = createArrayWithValues(1, 2 * n);var Y = Array(n);var A = variogram.A;for (i = 0; i < n; i++) {switch (model) {case "gaussian":X[i * 2 + 1] =1.0 - Math.exp(-(1.0 / A) * Math.pow(lag[i] / variogram.range, 2));break;case "exponential":X[i * 2 + 1] =1.0 - Math.exp((-(1.0 / A) * lag[i]) / variogram.range);break;case "spherical":X[i * 2 + 1] =1.5 * (lag[i] / variogram.range) -0.5 * Math.pow(lag[i] / variogram.range, 3);break;}Y[i] = semi[i];}// Least squaresvar Xt = kriging_matrix_transpose(X, n, 2);var Z = kriging_matrix_multiply(Xt, X, 2, n, 2);Z = kriging_matrix_add(Z, kriging_matrix_diag(1 / alpha, 2), 2, 2);var cloneZ = Z.slice(0);if (kriging_matrix_chol(Z, 2)) kriging_matrix_chol2inv(Z, 2);else {kriging_matrix_solve(cloneZ, 2);Z = cloneZ;}var W = kriging_matrix_multiply(kriging_matrix_multiply(Z, Xt, 2, 2, n),Y,2,n,1);// Variogram parametersvariogram.nugget = W[0];variogram.sill = W[1] * variogram.range + variogram.nugget;variogram.n = x.length;// Gram matrix with priorn = x.length;var K = Array(n * n);for (i = 0; i < n; i++) {for (j = 0; j < i; j++) {K[i * n + j] = variogram.model(Math.pow(Math.pow(x[i] - x[j], 2) + Math.pow(y[i] - y[j], 2), 0.5),variogram.nugget,variogram.range,variogram.sill,variogram.A);K[j * n + i] = K[i * n + j];}K[i * n + i] = variogram.model(0,variogram.nugget,variogram.range,variogram.sill,variogram.A);}// Inverse penalized Gram matrix projected to target vectorvar C = kriging_matrix_add(K, kriging_matrix_diag(sigma2, n), n, n);var cloneC = C.slice(0);if (kriging_matrix_chol(C, n)) kriging_matrix_chol2inv(C, n);else {kriging_matrix_solve(cloneC, n);C = cloneC;}// Copy unprojected inverted matrix as Kvar K = C.slice(0);var M = kriging_matrix_multiply(C, t, n, n, 1);variogram.K = K;variogram.M = M;return variogram;};// Model predictionkriging.predict = function (x, y, variogram) {var i,k = Array(variogram.n);for (i = 0; i < variogram.n; i++)k[i] = variogram.model(Math.pow(Math.pow(x - variogram.x[i], 2) + Math.pow(y - variogram.y[i], 2),0.5),variogram.nugget,variogram.range,variogram.sill,variogram.A);return kriging_matrix_multiply(k, variogram.M, 1, variogram.n, 1)[0];};kriging.variance = function (x, y, variogram) {var i,k = Array(variogram.n);for (i = 0; i < variogram.n; i++)k[i] = variogram.model(Math.pow(Math.pow(x - variogram.x[i], 2) + Math.pow(y - variogram.y[i], 2),0.5),variogram.nugget,variogram.range,variogram.sill,variogram.A);return (variogram.model(0,variogram.nugget,variogram.range,variogram.sill,variogram.A) +kriging_matrix_multiply(kriging_matrix_multiply(k, variogram.K, 1, variogram.n, variogram.n),k,1,variogram.n,1)[0]);};// Gridded matrices or contour pathskriging.grid = function (polygons, variogram, width) {var i,j,k,n = polygons.length;if (n == 0) return;// Boundaries of polygons spacevar xlim = [polygons[0][0][0], polygons[0][0][0]];var ylim = [polygons[0][0][1], polygons[0][0][1]];for (i = 0;i < n;i++ // Polygons)for (j = 0; j < polygons[i].length; j++) {// Verticesif (polygons[i][j][0] < xlim[0]) xlim[0] = polygons[i][j][0];if (polygons[i][j][0] > xlim[1]) xlim[1] = polygons[i][j][0];if (polygons[i][j][1] < ylim[0]) ylim[0] = polygons[i][j][1];if (polygons[i][j][1] > ylim[1]) ylim[1] = polygons[i][j][1];}// Alloc for O(n^2) spacevar xtarget, ytarget;var a = Array(2),b = Array(2);var lxlim = Array(2); // Local dimensionsvar lylim = Array(2); // Local dimensionsvar x = Math.ceil((xlim[1] - xlim[0]) / width);var y = Math.ceil((ylim[1] - ylim[0]) / width);var A = Array(x + 1);for (i = 0; i <= x; i++) A[i] = Array(y + 1);for (i = 0; i < n; i++) {// Range for polygons[i]lxlim[0] = polygons[i][0][0];lxlim[1] = lxlim[0];lylim[0] = polygons[i][0][1];lylim[1] = lylim[0];for (j = 1; j < polygons[i].length; j++) {// Verticesif (polygons[i][j][0] < lxlim[0]) lxlim[0] = polygons[i][j][0];if (polygons[i][j][0] > lxlim[1]) lxlim[1] = polygons[i][j][0];if (polygons[i][j][1] < lylim[0]) lylim[0] = polygons[i][j][1];if (polygons[i][j][1] > lylim[1]) lylim[1] = polygons[i][j][1];}// Loop through polygon subspacea[0] = Math.floor((lxlim[0] - ((lxlim[0] - xlim[0]) % width) - xlim[0]) / width);a[1] = Math.ceil((lxlim[1] - ((lxlim[1] - xlim[1]) % width) - xlim[0]) / width);b[0] = Math.floor((lylim[0] - ((lylim[0] - ylim[0]) % width) - ylim[0]) / width);b[1] = Math.ceil((lylim[1] - ((lylim[1] - ylim[1]) % width) - ylim[0]) / width);for (j = a[0]; j <= a[1]; j++)for (k = b[0]; k <= b[1]; k++) {xtarget = xlim[0] + j * width;ytarget = ylim[0] + k * width;if (polygons[i].pip(xtarget, ytarget))A[j][k] = kriging.predict(xtarget, ytarget, variogram);}}A.xlim = xlim;A.ylim = ylim;A.zlim = [variogram.t.min(), variogram.t.max()];A.width = width;return A;};kriging.contour = function (value, polygons, variogram) {};// Plotting on the DOMkriging.plot = function (canvas, grid, xlim, ylim, colors) {// Clear screenvar ctx = canvas.getContext("2d");ctx.clearRect(0, 0, canvas.width, canvas.height);// Starting boundariesvar range = [xlim[1] - xlim[0],ylim[1] - ylim[0],grid.zlim[1] - grid.zlim[0],];var i, j, x, y, z;var n = grid.length;var m = grid[0].length;var wx = Math.ceil((grid.width * canvas.width) / (xlim[1] - xlim[0]));var wy = Math.ceil((grid.width * canvas.height) / (ylim[1] - ylim[0]));for (i = 0; i < n; i++)for (j = 0; j < m; j++) {if (grid[i][j] == undefined) continue;x =(canvas.width * (i * grid.width + grid.xlim[0] - xlim[0])) / range[0];y =canvas.height *(1 - (j * grid.width + grid.ylim[0] - ylim[0]) / range[1]);z = (grid[i][j] - grid.zlim[0]) / range[2];if (z < 0.0) z = 0.0;if (z > 1.0) z = 1.0;ctx.fillStyle = colors[Math.floor((colors.length - 1) * z)];ctx.fillRect(Math.round(x - wx / 2), Math.round(y - wy / 2), wx, wy);}};return kriging;
})();if (module && module.exports) {module.exports = kriging;
}


http://chatgpt.dhexx.cn/article/uHA3EDiF.shtml

相关文章

Kriging(克里金模型)介绍

克里金模型最早出现在地质学文献中&#xff0c;用来估计有价值矿物的分布。萨克斯艾尔1989年将这种方法应用于近似的计算机实验。此后&#xff0c;克里格法被广泛研究并应用于工程领域。 克里格模型也称为高斯过程模型&#xff0c;因为它将目标函数建模为高斯过程的实现。定义…

克里金(kriging)模型的推导详解

Kriging模型理论推导 1、前言2、条件3、基础知识3.1、方差的理解3.2、概率密度函数3.3、多元正态分布 4、理论推导4.1 模型建立4.2 模型预测 1、前言 简介&#xff1a;Kriging模型是一种通过已知试验点信息来预测未知试验点上响应的无偏估计模型&#xff0c;其最早是由南非矿业…

c语言函数库----<ctype.h>

<ctype.h>是c标准函数库中的头文件&#xff0c;定义了一批c语言字符分类函数&#xff0c;下面将介绍<ctype.h>中的一些函数。 1、isascii()函数 isascii()函数是c语言中字符检测函数。通常用于检查参数c是否为ASCII 码字符&#xff0c;也就是判断c 的范围是否在0…

C语言——标准函数库

<stdlib.h> 算数&#xff1a; 1、函数abs和labs返回参数的绝对值 int abs( int value ); long int labs( long int value ); 2、函数div和ldiv做除法运算 div_t div( int numerator, int denominator ); ldiv_t ldiv( long int numer, long int denom ); 函数第一个参数…

Qt中调用C语言函数库

接着上一篇文章&#xff0c;试图画出速度模型时&#xff0c;中间会有用到调用C库函数--gsl库&#xff1b;记一下怎么使用的&#xff1a; 和C语言中类似&#xff0c;但要使用到条件编译&#xff1a; #ifdef __cplusplus extern "C" { #endif #include <gsl/gsl_…

c语言标准函数库怎么建立教程,C语言-基础教程-C语言函数库和文件

一个函数设计完后&#xff0c;我们可以用三种方法处理它&#xff1a;1)把它放在main()函数的同一个文件中&#xff1b;2)把它和写好的其它函数一起放在另一个文件中&#xff1b;3)把它放在函数库中。下面分别讨论这三种方法。 4.6.1程序文件的大小 因为C语言允许分别编译&#…

C语言字符串处理函数库

C语言的字符串处理函数库包括复制函数、拼接函数、比较函数、搜索函数等&#xff0c;这些函数的声明都位于头文件<string.h>。使用这些函数时&#xff0c;需要使用#include<string.h>指令将头文件包含到文件中。 复制函数 复制函数的功能是将字符&#xff08;节&…

C语言数学函数库

数学函数库 几乎所有语言都会提供数学函数库&#xff0c;数学函数库起码包含幂&#xff0c;对数、三角函数等最基本的运算&#xff0c;C对于基本数学函数还算全面&#xff0c;如下表&#xff1a; 使用数学函数库需要导入math.h&#xff0c;表中所有参数和返回值都是double&am…

c语言常用库函数

c语言常用库函数 1、数学函数 abs 原型&#xff1a;extern int abs(int x); 功能&#xff1a;求整数x的绝对值 说明&#xff1a;计算|x|, 当x不为负时返回x&#xff0c;否则返回-xfabs 原型&#xff1a;extern float fabs(float x); 功能&#xff1a;求浮点数x的绝对值 说明&…

简单实现破解Root密码

破解步骤&#xff1a; 在系统启动时进入grub选项菜单 在grub选项菜单按e进入编辑模式 编辑kernel那行 添加 /init 1 &#xff0c;相当于告诉linux下次启动启用单用户模式这个特殊模式启动。 按b重启 进入系统后&#xff0c;将root密码设置为空密码。 #vim /etc/passwd …

vue-admin-beautiful-pro源码、vue admin pro、vue admin plus 基于element-plus的vue3.0 admin前端框架

Vue Admin Plus已拥有四种布局&#xff08;画廊布局、综合布局、纵向布局、横向布局&#xff09;四种主题&#xff08;默认、海洋之心、绿茵草场&#xff0c;荣耀典藏&#xff09;&#xff0c;共计16布局主题种组合&#xff0c;满足所有项目场景&#xff0c;已支持常规bug自动修…

【Mockplus教程】安装Mockplus

MAC上安装Mockplus 1 下载 进入摩客官网桌面端下载页面&#xff0c;选择MAC版本下载&#xff1b; 2 安装 下载完成后&#xff0c;打开dmg包&#xff0c;将Mockplus图标拖动到Applications快捷图标上面即可完成安装。 整个过程见下方视频&#xff1a; 进入摩客官网桌面端下载页面…

VUE 使用 mock

mock使用背景 实际开发采用前后端分离形式&#xff0c;意味着后端API正在开发中&#xff0c;前端只需知道需要的数据格式即可进行开发&#xff0c;与后端开发同步进行。mock模拟后端提供api的调用&#xff0c;并返回数据。 mock使用步骤 1. 安装依赖 npm install mockjs 2…

抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

抱歉&#xff0c;Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用 标签&#xff1a; 2018 一句话概括本文 分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法&#xff0c;然后一步步 Hook掉对应代码&#xff0c;以此去掉恶心的重复弹出警告对话框。 引…

2022最新 vue中mock的使用步骤 亲测可用

第一步&#xff1a;在src目录下创建文件夹mock&#xff0c;mock下创建文件index.js存放mock数据 index.js代码&#xff1a; import Mock from "mockjs" // const chartData { // "Msg": "success", // "ResCode": 200, // …

Mock 使用方式 + 在 Vue 项目中使用 Mock

Mock Mock 介绍搭建测试项目mock.js 模拟数据的基础使用方式Vue 项目中使用 mock.js 拦截数据后端接口写好后&#xff0c;mock.js 的移除处理 写下博客用于自我复习、总结。 如有错误之处&#xff0c;请各位大佬指出。 学习资料来源于&#xff1a;尚硅谷 Mock 介绍 在前后端开…

尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P051-100]

视频链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili P1-50&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频笔记 代码 [P001-050]_小白桶子的博客-CSDN博客 P51-100&#xff1a;当前页面 P101-135&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频…

VirtualXposed 免ROOT使用Xposed模块

免ROOT使用Xposed模块 一&#xff0c;下载工具 VirtualXposed 官网地址 或者 百度网盘 提取码&#xff1a;39hu 二&#xff0c;安装应用 安装完成打开VirtualXposed可以看到界面&#xff0c;点击下面圆圈就可以进入添加应用&#xff0c;模块管理&#xff0…

Vue.js 框架源码与进阶 - Vue.js 源码剖析 - 模板编译

文章目录 一、模板编译简介二、体验模板编译的结果三、Vue Template Explorer四、编译的入口函数五、模板编译过程5.1 compileToFunctions5.2 compile5.3 baseCompile5.3.1 baseCompile-AST5.3.2 baseCompile-parse5.3.3 baseCompile-optimize5.3.4 baseCompile-generate 5.4 模…

全栈低码开源框架 json-script-rule 配置说明

说明 配置主要分为映射信息配置和spring配置文件application的配置 映射信息 映射信息通常指的是所配置的po类与映射表的相关信息&#xff0c;通过相关注解来获取相关的静态信息&#xff0c;当然这里也可以通过其它的渠道来加载这些配置信息&#xff0c;如数据库、xml文件等…