我可以强制OpenLayers 5发送POST请求吗?

我可以强制OpenLayers 5发送POST请求吗?,post,get,openlayers,Post,Get,Openlayers,这是我的问题。 我必须使用OpenLayers 5过滤ImageLayer,因此我准备了以下代码: const params = layerToFilter.getSource().getParams(); delete params.CQL_FILTER; params.CQL_FILTER = myFilter; layerToFilter.getSource().updateParams(params); 这段代码可以正常工作,但如果“myFilter”变量是一个太大的字符串,则不会。

这是我的问题。 我必须使用OpenLayers 5过滤ImageLayer,因此我准备了以下代码:

const params = layerToFilter.getSource().getParams();
delete params.CQL_FILTER;
params.CQL_FILTER = myFilter;
layerToFilter.getSource().updateParams(params);
这段代码可以正常工作,但如果“myFilter”变量是一个太大的字符串,则不会。 例如,使用“FEATUREID IN(1,2,3,4…1000)”之类的过滤器,我得到的HTTP 414URI太长

我的问题是:当OpenLayers 5尝试刷新地图层时,有没有办法强制它使用POST请求而不是GET请求

我有一些变通的想法,比如构建一个较小的过滤器,在数据库端为这个过滤器准备一个视图,或者在数据库端进行预处理,但如果我可以简单地发送POST请求,这将非常容易

如有任何帮助或建议,将不胜感激:-)


非常感谢。Geoserver可以将要素id发布为图层的特性。因此,您不必使用FEATUREID。您可以使用CQL_过滤器而不是FEATUREID

http://locahost:8080/?CQL_FILTER=id BETWEEN 1 AND 1000

刚找到这篇文章,经过快速测试,它看起来可以工作,即使它适用于OpenLayers 3。但是,如果有人想让POST请求更容易,或者通过OpenLayers内部的任何配置使其自动化,我认为:-)谢谢@feyzullah,我知道我可以以多种方式和其他属性使用CQL_过滤器。我将“IN(1,2,3,4,5…1000)”作为示例,但在实际使用中,根据应用于链接到层的其他数据的过滤器,id是随机的,而不是顺序的,因此过滤器更像“IN(4,9,27,59189456635…456897510256…”,在大多数情况下,IN子句太大,无法保留在URL参数中。