0

我有一个过滤器,我不想在应用程序启动时使用,只能在某个操作上使用。我知道已经有一个关于这个的问题,但这对我没有帮助,我实际上不明白这两个答案。

我采用“我的列 = 值或 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%'在我的地图文件中删除,过滤器应用得很好)

谁能帮我忽略我的病情?

4

1 回答 1

1

在 VALIDATION 块中添加一个默认值,以便您的值默认为空字符串,然后在 FILER 块中添加一个 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。

于 2016-10-20T10:18:12.640 回答