我的问题
我们现在正在做一个项目,我们必须在 Web 应用程序中显示一个巨大的图像(包含化学化合物和元素,因此没有地理参考)作为地图(带有Leaflet
)。图像本身是一个 Adobe Illustrator 文件,因此它实际上是一堆矢量图形。为方便起见,我们只是将其转换为一个大的 .png(27.000x19.000 像素),然后用于MapTiler
为 Leaflet 创建所需的 MapRessources,轻松包含在TileLayer
.
问题是:用户需要能够动态添加和删除地图的不同图层(== 过滤器)以显示图片中或多或少的信息。所以我们首先在 Illustrator-File 中创建了这些图层,然后将每个图层导出为自己的透明 .png-File,将其映射并包含为自己的 Leaflet-Layer。
现在,我们有 6 个过滤层和另外两个用于背景的基础层和一个叠加层。这意味着当所有过滤器都被激活(这是默认设置)时,我们有 8 个 Leaflet-Layers 一次堆叠在一起。可以想象,这会在浏览器中引起一些性能问题,因为 Leaflet 必须为每个缩放或拖动动作加载和渲染 8 个层及其所有 Tiles(取决于屏幕大小,一次最多 25 个)。它仍然处于无法承受的地步,但我们预计会有更多过滤器出现,因此希望在未来保持可扩展性。
这意味着我们将不得不以某种方式改变我们生成图层的方法。
到目前为止我的方法
由于我们实际上有一个基于矢量图形的地图,我认为必须有更好的选择。但似乎我们有一个罕见的需求案例,因为我的研究大多以死胡同结束,特别是因为大多数案例只涵盖真实的地理地图,但我们拥有的是栅格地图。我还考虑过以某种方式将地图放入 GeoJSON 或以某种方式直接使用 SVG 重新绘制它,但由于我们在地图上有很多单个元素(> 20k),我认为这不会表现得更好。
所以我有点需要保留位图,因此我的主要目标很简单:我想通过将当前激活的过滤器的图块合并到一个单个 .png 中来减少层数,然后将其传递到 ONE 层中的传单。我现在花了几个小时研究,但我总是遇到死胡同,因为似乎我们在这里有一个罕见的需求案例(特别是因为大多数人处理地理参考数据,而不是自定义栅格地图)。
所以现在,我可以想到 2 个不同的选项:
- 为每个过滤器组合创建一个图层。这意味着我们必须创建 2^n 层,所以这只适用于一定数量的过滤器(可能会增加) - 因此,我更喜欢另一种解决方案(这只是最后一种情况)
- 使用
MapServer
并以某种方式导入我的图层。Union Layer
然后我们可以在运行时将图层与查询合并(我在这里读到了),因此只将一个图层传递给传单。
我的问题
我完全没有经验,MapServer
因此我什至不确定这是否是一个用例,或者它是否有能力这样做,更重要的是:如果它真的会给我们带来性能提升,因为它可能需要大量的逻辑服务器端.
在我开始再花几个小时尝试之前:MapServer
如果这是一个好主意或者我MapServer
完全误解了某些东西,已经与之合作过的人可以给我一些反馈吗?
另外,如果有人对我有其他选择或想法,非常欢迎您分享,我感谢每一个输入。:)
提前致谢!