Как заставить 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.

Другие вопросы по тегам