我正在努力进行一种特殊的设置:我们在OpenLayers(在GeoExt Web界面中)有一个WMS层,调用MapServer字符串(例如http://mydomain/cgi-bin/mapserv.exe?map=someMapFile.map&etcetc)。
现在我们需要将数据集拆分为多个层。 我们尝试通过实现n个单独的WMS层来实现它太慢了,所以我们尝试了一个非常简单的解决方案:生成仅包含所需层的自定义mapFile。此动态mapfile由服务返回:
http://mydomain/myservice/get?layers=listoflayers,otherparams,etc返回自定义mapfile的路径。该解决方案非常简单和有效。
所以现在我们应该更新WMS层,以便在不重新加载整个页面的情况下动态替换这个mapfile。
所以我的问题是:
这可能吗?
是否可以使用单独的图层列表(不是OpenLayers提供的默认图层列表)并触发事件“changeLayers”?有这个设置的例子吗?
提前感谢任何提示!
Mulone
答案 0 :(得分:4)
您不需要动态mapfiles。 GetMap请求有一个参数LAYERS。
LAYERS = layer_list:一个或多个地图图层的逗号分隔列表。如果存在SLD参数,则为可选。 (http://mapserver.org/ogc/wms_server.html)
或者你在做其他事情而不是选择一个图层的子集?
答案 1 :(得分:0)
在我看来,就像你提到的那样,最好将WMS mapfile分解为多个层。即使在某些情况下,数据来自完全相同的来源,但您仍然可以应用一些过滤器在WMS中拥有多个图层。
例如,在数据库中存储在表格中的地方有100万条道路,要发布道路要素,您可能会为此数据集设置多个图层。可以根据属性或空间关系按年或按类型或任何您想要的方式过滤图层。当您在图层块或图层文件中使用过滤器解析字符串以通过数据库连接进行查询时,会发生这种情况。生成请求字符串时,图层名称可以是动态的,因此我认为这可能就是您要查找的内容。
所以在此之后,如果您只对州际道路感兴趣,而不是在WMS请求中使用WMS端点来处理整组图层,则只能使用'layer = interstate_road'查询州际层。在请求中。然后只返回州际公路而不是彻底扫描/渲染整个数据集。
如果你不介意再读一点,那么MapServer中也有空间非空间过滤器。例如,过滤器编码将在功能级别为您提供空间/非空间查询。它也是动态的,因为过滤器在请求URL中,您也可以动态更改。