如何在UMN-mapserver中仅显示图层的某些类?


9

我在地图服务器中可视化形状层。现在,我只想对该层的某些类提出一些要求。例如,我想要一个仅针对水类的请求,稍后仅针对木类的请求。我可以通过地图服务器实现这一点吗?

Answers:


7

这是您可以执行的另一种方法。这种方式涉及在每个类中使用带有表达式的一层。这种方式这样做有点“昂贵”,因为它涉及逻辑表达式,但是除非遇到真正的高负荷情况,否则您可能永远不会注意到这种差异。

每个类都有一个两部分的表达式。对于要绘制的特征,表达式的两个部分都必须为真。表达式的第一部分根据shapefile中的属性选择应归入该类的特征。表达式的第二部分评估通过url传递的变量的值。在URL中为变量命名什么都没有关系(不要使用诸如“ layer”之类的保留字),它只需要与表达式中的变量名匹配即可。

以下是一些示例层:

LAYER
  NAME "watersheds"
  STATUS DEFAULT
  DATA 'majclip'
  TYPE POLYGON
    CLASS
       NAME "water"
       EXPRESSION ([MAJOR] < 42 AND '%wanted%' = 'water')
       STYLE
          COLOR 0 0 255
       END
    END
    CLASS
       NAME "wood"
       EXPRESSION ([MAJOR] >= 42 AND '%wanted%' = 'wood')
       STYLE
          COLOR 0 255 0
       END
    END
END

要仅绘制水景,可以使用如下URL请求: http://localhost/cgi-bin/mapserv.exe?map = / ms4w / apps / mymapfile.map&mode = map&wanted = wood

由于这是实现目标的第三种有效方法,因此您确实要考虑目标是什么。如果您的数据经常更改,则可能需要使用此选项。如果您的数据不经常更改,我个人将分为两层。如果可以提高性能,我甚至可以按土地用途类型将shapefile分成多个shapefile。(可能不会,图层过滤器非常有效)。使用Web映射,您越优化数据就越好。


7

在您的情况下,您应该有两层,一层用于木材,一层用于水。您可以使用相同的shapefile具有两个图层。

然后,您可以通过LAYERS参数选择要在请求中直接显示的图层。这些类仅表示数据的不同部分(例如,应如何渲染该层中的数据)。


4

如果确实需要将它们全部放在一层中,则可以使用命名样式来实现。有关更多详细信息,请参见此处。彼得提出的多层建议在许多方面是一种更为简单的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.