Mapserver пространственная фильтрация - PullRequest
2 голосов
/ 25 августа 2009

Кто-нибудь знает, есть ли способ установить пространственный фильтр в файле карты для использования с обычными запросами, а не только с WMS или WFS? Мне нужно, чтобы этот пространственный фильтр был любым видом многоугольника, а не просто прямоугольником, потому что эти фильтры в нашей системе являются динамическими: пользователям разрешено рисовать многоугольники или выбирать их из слоев многоугольников. Это система, в которой пользователи используют устаревшее настольное приложение без возможностей карты, а только запрашивают у Mapserver изображения, поэтому я должен выполнить эту фильтрацию на стороне Mapserver

Проще говоря, приведем пример: у пользователей есть слои с данными, такими как названия улиц (обозначенные точки) и районы (полигоны). Одна из них может захотеть видеть только те улицы, которые попадают в район номер два, поэтому я хочу, чтобы Mapserver генерировал изображения, скрывающие остальные улицы. Конечно, в слое улиц нет информации о том, в каком районе находится улица

Некоторые вещи, которые помогут вам задать этот вопрос:

  • Запросы - это cgi, а не WMS, но я могу изменить это, если это поможет
  • Я не использую Mapscript и ни один клиент, такой как OpenLayers или uDig
  • Слои не имеют и не будут иметь атрибутных отношений
  • Я знаю о параметре FILTER в секции LAYER, но это только для фильтрации атрибутов
  • Я читал о «Фильтре кодирования» (входит в SLD), но не могу заставить его работать, и, похоже, только для WFS
  • Я видел CQL, но он не поддерживается в Mapserver напрямую, только через SLD

Как вы делаете пространственную фильтрацию для генерации изображений в Mapserver?

Спасибо

Ответы [ 2 ]

1 голос
/ 08 сентября 2016

Насколько я знаю, обычно существует два способа выполнить пространственный / непространственный запрос. Сначала используется кодировка фильтра, например, использование параметра в URL-адресе вызова wms. например HTTP: //.../mapserv карты = .. & пары = значение

Другой способ сделать это - использовать фильтр в теле запроса. Предположим, что вы можете отправить запрос на сервер, вы можете использовать фильтр для сложных пространственных / непространственных запросов в одном фильтре. Для более подробной информации, пожалуйста, смотрите страницу фильтра на картографическом сервере. Доступно несколько операций пространственного фильтра, таких как ограничение, пересечение и т. Д.

Фильтр внутри файла карты немного отличается, это предопределенный фильтр для источника данных. Это работает, когда у вас есть логика для фильтрации данных даже до того, как поступит запрос клиента (см. Дополнительную информацию по поисковому фильтру OGC, и CQL в настоящее время предназначен для GeoServer)

И SLD работает во время рендеринга, чтобы фильтровать данные. Он работает как с пространственным, так и с непространственным фильтром. Но он отражает только операцию getmap.

0 голосов
/ 08 января 2010

Вы можете использовать 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

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

...