月球大数据地理空间分析展示平台-【前端】-月球2期前端
surprise
2023-10-31 b4bffdef9d944ee0982a08e0ea06b5a4a2f829d0
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
function define(f) {
    JsonGMLParser = f();
}
importScripts('txml.js');
importScripts('JsonGMLParser.js');
 
self.addEventListener('message', function (e) {
    var gmlParser = new JsonGMLParser(true /*extractAttributes */,
        true  /*xy */,
        undefined /*gmlnsm*/,
        undefined /*wfsnsm*/,
        undefined /*featureName*/,
        e.data.geometryFieldName);
    var data = e.data;
    var json, features;
    if (data.format === 'JSON') {
        json = JSON.parse(data.text);
        features = json.features;
        features.forEach(feature => {
            feature.positions = [];
            feature.geometry.coordinates.forEach(coordinate => {
                if (Array.isArray(coordinate)) {
                    let positions = [];
                    coordinate.forEach(item => {
                        if (Array.isArray(item[0])) {
                            let pArr = [];
                            item.forEach(p => {
                                pArr.push(p[0], p[1], p[2])
                            })
                            positions.push(pArr);
                        } else {
                            positions.push(item[0], item[1], item[2])
                        }
                    });
                    feature.positions.push(positions);
                }else{
                    feature.positions.push(coordinate)
                }
            })
            feature.attributes = feature.properties;
            feature.fid = feature.id;
            feature.geometryType = feature.geometry.type.toLocaleLowerCase();
            feature.bounds = undefined;
            delete feature.geometry;
            delete feature.id;
            delete feature.properties;
            delete feature.geometry_name;
            delete feature.type;
        })
    } else {
        json = tXml(data.text, { simplify: true });
        features = gmlParser.read(json);
    }
    delete data.text;
    data.features = features;
    postMessage(data);
    /*
    load('data.json', function(xhr) {
        var result = xhr.responseText;
        var features = gmlParser.read(data.document);
        postMessage({id: data.id, features: features});
    });
    */
});
/*
//simple XHR request in pure JavaScript
function load(url, callback) {
    var xhr;
 
    if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
    else {
        var versions = ["MSXML2.XmlHttp.5.0",
                  "MSXML2.XmlHttp.4.0",
                  "MSXML2.XmlHttp.3.0",
                  "MSXML2.XmlHttp.2.0",
                  "Microsoft.XmlHttp"]
 
        for(var i = 0, len = versions.length; i < len; i++) {
        try {
            xhr = new ActiveXObject(versions[i]);
            break;
        }
            catch(e){}
        } // end for
    }
 
    xhr.onreadystatechange = ensureReadiness;
 
    function ensureReadiness() {
        if(xhr.readyState < 4) {
            return;
        }
 
        if(xhr.status !== 200) {
            return;
        }
 
        // all is well
        if(xhr.readyState === 4) {
            callback(xhr);
        }
    }
 
    xhr.open('GET', url, true);
    xhr.send('');
}
*/