如何在没有XHR的情况下加载vectorSource

时间:2017-08-31 18:53:36

标签: javascript openlayers

使用最新版本的Openlayers 4.3.1,我按如下方式设置了一个矢量源:

this.vectorSource = new ol.source.Vector({
      url: `../assets/data/file.json`,
      format: new ol.format.TopoJSON()
    });

    this.vector = new ol.layer.Vector({
      source: this.vectorSource,
      style: this.style
    });

但在某些情况下,该文件需要通过其他功能进行先前的处理。

我如何加载file.json,对待他并在ol.source.vector中使用?

我也尝试使用响应ajax,其中dataSource变量是第一个示例URL中来自同一../assets/data/file.json的ajax调用的响应

vectorSource = new ol.source.Vector({
        features: (new ol.format.TopoJSON()).readFeatures(dataSource)
      });

1 个答案:

答案 0 :(得分:1)

这可以很容易地完成。配置没有URL的ol.source.Vector。相反,您可以自己加载json并使用

将其转换为对象
var json = JSON.parse(dataSource);

然后修改JSON对象,最后调用

var features = new ol.format.TopoJSON().readFeatures(dataSource,
    {featureProjection: view.getProjection()});
vectorSource.addFeatures(features);

请注意featureProjection选项,除非您的视图与数据源具有相同的投影,否则该选项是必需的。