在 LIKE CQL 过滤器中设置通配符会制动过滤器
Setting wildcard in LIKE CQL filter brakes the filter
这是我在 Openlayers 3.9.0 中的过滤器
var cqlFilter = "name='testpoint9'";
var urlTemplate = 'http://localhost:5550/geoserver/mymap/wfs?
var sourceVector = new ol.source.Vector({
service=WFS&version=1.0.0&request=GetFeature&typeName=mymap:layer&CQL_FILTER={{CQLFILTER}}&outputFormat=application/json';
loader : function (extent) {
var url = urlTemplate.replace('{{CQLFILTER}}', cqlFilter);
$.ajax(url, {
type: 'GET',
success: function(response) {
var res = response.responseText;
var geojsonFormat = new ol.format.GeoJSON();
sourceVector.addFeatures(geojsonFormat.readFeatures(response));
}
})
};
strategy : new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}));
})
function changeFilter() {
var featsToRemove = layerVector.getSource().getFeatures();
for (var f=0;f<featsToRemove.length;f++)
{
layerVector.getSource().removeFeature(featsToRemove[f]);
}
cqlFilter = "name LIKE 'p'";
sourceVector.clear(true);
}
changeFilter
函数在用户点击按钮后被调用。更改 cqlFilter
全局变量并重新加载功能。
问题是 CQL 过滤器现在可以工作 "name LIKE 'p'"
,但是如果我尝试添加通配符来查找以 p "name LIKE 'p%'"
开头的名称,这将无法工作,而且我也没有得到任何错误消息。
我该如何解决这个问题?
谢谢
尝试为您的 cql 过滤器使用 encodeURIComponent 函数。像这样:
cqlFilter = "name LIKE 'p%'";
encodedFilter = encodeURIComponent(cqlFilter);
这是我在 Openlayers 3.9.0 中的过滤器
var cqlFilter = "name='testpoint9'";
var urlTemplate = 'http://localhost:5550/geoserver/mymap/wfs?
var sourceVector = new ol.source.Vector({
service=WFS&version=1.0.0&request=GetFeature&typeName=mymap:layer&CQL_FILTER={{CQLFILTER}}&outputFormat=application/json';
loader : function (extent) {
var url = urlTemplate.replace('{{CQLFILTER}}', cqlFilter);
$.ajax(url, {
type: 'GET',
success: function(response) {
var res = response.responseText;
var geojsonFormat = new ol.format.GeoJSON();
sourceVector.addFeatures(geojsonFormat.readFeatures(response));
}
})
};
strategy : new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}));
})
function changeFilter() {
var featsToRemove = layerVector.getSource().getFeatures();
for (var f=0;f<featsToRemove.length;f++)
{
layerVector.getSource().removeFeature(featsToRemove[f]);
}
cqlFilter = "name LIKE 'p'";
sourceVector.clear(true);
}
changeFilter
函数在用户点击按钮后被调用。更改 cqlFilter
全局变量并重新加载功能。
问题是 CQL 过滤器现在可以工作 "name LIKE 'p'"
,但是如果我尝试添加通配符来查找以 p "name LIKE 'p%'"
开头的名称,这将无法工作,而且我也没有得到任何错误消息。
我该如何解决这个问题?
谢谢
尝试为您的 cql 过滤器使用 encodeURIComponent 函数。像这样:
cqlFilter = "name LIKE 'p%'";
encodedFilter = encodeURIComponent(cqlFilter);