Openlayers 3 使用source.Vector loader函数未在地图上显示的点

Openlayers 3 使用source.Vector loader函数未在地图上显示的点,openlayers-3,Openlayers 3,我在地图上显示从服务器加载geojson文件的几个点时遇到问题。geojson文件会更改,因此我需要一种刷新地图层的好方法。为此,我创建了source.Vector(OpenLayers的3.17.1版) 函数vectorLoader,它执行XHR调用以检索最新版本的geojson文件。这已经在下面的JSFIDLE中进行了模拟 geojson文件具有有效的json,因为地图上的点显示我是否使用source.Vector对象,该对象使用url属性而不是如下所示的加载程序: var locat

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

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

geojson文件具有有效的json,因为地图上的点显示我是否使用source.Vector对象,该对象使用url属性而不是如下所示的加载程序:

  var locationSource = new ol.source.Vector({
     url: '/openlayers/location.geojson',
     format: new ol.format.GeoJSON({
        defaultDataProjection :'EPSG:4326' 
      })
  });
我会使用它,但是当一个新文件可用时,使用geojson文件的缓存版本是可怕的。我想要更可靠的东西,这就是为什么我试图让它与
加载器一起工作的原因

上面的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();

您将看到,对于JSFIDLE中提供的数据,地图上没有显示任何点。我觉得我在这里缺少了一些基本的东西,但是在找到了很多解决方案之后,没有一个能起作用。我似乎需要在'addFeatures'加载完成后再次执行style函数。这可以在上面的JSFIDLE控制台日志中看到。

事实上,这只是您遗漏的一个小问题

首先,
radius
没有定义,这可能是从一个没有复制到小提琴上的变量中提取出来的

不过,主要问题是在阅读功能时使用了错误的投影
featureProjection:'EPSG:4326'
,应该将其更改为
featureProjection:'EPSG:3857'
,因为OpenLayers视图中的默认投影是Web Mercator。也可能是这样,您希望在读取GeoJSON时显式定义数据投影,为此您应该设置
dataProjection:'EPSG:4326'


在这把小提琴中可以找到一个有效的例子:

是的,忘了在半径上复制。我试图使我的小提琴尽可能简单,以便显示问题,但我错过了。。我对openlayers和GIS还不熟悉,但仍在一些基本的东西上停留。谢谢!!
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();