vue+openlayers示例:地图克里金插值渲染(附源码下载)

demo源码运行环境以及配置

运行环境:依赖Node安装环境,demo本地Node版本:推荐v16+。

运行工具:vscode或者其他工具。

配置方式:下载demo源码,vscode打开,然后顺序执行以下命令:

(1)下载demo环境依赖包命令:npm i

(2)启动demo命令:npm run dev

(3)打包demo命令: npm run build

技术栈

前端框架 :Vue 3.5.13

地图库 :OpenLayers 10.4.0

构建工具 :Vite 6.2.0

示例效果

  • 颜色数组配置颜色带少,不够圆滑效果
    在这里插入图片描述
  • 颜色数组配置颜色带多,比较圆滑效果
    在这里插入图片描述

利用开源 js 库克里金插值 kriging.js,源码 github 见这里:github; 关于 kriging.js
的相关介绍详情说明,自行看 github 以及结合百度搜索。

kriging.js 插值需要插值点,包括点坐标以及插值权重字段值,还需要插值范围边界,我这里的模拟插值点以及插值边界分别存储在
point.js 以及 world.js 文件。

核心源码

<template>
    <div id="map" class="map"></div>
    <div class="titleContainer center">
        <span>vue+openlayers示例:地图克里金插值渲染</span>
    </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { Map, View } from 'ol';
import TileLayer from 'ol/layer/Tile';
import { OSM, TileArcGISRest, Vector as VectorSource, ImageCanvas } from 'ol/source';
import 'ol/ol.css';
import VectorLayer from 'ol/layer/Vector';
import { Style, Fill, Stroke, Circle } from 'ol/style';
import ImageLayer from 'ol/layer/Image';
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';
import { transform } from 'ol/proj';
import GeoJSON from 'ol/format/GeoJSON.js';
import * as turf from '@turf/turf';

onMounted(() => {
    // 待加载的 JS 文件数组
    const files = [
        "/lib/kriging.js",
        "lib/point.js",
        "/lib/world.js",
    ];
    loadScripts(files, function () {
        console.log("All scripts loaded");
        initMap();
    });
});
const loadScripts = (files, callback) => {
    if (files.length === 0) {
        callback();
        return;
    }
    const file = files.shift();
    const script = document.createElement("script");
    script.onload = function () {
        loadScripts(files, callback);
    };
    script.src = file;
    document.head.appendChild(script);
};
const initMap = () => {
    const map = new Map({
        layers: [
            new TileLayer({
                source: new TileArcGISRest({
                    url: "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
                    crossOrigin: 'Anonymous'
                }),
            })
        ],
        target: 'map',
        view: new View({
            center: [103.4069444, 29.58805556],
            zoom: 10,
            projection: 'EPSG:4326',
        }),
    });
    // 克里金插值渲染   
    const params = {
        krigingModel: 'exponential',//model还可选'gaussian','spherical'
        krigingSigma2: 0,
        krigingAlpha: 100,
        canvasAlpha: 0.9,//canvas图层透明度
        colors: ["#00A600", "#01A600", "#03A700", "#04A700", "#05A800", "#07A800", "#08A900", "#09A900", "#0BAA00", "#0CAA00", "#0DAB00", "#0FAB00", "#10AC00", "#12AC00", "#13AD00", "#14AD00", "#16AE00", "#17AE00", "#19AF00", "#1AAF00", "#1CB000", "#1DB000", "#1FB100", "#20B100", "#22B200", "#23B200", "#25B300", "#26B300", "#28B400", "#29B400", "#2BB500", "#2CB500", "#2EB600", "#2FB600", "#31B700", "#33B700", "#34B800", "#36B800", "#37B900", "#39B900", "#3BBA00", "#3CBA00", "#3EBB00", "#3FBB00", "#41BC00", "#43BC00", "#44BD00", "#46BD00", "#48BE00", "#49BE00", "#4BBF00", "#4DBF00", "#4FC000", "#50C000", "#52C100", "#54C100", "#55C200", "#57C200", "#59C300", "#5BC300", "#5DC400", "#5EC400", "#60C500", "#62C500", "#64C600", "#66C600", "#67C700", "#69C700", "#6BC800", "#6DC800", "#6FC900", "#71C900", "#72CA00", "#74CA00", "#76CB00", "#78CB00", "#7ACC00", "#7CCC00", "#7ECD00", "#80CD00", "#82CE00", "#84CE00", "#86CF00", "#88CF00", "#8AD000", "#8BD000", "#8DD100", "#8FD100", "#91D200", "#93D200", "#95D300", "#97D300", "#9AD400", "#9CD400", "#9ED500", "#A0D500", "#A2D600", "#A4D600", "#A6D700", "#A8D700", "#AAD800", "#ACD800", "#AED900", "#B0D900", "#B2DA00", "#B5DA00", "#B7DB00", "#B9DB00", "#BBDC00", "#BDDC00", "#BFDD00", "#C2DD00", "#C4DE00", "#C6DE00", "#C8DF00", "#CADF00", "#CDE000", "#CFE000", "#D1E100", "#D3E100", "#D6E200", "#D8E200", "#DAE300", "#DCE300", "#DFE400", "#E1E400", "#E3E500", "#E6E600", "#E6E402", "#E6E204", "#E6E105", "#E6DF07", "#E6DD09", "#E6DC0B", "#E6DA0D", "#E6D90E", "#E6D710", "#E6D612", "#E7D414", "#E7D316", "#E7D217", "#E7D019", "#E7CF1B", "#E7CE1D", "#E7CD1F", "#E7CB21", "#E7CA22", "#E7C924", "#E8C826", "#E8C728", "#E8C62A", "#E8C52B", "#E8C42D", "#E8C32F", "#E8C231", "#E8C133", "#E8C035", "#E8BF36", "#E9BE38", "#E9BD3A", "#E9BC3C", "#E9BB3E", "#E9BB40", "#E9BA42", "#E9B943", "#E9B945", "#E9B847", "#E9B749", "#EAB74B", "#EAB64D", "#EAB64F", "#EAB550", "#EAB552", "#EAB454", "#EAB456", "#EAB358", "#EAB35A", "#EAB35C", "#EBB25D", "#EBB25F", "#EBB261", "#EBB263", "#EBB165", "#EBB167", "#EBB169", "#EBB16B", "#EBB16C", "#EBB16E", "#ECB170", "#ECB172", "#ECB174", "#ECB176", "#ECB178", "#ECB17A", "#ECB17C", "#ECB17E", "#ECB27F", "#ECB281", "#EDB283", "#EDB285", "#EDB387", "#EDB389", "#EDB38B", "#EDB48D", "#EDB48F", "#EDB591", "#EDB593", "#EDB694", "#EEB696", "#EEB798", "#EEB89A", "#EEB89C", "#EEB99E", "#EEBAA0", "#EEBAA2", "#EEBBA4", "#EEBCA6", "#EEBDA8", "#EFBEAA", "#EFBEAC", "#EFBFAD", "#EFC0AF", "#EFC1B1", "#EFC2B3", "#EFC3B5", "#EFC4B7", "#EFC5B9", "#EFC7BB", "#F0C8BD", "#F0C9BF", "#F0CAC1", "#F0CBC3", "#F0CDC5", "#F0CEC7", "#F0CFC9", "#F0D1CB", "#F0D2CD", "#F0D3CF", "#F1D5D1", "#F1D6D3", "#F1D8D5", "#F1D9D7", "#F1DBD8", "#F1DDDA", "#F1DEDC", "#F1E0DE", "#F1E2E0", "#F1E3E2", "#F2E5E4", "#F2E7E6", "#F2E9E8", "#F2EBEA", "#F2ECEC", "#F2EEEE", "#F2F0F0", "#F2F2F2"]
        //colors:["#006837", "#1a9850", "#66bd63", "#a6d96a", "#d9ef8b", "#ffffbf","#fee08b", "#fdae61", "#f46d43", "#d73027", "#a50026"]
    };
    const WFSVectorSource = new VectorSource();
    const WFSVectorLayer = new VectorLayer(
        {
            source: WFSVectorSource
        });
    var i, j, k, n;
    n = points.length;
    const t = Array(n);
    const x = Array(n);
    const y = Array(n);
    for (i = 0; i < n; i++) {
        t[i] = points[i].attributes.TN_;
        x[i] = points[i].geometry.x;
        y[i] = points[i].geometry.y;
        const feature = new Feature({
            geometry: new Point(transform([x[i], y[i]], 'EPSG:4326', 'EPSG:4326')),
            value: t[i]
        });
        feature.setStyle(new Style({
            image: new Circle({
                radius: 6,
                fill: new Fill({ color: "#00F" })
            })
        }));
        WFSVectorSource.addFeature(feature);
    }
……
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS之家

赠人玫瑰,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值