Vector 矢量源上URL和加载程序之间的差异-openlayers 3
我必须使用Openlayers 3.9.0将WFS层从我的Geoserver加载到我的网站 根据需要,有两种加载功能的选项,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
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}))
});