Как заставить mapserver игнорировать фильтр?
У меня есть фильтр, который я не хочу использовать при запуске приложения, только для определенного действия. Я знаю, что уже есть вопрос по этому поводу, но это не помогает мне, я на самом деле не понимаю оба ответа.
Я был в логике "мой столбец = значение или 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 фильтр хорошо применен)
Может ли кто-нибудь помочь мне игнорировать мое состояние, пожалуйста?
1 ответ
Добавьте значение по умолчанию в блок VALIDATION, чтобы ваше значение по умолчанию равнялось пустой строке, а затем добавьте условие OR в блок FILER, который проверяет, является ли значение пустой строкой:
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.