Сервер WMS / WFS: я сумасшедший, чтобы написать свой собственный? - PullRequest
6 голосов
/ 17 марта 2011

Я - парень типа "сделай сам", но я хочу убедиться, что я не собираюсь делать это сам, пытаясь откусить больше, чем я могу жевать.

Я пишу картографическое приложение на основе браузера, которое должно иметь возможность запуска автономно (без подключения к Интернету) на компьютере конечного пользователя. То есть приложение - это своего рода сервер, который во многих случаях будет установлен на компьютере конечного пользователя, а браузер будет указывать на какой-то локальный URL-адрес для доступа к нему.

Я буду использовать MapLayers на стороне клиента, а на стороне сервера будет набор пользовательских логик, специфичных для приложения, таких как обработка событий щелчка на карте определенными пользовательскими способами, создание различных пользовательских объектов на карте в определенные времена и т. д.

Для серверной части "бизнес-логика" я рад использовать paste / webob с python. Это простая инфраструктура, которая позволяет мне легко внедрить всю эту пользовательскую логику.

Я думал, что клиент будет взаимодействовать с двумя серверами: этим сервером бизнес-логики вставки / webob и сервером только для обслуживания элементов карты WMS и WFS. Поэтому я смотрел на MapServer и GeoServer для обработки частей карты и ... я не доволен.

Я не счастлив, потому что я не хочу устанавливать и беспокоиться о «звере» на клиентских машинах. Для MapServer я не хочу устанавливать полноценный веб-сервер, такой как Apache, и должен иметь дело с CGI, PHP и MapScript. Для GeoServer существует (возможно) установка Java и работа с различными сложностями настройки и администрирования GeoServer.

Отчасти это просто вопрос кривой обучения. Если я могу избежать этого, мне не особенно интересно изучать тонкости MapServer или GeoServer. Я установил GeoServer, указал на некоторые из моих данных и смог использовать предварительный просмотр MapLayers, встроенный в приятного веб-администратора GeoServer, для просмотра моих данных. Но когда я попытался предоставить данные для реального использования моей собственной веб-страницы MapLayers, указывающей на GeoServer, я потерпел крах GeoServer. Меня удивило то, что я мог потерпеть крах на сервере, просто посылая предположительно искаженные запросы от клиента. И я мог бы копаться в журналах GeoServer, чтобы попытаться выяснить, что я сделал не так, но ... я действительно не хочу тратить на это много времени.

Итак, я рассматриваю возможность реализации частей интерфейса WMS и WFS, просто используя сервер вставки / webob, который у меня уже есть. На самом деле, возможно, мне нужен только WMS, поскольку я могу обрабатывать векторные объекты с помощью простого пользовательского протокола, который я создаю для передачи данных клиенту, который затем может создавать объекты и манипулировать ими напрямую с помощью OpenLayers.

Я посмотрел спецификации и примеры сообщений для WMS (и чуть меньше для WFS). Кажется, не просто сложно реализовать этот протокол самостоятельно, особенно потому, что в этом случае у меня полный контроль над клиентом - мне не нужно иметь возможность действовать как универсальный сервер WMS или WFS; Я просто должен сделать своего клиента OpenLayers счастливым.

Две основные способности, которые мне нужны для сервера WMS:

  • Обслуживание листов из хранилища предварительно созданных плиток, которые я создал заранее (я буду предварительно отображать плитки, используя данные OpenStreetMap и mapnik в качестве механизма визуализации; я буду хранить и получать к ним доступ, используя обычный Схема именования плиток в стиле Google Карт, которую ожидает OpenLayers)

  • Возможность сервера модифицировать версии этих плиток, где определенные данные, которые я храню локально, отображаются поверх плиток. Например, у меня может быть, скажем, 10000 точек на одном «слое» и 10000 полигонов на другом слое, и когда пользователь активирует эти слои, я буду обслуживать те же самые базовые листы, но когда я буду обслуживать эти листы, я буду рендерить эти дополнительные функции поверх них, и, возможно, я реализую простую схему кэширования, чтобы удерживать эти перерисованные фрагменты в течение некоторого времени.

Итак, мой вопрос: хотя я знаю, что существуют инструменты, которые делают эти вещи (MapServer, GeoServer, TileCache и другие), я на самом деле чувствую, что мне просто не нужно просто отвечать на некоторые простые WMSсообщения, и сделайте это дополнительное перерисовывание своих плиток в Python, убедившись, что все проецируется правильно, и т. д. Мне не нужно рисовать причудливые широкие улицы или что-то еще для этих слоев, только простые линии, значки ивозможно этикетки.Конечно, звучит красиво и просто, если у вас есть решение только для Python.

Я полагаю, что если мне когда-нибудь потребуется расширить поддержку протокола WMS / WFS или выполнить более сложное перерисовывание, я могу просто вставить MapServer / GeoServerв то время.

Есть ли здесь подводные камни, которые я не рассматриваю?

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Нет необходимости иметь wms / wfs. Что вам нужно, это реализация плитки. По сути, у вас должна быть какая-то центральная служба или служба рабочего стола, которая генерирует плитки. После того как эти плитки сгенерированы, вы можете просто преобразовать их в свою файловую систему «без реальной веб-архитектуры». Вы можете создать структуру каталогов, которая соответствует / e-mail: //uliarID и вызывать ее из javascript.

Пример того, как openstreetmap делает это, можно найти здесь: http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example

1 голос
/ 22 марта 2011

Mapserver очень прост в настройке и изучении. Реализация любого вида рендеринга самостоятельно потребует гораздо больших усилий, и вы, вероятно, найдете много неожиданных ловушек.

mapserver cgi должно быть достаточно для ваших нужд. Если вам нужен какой-то очень специфический твик, то может быть полезен mapscript.

Думаю, было бы интересно, если бы вы могли создать приложение на чистом JavaScript и избавить себя от установки веб-сервера (и картографического сервера). Если вам просто нужно было просмотреть мозаику плиток, возможно, вы могли бы сделать это просто с помощью JavaScript (сгенерировать HTML-таблицу с ячейкой для каждой плитки). Вы можете визуализировать точки или полигоны с помощью JavaScript, используя холст и выполняя некоторые базовые преобразования координат для перевода географических точек в пиксели. Я думаю, что Openlayers обладают такой функциональностью.

РЕДАКТИРОВАТЬ: Я только что проверил и с Openlayers вы можете просматривать локальные плитки, и вы можете визуализировать kml и некоторые другие данные vect. Итак, я думаю, вы должны попробовать Openlayers.

0 голосов
/ 01 декабря 2013

Вам может понравиться сервер функций: http://featureserver.org/. У него есть свой WFS. Я использую это прямо сейчас.

...