0

我有很多我想在 webgl 地球中使用的地理。Webgl 的格式是

Googles .json 文件在其工作 webgl 地球源中的示例 [["1993",[long, lat,weight,long, lat,weight],["1994",[long, lat,weight,long, lat,weight,long, lat,weight,long, lat,weight]]]

我一直在寻找一种方法来转换它,但我在网上找不到转换器。有谁知道我在哪里可以找到这种格式的转换器或建议一种方法来做到这一点。

我的数据样本:

 - Year  Latitude   Longitude   Magnitude
 - 1995 -82.8627519 -135         0.11
 - 1995 -54.423199  3.413194     0.01
 - 1994 -53.08181   73.504158    0.01
 - 1994 -51.796253  -59.523613   0.04
 - 1993 -49.280366  69.348557    0.02
 - 1993 -41.4370868 147.1393767  0.18

再看看这个,我认为谷歌正在使用的 json 文件是一个嵌套的 json 数组数组。这个

4

1 回答 1

0

有多种方法可以解析数据。第一步是将数据保存到文件中。例如:

Year  Latitude   Longitude   Magnitude
1995 -82.8627519 -135         0.11
1995 -54.423199  3.413194     0.01
1994 -53.08181   73.504158    0.01
1994 -51.796253  -59.523613   0.04
1993 -49.280366  69.348557    0.02
1993 -41.4370868 147.1393767  0.18

在 raw.txt

第二步是加载和解析数据。在进行解析时,需要牢记以下几点:

  1. 原始数据的空格分隔值的数量不一致,因此需要先折叠这些空格,以便我们可以通过空格字符分割行/行。幸运的是,数据不包含包含空格的名称,因此我们可以像这样使用 RegEx/\s{2,}/g
  2. 我们希望将与一年有关的所有数据收集到一个列表中。一种方法是使用数组并不断检查它是否已经具有年份值。另一种是简单地使用对象/关联数组/字典,而不用担心任何检查。
  3. 一旦数据被正确地收集到一个对象中,我们将它弹出到一个数组中,以便它与正在使用的数据的格式相匹配。

这就是我的意思:

xhr = new XMLHttpRequest();
        xhr.open('GET', '/globe/raw.txt', true);
        xhr.onreadystatechange = function(e) {
          if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                var lines = xhr.responseText.split("\n");//split .txt file into lines
                var data = [];//prepare an array to hold the end result
                var dict = {};//use an Object/Dictionary to collapse data from same key/year
                for(var i = 1 ; i < lines.length; i++){//for each line
                    var line = lines[i].replace(/\s{2,}/g, ' ').split(' ');//collapse white spaces and split into an array of values
                    if( !dict[line[0]]) dict[line[0]] = [];//if there isn't an array to store that data yes, make one
                    dict[line[0]].push(parseFloat(line[1]));//append data into the coresponding key/year
                    dict[line[0]].push(parseFloat(line[2]));
                    dict[line[0]].push(parseFloat(line[3]));
                }
                for(var key in dict) data.push([key,dict[key]]);//at the end, loop through the object and populate an array
                console.log(data);
            }
          }
        };
        xhr.send(null);

所以如果你使用这样的东西:

xhr = new XMLHttpRequest();
        xhr.open('GET', '/globe/raw.txt', true);
        xhr.onreadystatechange = function(e) {
          if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                var lines = xhr.responseText.split("\n");//split .txt file into lines
                var data = [];//prepare an array to hold the end result
                var dict = {};//use an Object/Dictionary to collapse data from same key/year
                for(var i = 1 ; i < lines.length; i++){//for each line
                    var line = lines[i].replace(/\s{2,}/g, ' ').split(' ');//collapse white spaces and split into an array of values
                    if( !dict[line[0]]) dict[line[0]] = [];//if there isn't an array to store that data yes, make one
                    dict[line[0]].push(parseFloat(line[1]));//append data into the coresponding key/year
                    dict[line[0]].push(parseFloat(line[2]));
                    dict[line[0]].push(parseFloat(line[3]));
                }
                for(var key in dict) data.push([key,dict[key]]);//at the end, loop through the object and populate an array
                window.data = data;
                for (i=0;i<data.length;i++) {
                    globe.addData(data[i][1], {format: 'magnitude', name: data[i][0], animated: true});
                  }
                 globe.createPoints();
                 settime(globe,0)();
                 globe.animate();
            }
          }
        };
        xhr.send(null);

在服务器上运行的WebGL Globe 实验中,您将看到您的数据。 WebGL 地球仪

于 2013-05-05T14:00:49.900 回答