Динамический MapServer на OpenLayers - PullRequest
       58

Динамический MapServer на OpenLayers

0 голосов
/ 01 сентября 2010

Я борюсь со специфической настройкой: у нас есть слой WMS в OpenLayers (в веб-интерфейсе GeoExt), вызывающий строку MapServer (например, http://mydomain/cgi-bin/mapserv.exe?map=someMapFile.map&etcetc).

Теперь нам нужно разделитьнабор данных в несколько слоев. Мы попытались создать экземпляры n отдельных слоев WMS, и это слишком медленно, поэтому мы пытаемся найти довольно простое решение: создать пользовательский mapFile, содержащий только необходимые слои. Этот динамический mapfile возвращается сервисом:

http://mydomain/myservice/get?layers=listoflayers,otherparams,etc, который возвращает путь к пользовательскому файлу карты. Это решение очень простое и эффективное.

Так что теперь мы должны обновить слой WMS, чтобы заменить этот файл карты наfly, не перезагружая всю страницу.

Итак, мои вопросы:

  • Возможно ли это?

  • Это нормально?иметь отдельный список слоев (не тот, который предлагается по умолчанию OpenLayers) и вызвать событие "changeLayers"? Есть ли примеры такой настройки?

Заранее спасибо заЛюбые намеки!

Мулон

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

Для этого вам не нужны динамические файлы карт. Запрос GetMap имеет параметр LAYERS.

LAYERS = layer_list: разделенный запятыми список из одного или нескольких слоев карты. Необязательно, если присутствует параметр SLD. (http://mapserver.org/ogc/wms_server.html)

Или вы делаете что-то еще, кроме выбора подмножества слоев?

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

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

Например, в месте, которое хранится в таблице в базе данных, есть 1 миллион дорог.Чтобы опубликовать дорожный объект, вы могли бы иметь несколько слоев для этого набора данных.Слои могут быть отфильтрованы по году, по типу или по желанию на основе атрибута или пространственных отношений.Это происходит при использовании фильтра в вашем блоке слоя или файле слоя при разборе строки для запроса через соединение с базой данных.Имя слоев может быть динамическим, когда вы генерируете строку запроса, поэтому я думаю, что это, возможно, то, что вы ищете.

Так что после этого, когда вас интересует, скажем, межгосударственная дорога, вместо использования конечной точки WMSдля всей группы слоев в вашем запросе WMS вы можете выполнять запросы только к межгосударственному слою, используя в запросе «layer = interstate_road».Тогда будет возвращена только межштатная дорога, а не полное сканирование / рендеринг всего набора данных.

И если вы не возражаете читать немного больше, в MapServer также есть пространственный, непространственный фильтр.Например, кодировка фильтра предоставит вам пространственный / непространственный запрос на уровне объекта.И это также динамично, потому что фильтр находится в URL-адресе запроса, который также можно динамически изменять.

...