使用source.Vector加载器函数在地图上未显示的点

时间:2016-09-27 20:47:22

标签: openlayers-3

我遇到问题,在地图上显示从服务器加载geojson文件的几个点。 geojson文件发生了变化,因此我想要一种刷新地图图层的好方法。为此,我创建了source.Vector(OpenLayers版本3.17.1)

var locationSource = new ol.source.Vector({
  format: new ol.format.GeoJSON({
    defaultDataProjection :'EPSG:4326' 
  }),
  loader: vectorLoader,
  strategy: ol.loadingstrategy.all
});

函数vectorLoader执行XHR调用以检索最新版本的geojson文件。这已经在下面的jsfiddle中进行了模拟

jsfiddle

geojson文件具有有效的json,因为地图上的点显示我是否使用了source.Vector对象,该对象使用url属性而不是像这样的加载器:

  var locationSource = new ol.source.Vector({
     url: '/openlayers/location.geojson',
     format: new ol.format.GeoJSON({
        defaultDataProjection :'EPSG:4326' 
      })
  });

我会使用这个,但是当新文件可用时,使用geojson文件的缓存版本会很糟糕。我想要一些更可靠的东西,这就是为什么我要尝试使用loader

上面的jsfiddle链接包含了所有代码,它似乎运行正常但是addFeatures之后的地图永远不会显示在地图上:

onSuccess: function(response) {
  var format = new ol.format.GeoJSON();
  var features = format.readFeatures(response, {
    featureProjection: 'EPSG:4326'
  });
  source.addFeatures(features);
  console.info(source.getFeatures());
  map.updateSize();
  source.changed();

您将看到地图上没有任何点显示jsfiddle中提供的数据。我觉得我错过了一些基本的东西,但是在找到很多解决方案后,没有工作......我似乎需要在“addFeatures”加载完成后再次执行样式函数。这可以在上面的jsfiddle的控制台日志中看到。

1 个答案:

答案 0 :(得分:1)

确实,这只是一个你想念的小问题。

首先,radius未定义,这可能是从您尚未复制到您的小提琴的变量中提取的。

主要问题是当您阅读功能featureProjection: 'EPSG:4326'时使用的错误投影,应该更改为featureProjection: 'EPSG:3857',因为OpenLayers视图中的默认投影是Web Mercator。也可能是这样,你想在阅读你的GeoJSON时明确定义数据投影,为此你应该设置dataProjection: 'EPSG:4326'

可以在这个小提琴中找到一个工作示例:https://jsfiddle.net/9oukr51t/