Я - парень типа "сделай сам", но я хочу убедиться, что я не собираюсь делать это сам, пытаясь откусить больше, чем я могу жевать.
Я пишу картографическое приложение на основе браузера, которое должно иметь возможность запуска автономно (без подключения к Интернету) на компьютере конечного пользователя. То есть приложение - это своего рода сервер, который во многих случаях будет установлен на компьютере конечного пользователя, а браузер будет указывать на какой-то локальный 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в то время.
Есть ли здесь подводные камни, которые я не рассматриваю?