Mapserver的临时切片缓存

时间:2015-06-19 21:27:21

标签: mapping openlayers gis mapserver

我在谷歌和StackOverflow上搜索是否有人能解决我的问题,但没有找到任何有同样问题的人。

所以,目前我正在运行安装了Mapserver的Debian机器。服务器还运行webserver以通过浏览器显示地图数据。地图的生成是动态的,基于数据库中的图层定义我在PHP中构建了mapfile,并根据生成的PHP向用户显示了地图。数据在数据库中定义,并作为SHP文件(两者合并在单个mapfile中)。

它是完全动态的,我的意思是用户可以启用/禁用任何图层或单击多边形内部(在地图上选择一些点)它为选择着色(根据选择生成新的mapfile并重新生成切片) )。

因此,从选择某个区域到着色所选项目的所有代码的执行,有时需要花费太多时间才能获得良好的用户体验。

对于解决方案,我想使用某种临时图块缓存,可以用于单个用户,并且当用户在地图上选择某些项目或启用/时能够删除它的内容禁用其中一个图层。

P.S。我已经完成了Mapserver文档提供的所有优化。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

听起来我觉得你的问题不会受到服务器端缓存的帮助。如果所有图块都依赖于用户选择,那么每次进行交互时,您都会生成一堆新图块。

我一直在使用MapCache来解决类似的问题,我正在渲染一个tileset以响应用户查询。但我已将我的磁贴分解为多个逻辑层,我在浏览器端进行合成。这让我可以在服务器端缓存各种查询的磁贴,并极大地加快了性能。我确实将缓存播种到缩放级别12,我需要使用BerkeleyDB缓存类型来防止inode耗尽。

我使用Leaflet.js进行浏览器端渲染,但您也应该考虑使用OpenLayers。

在查看源代码后,我还有其他一些想法。

看起来你每次都以相同的方式绘制每一层。是对的吗?也就是说,特定层的样式和谓词永远不会改变。如果他们选择了图层,则每个用户都以相同的方式查看该图层的图像。但是,基于OpenLayers控件,您显示的图层组合确实会发生变化吗?如果是这样的话,您就不需要在服务器上进行每用户缓存。相反,使用每层缓存,并让用户的浏览器找出客户端缓存。

找到慢层的快速技术就是将它们全部转化。然后逐个重新启用它们以找到罪魁祸首。从命令行调用Mapserver,并为运行计时,以便通过从Web服务器运行它来获得更高的精确度。

您提到您在Google 3857中提供图像,而图层位于Gauss-Kruger / EPSG 3912中。动态重新投影此内容非常昂贵。在飞行中重新投影栅格是非常昂贵的。如果可以,您应该提前重新投影它们,并将它们存储在3857中(添加一个额外的几何列)。

我不知道DOF文件是什么 - 也许数字障碍文件?也许也可以将DOF文件预加载到PostGIS中?这将消除你认为有问题的两件。

查看PostGIS正在执行的SQL查询,并确保它们使用索引

在任何情况下,我认为这些单独的图层应该进入MapCache。 MapCache项目负责人Here is a video of a September 2014 talk