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

Запрос будет похож на:

http://my.host.com/cgi-bin/mapserv?map=mywms.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=prov_bound&STYLES=&SRS=EPSG:4326&BBOX=-173.537,35.8775,-11.9603,83.8009&WIDTH=400&HEIGHT=300&FORMAT=image/png

В качестве альтернативы вы можете создавать запросы в пространственной базе данных (если вы ее используете), передавать идентификаторы объектов и фильтровать их.

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