OpenLayers上的动态地图服务器

问题描述:

我正在努力做一个特殊的设置:我们在OpenLayers(在GeoExt web界面中)调用MapServer字符串(例如http://mydomain/cgi-bin/mapserv.exe?map=someMapFile.map&etcetc)中有一个WMS图层。OpenLayers上的动态地图服务器

现在我们需要将数据集分成几个层。 我们通过实例化n个单独的WMS图层进行了尝试,结果太慢了,所以我们尝试了一个非常简单的解决方案:生成仅包含所需图层的自定义mapFile。此动态映射文件由服务返回:

http://mydomain/myservice/get?layers=listoflayers,otherparams,etc返回到自定义映射文件的路径。这个解决方案非常简单和高效。

因此,现在我们应该更新WMS图层,以便在不重新加载整个页面的情况下即时替换此映射文件。

所以我的问题是:

  • 这可能吗?

  • 可以有一个单独的图层列表(不是OpenLayers提供的默认图层列表)并触发事件“changeLayers”?有没有这种设置的例子?

在此先感谢您的任何提示!

Mulone

+0

您可以在任何WMS中对图层进行分组。 – user27874 2017-03-13 17:35:28

你不应该为此需要动态地图文件。 GetMap请求有一个参数LAYERS。

LAYERS = layer_list:一个或多个地图图层的逗号分隔列表。如果存在SLD参数,则可选。 (http://mapserver.org/ogc/wms_server.html

或者你还在做什么,但选择一个层的子集?

在我看来,在你提到的情况下,把WMS地图文件分解成几层是很好的做法。即使在某些情况下,数据来自完全相同的来源,但您仍然可以应用一些过滤器在WMS中创建多个图层。

例如,在一个存储在数据库表格中的地方有一百万条道路要发布道路要素,您可能会为此数据集有几个图层。根据属性或空间关系,图层可以按年份过滤,也可以按类型或任何您想要的方式过滤。在层块或层文件中使用过滤器解析字符串以通过数据库连接进行查询时,会发生这种情况。生成请求字符串时,图层名称可以是动态的,所以我认为这可能就是您要查找的内容。

因此,在此之后,当您只对州际公路感兴趣时,不要使用WMS端点来处理WMS请求中的整个层,您只能通过使用'layer = interstate_road '在请求中。那么只有州际道路将被返回,而不是详尽地扫描/渲染整个数据集。

如果您不介意多读一点,那么MapServer中也有空间非空间过滤器。例如,过滤器编码会在功能级别为您提供空间/非空间查询。而且它也是动态的,因为过滤器位于可以动态更改的请求url内。