M K*_*atz 6 paste mapserver wms geoserver webob
我是一个"自己动手"的那种人,但是我想确保我不会因为尝试咬掉比我能咀嚼更多的东西.
我正在编写一个基于浏览器的地图应用程序,需要在最终用户的计算机上运行独立(无互联网连接).也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向某个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作为渲染引擎;我将使用普通的Google Maps样式瓷砖命名方案存储和访问它们那个OpenLayers预计)
能够服务器修改这些瓦片的版本,其中我在本地存储的某些数据被绘制在瓦片之上.例如,我可能在一个"图层"上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴一段时间.
所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS消息对我来说就不那么重要了,在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都能正确投影等.我不需要为这些过度图层绘制花哨的宽街道或任何东西,只需简单的线条,图标和标签.拥有一个只有python的解决方案听起来很简单.
我想如果我需要扩展到支持更多的WMS/WFS协议,或者进行更高级的透支,我可以在那时插入MapServer/GeoServer.
这里有陷阱我不考虑吗?
地图服务器非常容易设置和学习。自己实现任何类型的渲染都需要付出更多的努力,并且您可能会发现很多意想不到的陷阱。
mapserver cgi 应该足以满足您的需求。如果您需要一些非常具体的调整,那么 Mapscript 可能会很有用。
我认为如果您可以制作一个纯 JavaScript 应用程序,并且无需安装 Web 服务器(和地图服务器),那会很有趣。如果您只需要浏览图块马赛克,也许您只需使用 JavaScript 即可完成(生成一个 html 表格,每个图块都有一个单元格)。您可以使用 JavaScript 渲染点或多边形,使用画布并进行一些基本的坐标转换,将地理点转换为像素。我认为 Openlayers 有这个功能。
编辑:我刚刚检查过,使用Openlayers您可以浏览本地图块,并且可以渲染 kml 和其他一些 vect 数据。所以,我认为你应该尝试一下 Openlayers。
| 归档时间: |
|
| 查看次数: |
4211 次 |
| 最近记录: |