如何告诉 mapserver 忽略过滤器?
How to tell mapserver to ignore a filter?
我有一个过滤器,我不想在启动应用程序时使用它,它只想在特定操作上使用。我知道已经有一个关于这个的 question 但这对我没有帮助,我实际上不理解这两个答案。
我按照 "my column = value or 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}
});
但是我的所有数据集都被返回了。 (如果我在我的 mapfile 中删除 '%ct%' = '%ct%'
,过滤器就会很好地应用)
谁能帮我忽略我的情况?
在 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。
我有一个过滤器,我不想在启动应用程序时使用它,它只想在特定操作上使用。我知道已经有一个关于这个的 question 但这对我没有帮助,我实际上不理解这两个答案。
我按照 "my column = value or 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}
});
但是我的所有数据集都被返回了。 (如果我在我的 mapfile 中删除 '%ct%' = '%ct%'
,过滤器就会很好地应用)
谁能帮我忽略我的情况?
在 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。