我有一个过滤器,我不想在应用程序启动时使用,只在某个操作上使用。我知道已经有一个关于这个的问题,但是它没有帮助我,实际上我不理解两个答案。
我是在"我的列=值或1 = 1"的逻辑,以获得我所有的数据集,而不仅仅是过滤器,如果它不调用。
我是这么写的:
FILTER (([ct]='%ct%') or '%ct%' = '%ct%')
VALIDATION
'ct' '^[a-zA-Z-]+$'
END
我在Openlayers 3上用参数
命名我的图层 url: 'http://localhost:5000/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/essai.map&SERVICE=WMS&VERSION=1.1.1%20&REQUEST=GetCapabilities',
serverType: 'mapserver',
params: {'LAYERS': 'aisdata', 'ct':'myvalue', 'TILED': true}
});
但是返回了所有的数据集。(如果我删除'%ct%' = '%ct%'
在我的mapfile,过滤器很好地应用)
有谁能帮我忽略我的病情吗?
在VALIDATION块中添加默认值,使您的值默认为空字符串,然后在filter块中添加OR条件,检查值是否为空字符串:
VALIDATION
'ct' '^[a-zA-Z-]+$'
'default_ct' '' # <-- ct will be a empty string if not provided via URL
END
FILTER (([ct]='%ct%') or ('%ct%' = '') )
如果数据库列ct
确实具有数字类型,则前面的过滤器将产生内部服务器错误,因为您不能将空字符串与数字进行比较。在这种情况下,使用数字值作为默认值,例如0或-1。