我遇到问题,在地图上显示从服务器加载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中进行了模拟
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的控制台日志中看到。
答案 0 :(得分:1)
确实,这只是一个你想念的小问题。
首先,radius
未定义,这可能是从您尚未复制到您的小提琴的变量中提取的。
主要问题是当您阅读功能featureProjection: 'EPSG:4326'
时使用的错误投影,应该更改为featureProjection: 'EPSG:3857'
,因为OpenLayers视图中的默认投影是Web Mercator。也可能是这样,你想在阅读你的GeoJSON时明确定义数据投影,为此你应该设置dataProjection: 'EPSG:4326'
。
可以在这个小提琴中找到一个工作示例:https://jsfiddle.net/9oukr51t/