首页 文章

是否正在使用MapServer在运行时合并多个MapLayers以与Leaflet一起使用?

提问于
浏览
0

MY PROBLEM

我们现在正在做一个项目,我们必须在Web应用程序(带有 Leaflet )中显示一个巨大的图像(包含化学化合物和元素,因此不是地理参考) . 图像本身是Adobe Illustrator-File,因此它实际上是一堆矢量图形 . 为了简单起见,我们将其转换为大的.png(27.000x19.000像素),然后使用 MapTiler 为Leaflet创建所需的MapRessources,轻松包含在 TileLayer 中 .

Problem 是:用户需要能够动态添加和删除 Map 的不同图层(==过滤器)以显示图片中更多或更少的信息 . 因此,我们首先在Illustrator-File中创建这些图层,然后将每个图层导出为自己的透明.png文件,mapTiled并将其作为自己的Leaflet-Layer包含在内 .

现在,我们有6个滤镜层和两个用于背景的基础层和叠加层 . 这意味着当所有过滤器都被激活时(这是默认值),我们将8个Leaflet-Layers一次堆叠在一起 . 您可以想象,这会在浏览器中导致一些性能问题,因为Leaflet必须为每个缩放或拖动操作加载和渲染8个图层及其所有图块(取决于屏幕大小一次最多25个) . 它仍然处于一个不可能承受的地步,但我们期待更多的滤波器来,因此希望在未来保持可扩展性 .

这意味着我们将以某种方式改变我们生成图层的方法 .

MY APPROACH SO FAR

由于我们实际上有一个基于矢量图形的 Map ,我认为必须有更好的选择 . 但似乎我们有一个罕见的要求案例,因为我的研究大多以死胡同结束,特别是因为大多数案例只涵盖真实的地理 Map ,但我们所拥有的是栅格 Map . 我还考虑过以某种方式将 Map 放入GeoJSON或直接用SVG重绘它,但由于我们在 Map 上有很多单个元素(> 20k),我不认为这会表现得更好 .

所以我需要继续使用Bitmaps,因此我的主要目标很简单:我想通过将当前激活的Filter的tile合并为一个单独的.png来减少层数,然后将其传递到一层内的传单 . 我现在花了几个小时研究,但我总是遇到死胡同,因为我们似乎有一个罕见的需求案例(特别是因为大多数人处理地理参考数据,而不是自定义栅格 Map ) .

所以现在,我可以想到两个不同的选择:

  • 为每个过滤器组合创建一个层 . 这意味着我们必须创建2 ^ n层,所以这只能达到一定数量的过滤器(这可能会增加) - 因此,我更喜欢另一种解决方案(这只是最后一种情况)

  • 使用 MapServer 并以某种方式导入我的图层 . 然后我们可以将运行时的图层与查询合并(我读到 Union Layer here),因此只传递一个图层到传单 .

MY QUESTION

我完全没有使用 MapServer 的经验,因此我甚至不确定这是否是一个用例,或者它是否能够做到这一点,更重要的是:如果它真的会给我们一个性能提升,因为它可能需要大量的逻辑服务器端 .

在我开始花费另外几个小时来尝试这个之前:如果这是一个好主意或者我是否完全误解了 MapServer ,那么已经使用 MapServer 的人可以给我一些反馈吗?

此外,如果有人为我提供另一种选择或想法,欢迎您分享,我对每一个输入感激不尽 . :)

提前致谢!

1 回答

  • 1

    您可能希望查看OpenLayers,您可以在其中显示栅格和矢量图层的混合 . 另一个选项可能是mapcache mapserver项目的tile缓存引擎部分 . 这能够进行瓷砖的垂直组装 . 因此,如果你有8层的情况,你可以要求mapcache将所有8个瓷砖堆叠成一个瓷砖 . 你可以给它一个堆栈列表,它会为你处理它 . 您也可以使用mapserver执行此操作 . 区别在于mapcache是一个轻量级的apache模块,只适用于tile,可能会快一点 . Mapserver是一个cgi-bin过程,可以有效地渲染和组合栅格图层,但可能没有mapcache快速简单组装瓷砖 .

相关问题