日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cesium+kriging.js实现雨量插值

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cesium+kriging.js实现雨量插值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0.前言
網上有很多關于openlayers的克里金插值,但是最近在學習cesium,也想在cesium中做,但是好像網上相關的例子一個都沒有。所以我就自己嘗試去做。
1.克里金插值
克里金插值也稱作空間局部插值法,或空間自協方差最佳插值法,它以變異函數理論和結構分析為基礎, 在特定區域內對區域化變量進行無偏最優估計,被廣泛應用于土壤制圖領域,是一種非常重要的地統計學方法。
主要是用來預測一些地理相關的插值方法。
2.kriging.js
克里金插值算法有開源的實現,項目的GitHub地址kriging.js
kriging.train(t, x, y, model, sigma2, alpha):使用gaussian、exponential或spherical模型對數據集進行訓練,返回的是一個variogram對象;
kriging.grid(polygons,variogram,width);使用剛才的variogram對象使polygons描述的地理位置內的格網元素具備不一樣的預測值;
kriging.plot(canvas,grid,xlim,ylim,colors);將得到的格網grid渲染至canvas上。
3.cesium實現
大家都知道cesium可以通過貼圖的方式在entity上貼上image,canvas等。
所以我們可以將插值后的canvas結果貼在實體上。
可以參考ImageMaterialProperty

主要代碼

```javascriptfunction drawKriging(lats, lngs, values, coords, ex) {if (values.length > 3) {let colors = ["#006837", "#1a9850", "#66bd63", "#a6d96a", "#d9ef8b", "#ffffbf","#fee08b", "#fdae61", "#f46d43", "#d73027", "#a50026"];const polygon = new Cesium.PolygonGeometry ( {polygonHierarchy: new Cesium.PolygonHierarchy (Cesium.Cartesian3.fromDegreesArray ( coords ))} );//構造面,方便計算范圍let extent = Cesium.PolygonGeometry.computeRectangle ( {polygonHierarchy: new Cesium.PolygonHierarchy (Cesium.Cartesian3.fromDegreesArray ( coords ))} );//范圍(弧度)let minx = Cesium.Math.toDegrees ( extent.west );//轉換為經緯度let miny = Cesium.Math.toDegrees ( extent.south );let maxx = Cesium.Math.toDegrees ( extent.east );let maxy = Cesium.Math.toDegrees ( extent.north );let canvas = null;//畫布function getCanvas() {//1.用克里金訓練一個variogram對象let variogram = kriging.train ( values, lngs, lats, 'exponential', 0, 100 );//2.使用剛才的variogram對象使polygons描述的地理位置內的格網元素具備不一樣的預測值;let grid = kriging.grid ( ex, variogram, (maxy - miny) / 500 );canvas = document.createElement ( 'canvas' );canvas.width = 800;canvas.height = 800;canvas.style.display = 'block';canvas.getContext ( '2d' ).globalAlpha = 0.75;//設置透明度//3.將得到的格網預測值渲染到canvas畫布上kriging.plot ( canvas, grid, [minx, maxx], [miny, maxy], colors );}getCanvas ();if (canvas != null) {viewer.entities.add ( {polygon: {hierarchy: {positions: Cesium.Cartesian3.fromDegreesArray ( coords )},material: new Cesium.ImageMaterialProperty ( {image: canvas//使用貼圖的方式將結果貼到面上} )}} );}}} 參數格式: lons:經度數組 lats:緯度數組 values:已知的值數組 coords是一個cesium的數據格式,[114,25,114,23,114,22],不用閉合,就一個面上所有點。 ex,普通的geojson格式的面的格式的coordinates。

總結

以上是生活随笔為你收集整理的Cesium+kriging.js实现雨量插值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。