0

我正在为一个特殊的设置而苦苦挣扎:我们在 OpenLayers 中有一个 WMS 层(在 GeoExt Web 界面中)调用 MapServer 字符串(例如http://mydomain/cgi-bin/mapserv.exe?map=someMapFile.map&etc 等) .

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

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

所以现在我们应该更新 WMS 层以便即时替换这个地图文件,而不需要重新加载整个页面。

所以我的问题是:

  • 这可能吗?

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

提前感谢您的任何提示!

穆龙

4

2 回答 2

4

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

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

或者除了选择图层子集之外,您还在做其他事情吗?

于 2010-09-21T15:50:58.630 回答
0

在我看来,在您提到的这种情况下,最好将 WMS 地图文件分解为几层。即使在某些情况下,数据来自完全相同的来源,但您仍然可以应用一些过滤器在 WMS 中拥有多个图层。

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

因此,在此之后,当您只对州际公路感兴趣时,而不是对 WMS 请求中的所有图层使用 WMS 端点,您可以在请求中使用“layer=interstate_road”仅查询州际公路. 然后只返回州际公路,而不是详尽地扫描/渲染整个数据集。

如果你不介意多读一点,MapServer 中也有空间的、非空间的过滤器。例如,过滤器编码将为您提供要素级别的空间/非空间查询。它也是动态的,因为过滤器位于请求 url 中,您也可以动态更改它。

于 2016-09-08T19:23:50.750 回答