kriging-contour
Version:
基于克里金插值算法,根据离散点位置及其权重,生成等值面矢量数据(GeoJSON格式)和栅格数据(Canvas绘制图片),这些数据在任何WebGIS客户端上都可通用展示。
68 lines (58 loc) • 2.81 kB
JavaScript
import {kriging} from './kriging';
function _getKrigingGridInfo(featureCollection,weight,krigingParams){
//先获取featureCollection的bbox
let values=[],lons=[],lats=[];
let extent=[100000000,100000000,-100000000,-100000000];
featureCollection.features.forEach(feature => {
//提取插值权重字段,准备克里金插值使用
values.push(feature.properties[weight]);
lons.push(feature.geometry.coordinates[0]);
lats.push(feature.geometry.coordinates[1]);
if(extent[0]>feature.geometry.coordinates[0])
extent[0]=feature.geometry.coordinates[0];
if(extent[1]>feature.geometry.coordinates[1])
extent[1]=feature.geometry.coordinates[1];
if(extent[2]<feature.geometry.coordinates[0])
extent[2]=feature.geometry.coordinates[0];
if(extent[3]<feature.geometry.coordinates[1])
extent[3]=feature.geometry.coordinates[1];
});
let variogram=kriging.train(values,lons,lats,krigingParams.model,krigingParams.sigma2,krigingParams.alpha);
let gridinfo=kriging.getGridInfo(extent,variogram,200);
return gridinfo;
}
/*
* 克里金生成矢量等值面,浏览器和node都可以使用
* @param {json} featureCollection:必填,已有点数据,geojson格式
* @param {string} weight:必填,插值所依赖的圈中字段
* @param {object) krigingParams:必填,克里金插值算法参数设置
krigingParams:{
krigingModel:'exponential','gaussian','spherical',三选一
krigingSigma2:
krigingAlpha:
}
* @param {array} breaks:必填,等值面分级区间
*/
function getVectorContour(featureCollection,weight,krigingParams,breaks){
let gridinfo=_getKrigingGridInfo(featureCollection,weight,krigingParams);
let vectorContour=kriging.getVectorContour(gridinfo,breaks);
return vectorContour;
};
/*
* 克里金生成栅格等值面并绘制到canvas上,仅浏览器中使用
* @param {json} featureCollection:必填,已有点数据,geojson格式
* @param {string} weight:必填,插值所依赖的圈中字段
* @param {object) krigingParams:必填,克里金插值算法参数设置
krigingParams:{
krigingModel:'exponential','gaussian','spherical',三选一
krigingSigma2:
krigingAlpha:
}
* @param {dom) canvas:必填,绑定渲染的canvas dom
* @param {array) colors:必填,等值面分级区间
*/
function drawCanvasContour(featureCollection,weight,krigingParams,canvas,xlim,ylim,colors) {
let gridinfo=_getKrigingGridInfo(featureCollection,weight,krigingParams);
kriging.drawCanvasContour(gridinfo,canvas,xlim,ylim,colors);
};
export {getVectorContour,drawCanvasContour};