首页 文章

WMS / WFS服务器:我疯了自己写吗?

提问于
浏览
6

我是一个“自己动手”的那种人,但是我想确保我不会因为尝试咬掉比我能咀嚼更多的东西 .

我正在编写一个基于浏览器的 Map 应用程序,需要在最终用户的计算机上运行独立(无互联网连接) . 也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向某个localhost URL来访问它 .

我将在客户端使用MapLayers,服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理 Map 上的点击事件,在特定时间在 Map 上创建各种自定义对象,等等 .

对于服务器的“业务逻辑”部分,我很高兴使用带有python的paste / webob . 这是一个简单的基础架构,可以让我轻松地放入所有这些自定义逻辑 .

我一直在想客户端会与两台服务器进行通信:这个粘贴/ webob业务逻辑服务器,以及一台服务于WMS和WFS Map 元素的服务器 . 所以我看着MapServer和GeoServer处理 Map 部分......我不高兴 .

我不高兴,因为我不想在客户端机器上安装和担心“野兽” . 对于MapServer,我真的不想安装像Apache这样的成熟的Web服务器,并且必须处理CGI,PHP和MapScript . 对于GeoServer,可能(可能)安装Java,并处理GeoServer设置和管理的各种复杂性 .

部分原因只是学习曲线问题 . 如果我可以避免它,我'm not especially interested in learning the intricacies of either MapServer or GeoServer. I installed GeoServer, pointed it to some of my data, and was able to use the MapLayers preview built into GeoServer'很好的网络管理员来查看我的数据 . 但当我尝试使用我自己的GeoServer指向的MapLayers网页提供真实的数据时,我崩溃了GeoServer . 我可能会崩溃服务器只是从客户端发送一些可能是格式错误的请求对我来说是非常令人惊讶的 . 我可以深入研究GeoServer日志,试图弄清楚我做错了什么,但是......我真的不想花很多时间在那上面 .

所以,我正在考虑使用我已经拥有的粘贴/ webob服务器自己实现WMS和WFS接口的部分 . 事实上,我可能只需要WMS,因为我可以通过一个简单的自定义协议来处理矢量对象,我将这些协议传递给客户端,然后客户端可以使用OpenLayers直接创建和操作对象 .

我查看了WMS的规范和示例消息(在WFS上稍微少一点) . 我自己实现这个协议似乎并不那么困难,特别是因为在这种情况下我完全控制了客户端 - 这不像我需要能够充当通用的WMS或WFS服务器;我只需要让我自己的OpenLayers客户满意 .

我需要WMS服务器的两个主要功能是:

  • 从我提前创建的预渲染瓷砖商店中提供瓷砖(我将使用OpenStreetMap数据预渲染瓷砖并使用mapnik作为渲染引擎;我将使用普通的Google Map 样式瓷砖命名来存储和访问它们OpenLayers期望的方案)

  • 能够服务于这些图块的修改版本,其中我在本地存储的某些数据是在图块之上绘制的 . 例如,我可能在一个“图层”上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴一段时间 .

所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS消息对我来说就不那么重要了,在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都能正确投影等 . 我不需要为这些过度图层绘制花哨的宽街道或任何东西,只需简单的线条,图标和标签 . 拥有一个只有python的解决方案听起来很简单 .

我想如果我需要扩展到支持更多的WMS / WFS协议,或者进行更高级的透支,我可以在那时插入MapServer / GeoServer .

这里有陷阱我不考虑吗?

3 回答

  • 1

    Mapserver非常易于设置和学习 . 自己实现任何类型的渲染都需要很多更多的努力,你可能会发现很多意想不到的陷阱 .

    mapserver cgi应该足以满足您的需求 . 如果您需要一些非常具体的调整,那么mapscript可能很有用 .

    我认为如果你可以创建一个纯JavaScript应用程序,并且不用安装Web服务器(和 Map 服务器)就可能会很有趣 . 如果您只是需要浏览瓷砖马赛克,可能只能使用JavaScript(生成一个带有每个图块的单元格的html表) . 您可以使用JavaScript使用画布渲染点或多边形,并执行一些基本坐标转换以将地理点转换为像素 . 我认为Openlayers有这个功能 .

    EDIT: 我刚检查过,使用Openlayers你可以浏览本 Map 块,你可以渲染kml和其他一些vect数据 . 所以,我认为你应该试试Openlayers .

  • 1

    无需拥有wms / wfs . 你需要的是一个tile实现 . 基本上你应该有某种中央服务,或生成瓷砖的桌面服务 . 生成这些切片后,您只需将它们转换为“无实际网络服务器架构”文件系统即可 . 您可以创建符合///.png的目录结构,并从javascript调用它 .

    有关openstreetmap如何执行此操作的示例,请访问:http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example

  • 0

    您可能喜欢featureserver:http://featureserver.org/ . 它有自己的WFS . 我现在正在使用它 .

相关问题