加载并将geojson多点功能解析为openlayers 3

时间:2015-10-17 02:16:23

标签: jquery geojson openlayers-3

我正在尝试将只包含一个多点功能​​的geoJSON文件的各个部分加载到不同的数组中,以便在我的OpenLayers应用程序中使用,但我无法正确获取加载和解析代码。这是一个语法问题。我的geoJSON文件具有以下结构:

{
    "type": "Feature",
    "geometry": {
        "type": "MultiPoint",
        "coordinates": [
        [
            243.19,
            31.81
        ],
        [
            243.05,
            31.84
        ], 
             ...

        [
            141.3,
            38.51
        ]
    ]
},
"properties": {
    "active": "12 Nov 2005 22:00 - 14 Jul 2006 22:00",
    "species": "Bluefin Tuna",
    "id": "100508400",
    "sex": "unknown" 
    "time": [
        1124432402,
        1124434321,
        ...
        1144737900
    ]
  }
}

我正在尝试通过Ajax / JQuery加载geoJSON并将多点坐标解析为数组,时间坐标为数组,并提取一些属性值。

        var BT100508400Coords = [],
            BT100508400Time = [],
            id, species;

    $.getJSON('data/BT100508400.geojson').done(function (data) {
        $(data).each(function () {
            BT100508400Coords.push(data.geometry.coordinates);
            BT100508400Time.push(data.properties.time);
            id = data.properties.id;
            species = data.properties.species;
        }).done(function () {
            makeLineString(id, species, BT100508400Coords, BT100508400Time);
        }).fail(function () {
            console.log("BT100508400 multipointCoords not populated");
        });
    });

这次尝试接近我在这里尝试的尝试:

Creating an array from GeoJSON file in OpenLayers 3

但是我已经改变了一些目标,具体来说,我的GeoJSON文件需要保持一个多点功能​​。我似乎无法编写单一多点功能的语法,而不是该答案中建议的功能集合。

非常感谢。

1 个答案:

答案 0 :(得分:1)

each没有返回具有done方法的值。所以,基本上,只需更改下面的代码:

    var BT100508400Coords = [],
        BT100508400Time = [],
        id, species;

$.getJSON('data/BT100508400.geojson').done(function (data) {
    $(data).each(function () {
        BT100508400Coords.push(data.geometry.coordinates);
        BT100508400Time.push(data.properties.time);
        id = data.properties.id;
        species = data.properties.species;
    })
    makeLineString(id, species, BT100508400Coords, BT100508400Time);
});