我正在编写一个基于浏览器的地图应用程序,需要在最终用户的机器上独立运行(无需互联网连接)。也就是说,该应用程序是某种服务器,在许多情况下会安装在最终用户的机器上,并且浏览器将指向某个本地主机URL以进行访问。
我将在客户端使用MapLayers,而服务器端将具有许多特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的单击事件,在某些时候创建各种自定义对象等等。
对于服务器的“业务逻辑”部分,我很高兴使用Python的paste/webob。这是一种简单的基础设施,可以轻松地让我放置所有这些自定义逻辑。
我曾经认为客户端将与两个服务器通信:这个paste/webob业务逻辑服务器和一个仅用于提供WMS和WFS地图元素的服务器。因此,我正在查看MapServer和GeoServer来处理地图部分,但我并不满意。
我不满意的原因是,我不想在客户机器上安装和担心一个“野兽”。对于MapServer,我不想安装像Apache这样的完整的Web服务器,并且必须处理CGI和PHP以及MapScript。对于GeoServer,有(潜在的)安装Java和处理GeoServer设置和管理的各种复杂性。
部分原因是学习曲线问题。如果可以避免,我并不特别感兴趣学习MapServer或GeoServer的复杂性。我安装了GeoServer,将其指向我的一些数据,并能够使用内置在GeoServer中的MapLayers预览来查看我的数据。但是当我尝试使用指向GeoServer的自己的MapLayers网页为实际服务提供数据时,我使GeoServer崩溃了。我能够通过挖掘GeoServer日志来尝试找出我的错误,但是...我不想花费太多时间在此上。
因此,我正在考虑仅使用我已经拥有的paste/webob服务器自己实现WMS和WFS接口的某些部分。事实上,我可能只需要WMS,因为我可能会通过我制作的简单自定义协议处理矢量对象,该协议将数据传递给客户端,客户端可以直接使用OpenLayers创建和操作对象。
我查看了WMS(和较少的WFS)的规范和示例消息。似乎很容易自己实现此协议,特别是因为在这种情况下我完全控制客户端--不像需要能够充当通用WMS或WFS服务器;我只需使自己的OpenLayers客户端满意即可。
我需要WMS服务器具有的两个主要功能是:
使用我提前创建的预渲染瓦片存储来提供瓦片服务(我将使用OpenStreetMap数据和mapnik作为渲染引擎进行预渲染,并且我将使用OpenLayers期望的普通Google Maps样式瓦片命名方案进行存储和访问)
能够提供修改过的瓦片版本,其中某些本地存储的数据会绘制在瓦片上。例如,我可能有一层包含10000个点,另一层包含10000个多边形,当用户激活这些层时,我将提供相同的基础瓦片,但在提供这些瓦片时,我将在其上绘制这些附加功能,并且可能会实现一个简单的缓存方案,以保留这些超渲染瓦片一段时间。
所以我的问题是:尽管我知道存在可以做到这些事情的现有工具(MapServer、GeoServer、TileCache等),但我实际上觉得对于我来说,只需响应一些简单的WMS消息,并在Python中自己处理这些附加绘制,确保所有东西都被正确投影等,比使用这些工具更省事。对于这些覆盖层,我不需要绘制花哨的宽街道或其他什么,只需要简单的线条、图标和标签。使用纯Python解决方案听起来确实很不错。
我想,如果我将来需要扩展支持更多的WMS/WFS协议,或者进行更高级的覆盖绘制,我可以在那时插入MapServer/GeoServer。
这里有没有我没有考虑到的缺陷?