我是一个“自己动手”的那种人,但我想确保自己不会因为尝试咬掉比我能咀嚼更多的东西。
我正在编写一个基于浏览器的地图应用程序,需要选择在最终用户的计算机上独立运行(无互联网连接)。也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向一些localhost URL来访问它。
我将在客户端使用MapLayers,服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的点击事件,在地图上创建各种自定义对象某些时候,等等。
对于服务器的“业务逻辑”部分,我很高兴使用带有python的paste / webob。这是一个简单的基础架构,可以让我轻松地放入所有这些自定义逻辑。
我一直在想客户端会与两台服务器进行通信:这个粘贴/ webob业务逻辑服务器,以及一台服务于WMS和WFS地图元素的服务器。所以我看着MapServer和GeoServer处理地图部分......我不高兴。
我不高兴,因为我不想在客户端计算机上安装和担心“野兽”。对于MapServer,我真的不想安装像Apache这样的成熟的Web服务器,并且必须处理CGI,PHP和MapScript。对于GeoServer,可能(可能)安装Java,并处理GeoServer设置和管理的各种复杂性。
部分原因只是学习曲线问题。如果我可以避免它,我对学习MapServer或GeoServer的复杂性并不是特别感兴趣。我安装了GeoServer,将其指向我的一些数据,并且能够使用GeoServer良好的Web管理员内置的MapLayers预览来查看我的数据。但当我尝试使用我自己的GeoServer指向的MapLayers网页提供真实的数据时,我崩溃了GeoServer。我可能会崩溃服务器只是从客户端发送一些可能是格式错误的请求对我来说是非常令人惊讶的。我可以深入挖掘GeoServer日志,试图弄清楚我做错了什么,但是......我真的不想花很多时间在那上面。
所以,我正在考虑使用我已经拥有的粘贴/ webob服务器自己实现部分WMS和WFS接口。事实上我可能只需要WMS,因为我可以通过一个简单的自定义协议来处理矢量对象,我将它传递给客户端,然后可以使用OpenLayers直接创建和操作对象。
我已经查看了WMS的规范和示例消息(在WFS上稍微少一些)。我自己实现这个协议似乎并不那么困难,特别是因为在这种情况下我完全控制了客户端 - 这不像我需要能够充当通用的WMS或WFS服务器;我只需要让我自己的OpenLayers客户满意。
我需要WMS服务器的两个主要功能是:
从我提前创建的预渲染磁贴存储中提供磁贴(我将使用OpenStreetMap数据预渲染磁贴并使用mapnik作为渲染引擎;我将使用正常情况存储和访问它们OpenLayers期望的Google地图样式图块命名方案
能够为这些图块的修改版本提供服务,其中我在本地存储的某些数据是在图块之上绘制的。例如,我可能在一个“图层”上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴在一段时间内。
所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS对我来说就不那么重要了消息,并在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都正确投影等。我不需要绘制花哨的宽街道或任何这些超层,只需简单的线条,图标和也许标签。拥有一个只有python的解决方案听起来很简单。
我想如果我需要扩展到支持更多的WMS / WFS协议,或者进行更好的透支,那么我可以在那时插入MapServer / GeoServer。
这里有陷阱我不考虑吗?
答案 0 :(得分:1)
Mapserver非常易于设置和学习。自己实现任何类型的渲染都需要更多的努力,你可能会发现很多意想不到的陷阱。
mapserver cgi应该足以满足您的需求。如果您需要一些非常具体的调整,那么mapscript可能很有用。
我认为如果您可以创建一个纯JavaScript应用程序,并且自己安装Web服务器(和地图服务器),那将会很有趣。如果您只是需要浏览瓷砖马赛克,可能只能使用JavaScript(生成一个带有每个图块的单元格的html表)。您可以使用JavaScript使用画布渲染点或多边形,并执行一些基本坐标转换以将地理点转换为像素。我认为Openlayers具有此功能。
编辑:我刚检查过,Openlayers你可以浏览本地图块,你可以渲染kml和其他一些vect数据。所以,我认为你应该试试Openlayers。
答案 1 :(得分:1)
无需拥有wms / wfs。你需要的是一个tile实现。基本上你应该有某种中央服务,或生成瓷砖的桌面服务。生成这些切片后,您只需将它们转换为“无实际网络服务器架构”文件系统即可。您可以创建符合/{x}/{y}/{z}.png的目录结构,并从javascript调用它。
可以在此处找到openstreetmap如何执行此操作的示例:http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example
答案 2 :(得分:0)
您可能喜欢featureserver:http://featureserver.org/。 它有自己的WFS。我现在正在使用它。