Mapserver пространственная фильтрация
Кто-нибудь знает, есть ли способ установить пространственный фильтр в файле карты для использования с обычными запросами, а не только с WMS или WFS? Мне нужно, чтобы этот пространственный фильтр был любым видом многоугольника, а не просто прямоугольником, потому что эти фильтры в нашей системе являются динамическими: пользователям разрешено рисовать многоугольники или выбирать их из слоев многоугольников. Это система, в которой пользователи используют устаревшее настольное приложение без возможностей карты, а только запрашивают у Mapserver изображения, поэтому я должен выполнить эту фильтрацию на стороне Mapserver.
Проще говоря, приведем пример: у пользователей есть слои с данными, такими как названия улиц (отмеченные точки) и районы (полигоны). Одна из них может захотеть видеть только те улицы, которые попадают в район номер два, поэтому я хочу, чтобы Mapserver генерировал изображения, скрывающие остальные улицы. Конечно, в слое улиц нет информации о том, в каком районе находится улица
Некоторые вещи, которые помогут вам задать этот вопрос:
- Запросы являются CGI, а не WMS, но я мог бы изменить это, если это поможет
- Я не использую Mapscript и ни один клиент, такой как OpenLayers или uDig
- Слои не имеют и не будут иметь отношения атрибута
- Я знаю о параметре FILTER в разделе LAYER, но это только для фильтрации атрибутов
- Я читал о "Фильтре кодирования" (включен в SLD), но не могу заставить его работать, и кажется, только для WFS
- Я видел CQL, но он не поддерживается в Mapserver напрямую, только через SLD
Как вы делаете пространственную фильтрацию для генерации изображений в Mapserver?
Спасибо
2 ответа
Насколько я знаю, есть два способа сделать пространственный / непространственный запрос. Сначала используется кодировка фильтра, например, использование параметра в URL-адресе вызова wms. например, http:/mapserv?map=..¶m=value
Другой способ сделать это - использовать фильтр в теле запроса. Предположим, что вы можете отправить запрос на сервер, вы можете использовать фильтр для сложных пространственных / непространственных запросов в одном фильтре. Для получения более подробной информации, пожалуйста, смотрите страницу фильтра mapserver. Доступно несколько операций пространственного фильтра, таких как: содержать, пересекать и т. Д.
Фильтр внутри файла карты немного отличается, это предопределенный фильтр для источника данных. Это работает, когда у вас есть логика для фильтрации данных даже до того, как поступит запрос клиента (см. Дополнительную информацию по поисковому фильтру OGC, и CQL в настоящее время предназначен для GeoServer)
И SLD работает во время рендеринга, чтобы фильтровать данные. Он работает как с пространственным, так и с непространственным фильтром. Но это только отражает операцию getmap.
Вы можете использовать WMS-запросы для возврата функций в ограничивающей рамке.
См. http://mapserver.org/ogc/wms_server.html
BBOX = minx, miny, maxx, maxy: Углы ограничительной рамки (внизу слева, вверху справа) в единицах SRS
Запрос будет похож на:
В качестве альтернативы вы можете создавать запросы в пространственной базе данных (если вы ее используете), передавать идентификаторы объектов и фильтровать их.