zhaoxing
2022-08-22 74bb50ce93d0c9cd20a0b84f63db46f433a39e91
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const kriging = require("./kriging");
const default_params = require("./kriging_default_params");
const boundary_ = require("../kriging/district_boundary");
const extend_ = require("../kriging/district_extent");
 
var lngs = [121.456344, 121.983627, 122.657344, 120.635689, 121.446533, 121.336544, 121.346534, 121.4268344, 121.983344, 121.763344];
var lats = [31.456344, 31.983627, 31.657344, 31.635689, 31.446533, 31.336544, 31.346534, 31.4268344, 31.983344, 31.763344];
var values = [1, 3, 5, 5, 3, 5, 3, 2, 2, 1];
 
 
module.exports = {
    // lngs = ["121.238702", "121.37806", "121.138177", "121.448556", "121.343095", "121.213946", "121.238702", "121.188195", "121.421457", "121.187873", "121.482731", "121.147248", "121.920618", "121.458805", "121.345745", "121.574977", "121.533134", "121.413675", "121.697667", "121.814412", "121.413981", "31.113971", "121.633632", "121.148344"];
    // lats = ["31.019359", "31.118032", "31.159053", "31.395845", "31.487958", "31.277393", "31.019359", "30.977245", "31.014682", "30.835197", "30.924335", "31.266156", "30.887216", "31.241540", "30.749318", "31.345590", "30.836926", "31.631121", "31.395322", "31.503677", "31.202651", "121.519257", "31.135996", "31.264731"];
    // values = [20, 50, 30, 50, 40, 30, 30, 50, 20, 30, 50, 20, 20, 50, 30, 50, 30, 30, 40, 20, 20, 20, 30, 40]
    setArrays_(points) {
        for (let i = 0; i < points.length; i++) {
            lngs[i] = points[i].regionLong;
            lats[i] = points[i].regionLat;
            values[i] = points[i].paramvalue;
        }
    },
    //计算覆盖率    6个参数:Z值数组[],X值数组[],Y值数组[],裁剪区域边界[[[]]],边界数组[minx,miny,maxx,maxy],插值份数(单方向)
    addGridCanvasOverlay_(values, lngs, lats, area_boundary, area_extent, count) {
        let letiogram = kriging.train(values, lngs, lats, default_params.kriging_default_params.krigingModel,
            default_params.kriging_default_params.krigingSigma2,
            default_params.kriging_default_params.krigingAlpha);
        let grid = kriging.grid(area_boundary, letiogram, (area_extent[2] - area_extent[0]) / count);
        let reach_num = 0;
        let total_num = 0;
        for (let index = 0; index < grid.length; index++) {
            for (let m = 0; m < grid[index].length; m++) {
                if (grid[index][m]) {
                    total_num++;
                    grid[index][m] > 3 ? reach_num++ : reach_num;
                }
            }
        }
        return { "numerator": reach_num, "denominator": total_num };
    },
    caculaterCoverRate(values, lngs, lats) {
        var district_rates = {};
        district_rates['310000'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_shanghai, extend_.district_extent_shanghai, 400);
 
        district_rates['310101'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_huangpu, extend_.district_extent_shanghai, 400);        
        district_rates['310102'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_xuhui, extend_.district_extent_shanghai, 400);
        district_rates['310103'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_changning, extend_.district_extent_shanghai, 400);
        district_rates['310104'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_jingan, extend_.district_extent_shanghai, 400);
        district_rates['310105'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_putuo, extend_.district_extent_shanghai, 400);
        district_rates['310106'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_hongkou, extend_.district_extent_shanghai, 400);
        district_rates['310107'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_yangpu, extend_.district_extent_shanghai, 400);
        district_rates['310108'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_minhang, extend_.district_extent_shanghai, 400);
        district_rates['310109'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_baoshan, extend_.district_extent_shanghai, 400);
        district_rates['310110'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_jiading, extend_.district_extent_shanghai, 400);
        let a_ = { "numerator": 0, "denominator": 0 };
        //浦东
        for (let index = 0; index < boundary_.district_boundary_pudong.length; index++) {
            let b_ = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_pudong[index], extend_.district_extent_shanghai, 400);
            a_.numerator += b_.numerator;
            a_.denominator += b_.denominator;
        }
        district_rates['310115'] = { "numerator": a_.numerator, "denominator": a_.denominator };
        //金山
        a_ = { "numerator": 0, "denominator": 0 };
        for (let index = 0; index < boundary_.district_boundary_jinshan.length; index++) {
            let b_ = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_jinshan[index], extend_.district_extent_shanghai, 400);
            a_.numerator += b_.numerator;
            a_.denominator += b_.denominator;
        }
        district_rates['310116'] = { "numerator": a_.numerator, "denominator": a_.denominator };
        district_rates['310117'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_songjiang, extend_.district_extent_shanghai, 400);
        district_rates['310118'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_qingpu, extend_.district_extent_shanghai, 400);
        district_rates['310120'] = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_fengxian, extend_.district_extent_shanghai, 400);
        //崇明
        a_ = { "numerator": 0, "denominator": 0 };
        for (let index = 0; index < boundary_.district_boundary_chongming.length; index++) {
            let b_ = this.addGridCanvasOverlay_(values, lngs, lats, boundary_.district_boundary_chongming[index], extend_.district_extent_shanghai, 400);
            a_.numerator += b_.numerator;
            a_.denominator += b_.denominator;
        }
        district_rates['310151'] = { "numerator": a_.numerator, "denominator": a_.denominator };
        console.log('崇明: '+(Math.round(a_.numerator / a_.denominator * 10000) / 100.00) + "%");
        return district_rates;
    }
 
};