Vector 矢量源上URL和加载程序之间的差异-openlayers 3

Vector 矢量源上URL和加载程序之间的差异-openlayers 3,vector,openlayers-3,Vector,Openlayers 3,我必须使用Openlayers 3.9.0将WFS层从我的Geoserver加载到我的网站 根据需要,有两种加载功能的选项,loader()和url() 我不明白两者之间的区别。它们都用于加载功能,loader,不设置任何URL,看起来更复杂 我试着 完全没有错误,但也没有功能 然后我简单地坐了下来 var url = 'http://localhost:8080/geoserver/mapname/wfs?service=WFS&'+'version=1.0.0&reques

我必须使用Openlayers 3.9.0将WFS层从我的Geoserver加载到我的网站

根据需要,有两种加载功能的选项,
loader
()和
url
()

我不明白两者之间的区别。它们都用于加载功能,
loader
,不设置任何URL,看起来更复杂

我试着

完全没有错误,但也没有功能

然后我简单地坐了下来

var url =  'http://localhost:8080/geoserver/mapname/wfs?service=WFS&'+'version=1.0.0&request=GetFeature&typeName=mapname:awesomelayer&'+'outputFormat=application/json&maxFeatures=50'    
var vectorSource = new ol.source.Vector({
          format: new ol.format.GeoJSON(),
          strategy: new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20})),
          url: function(extent, resolution, projection){return url}
});
而且成功了

我不明白其中的区别,
url
更简单、更快,并且不需要
loadFeatures
功能。我修改了手册,但实际上,就代码而言,我无法理解它。
loader
的作用是什么,为什么不设置URL以及何时使用它?我错过了什么


谢谢

我想到的第一个原因是:捕捉错误。如果您的服务器能够捕获错误并在响应中返回它们,那么您可能希望在加载程序中读取它们并相应地执行操作

第二个原因是在将这些特性添加到源代码之前计算/执行一些操作。这是一个例子。使用加载器有以下两个原因


如果在添加数据之前您不需要对数据进行任何特殊处理,或者您不需要管理错误,那么
url
确实足以满足您的要求。

Mybe这会更好

var url =  'http://localhost:8080/geoserver/mapname/wfs?service=WFS&'+'version=1.0.0&request=GetFeature&typeName=mapname:awesomelayer&'+'outputFormat=application/json&maxFeatures=50'    
var vectorSource = new ol.source.Vector({
          format: new ol.format.GeoJSON(),
          loader: function(extent, resolution, projection){
                $.ajax({
                url: url,
                type:'GET',
                dataType: 'jsonp'
                }).done(function(response) {

                    var features = vectorSource.readFeatures(response, {
                        featureProjection: projection
                    });

                    vectorSource.addFeatures(features);
                });
           },
          strategy: new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}))
});

我刚刚遇到了和你一样的问题。带有
url
的方法工作得很好,但我在使用
加载程序时遇到了问题

问题是,从您的
url
中,我注意到您的
outputFormat=application/json
,同时在
加载函数中指定了
数据类型:“jsonp”

数据类型:“jsonp”
仅在
outputFormat=text/javascript
时有效。参考本文,它用正确的语法解释了格式


因此,您必须使用JSONP而不是JSON,为了启用JSONP,请遵循这里的答案。在这之后,将您的
outputFormat
更改为
outputFormat=text/javascript

现在就有意义了。顺便问一下,关于为什么加载器版本不能工作有什么想法吗?再次谢谢你。如果您可以创建一个JSFIDLE,我很乐意帮助您找出问题所在。请查看。我不知道为什么它不起作用。我使用的是
jquery1.11.3
而不是
1.11.0
。如果我替换
http://demo.opengeo.org/geoserver/wfs
http://localhost:3000/geoserver/mymap/wfs
即使我没有看到任何错误,它也无法工作<代码>wfs GET
具有状态
200 OK
。我不明白,它看起来不错,我能发现虫子。任何小费都行。谢谢,我的代码基于。我还使用Openlayers 3.9.0该查询工作正常,但是几何体的读取似乎有问题。请看更新的示例:这可能与此线程无关,因此如果您无法解决问题,我建议您启动一个新的线程。
var url =  'http://localhost:8080/geoserver/mapname/wfs?service=WFS&'+'version=1.0.0&request=GetFeature&typeName=mapname:awesomelayer&'+'outputFormat=application/json&maxFeatures=50'    
var vectorSource = new ol.source.Vector({
          format: new ol.format.GeoJSON(),
          loader: function(extent, resolution, projection){
                $.ajax({
                url: url,
                type:'GET',
                dataType: 'jsonp'
                }).done(function(response) {

                    var features = vectorSource.readFeatures(response, {
                        featureProjection: projection
                    });

                    vectorSource.addFeatures(features);
                });
           },
          strategy: new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}))
});