计算MapServer中整个图层的符号

时间:2014-01-29 13:43:38

标签: mapserver

有没有办法计算图层接收的项目/几何图形数量?我想要做的是在查询返回太多项目时绘制不同的符号。例如:

MAXFEATURES 10001 #if I get 10001 results, please zoom in

CLUSTER
  MAXDISTANCE 20
  REGION "retangular"
END

LAYER
  CLASS
    EXPRESSION ([countPoints] > 10000)
    STYLE
      SYMBOL "to_many_points_please_zoom_in"
    END
  END

  CLASS
    EXPRESSION ([countPoints] < 10000 and [Cluster:FeatureCount] > 1)
    STYLE
      SYMBOL "cluster"
    END
  END
  CLASS
    EXPRESSION ([countPoints] < 10000 and [Cluster:FeatureCount] == 1)
    STYLE
      SYMBOL "point"
    END
  END

END

我尝试使用[Cluster:FeatureCount],但它无法计算整个图层,只计算几个聚类中的点。

1 个答案:

答案 0 :(得分:0)

据我所知,没有与countPoints伪参数匹配的内置mapserver参数,所以很遗憾没有办法在普通的mapfile中做你想做的事情。在我看来,你有两个选择:

  1. 使用MapScript:您可以在图层上使用getNumFeatures()来检索要素数量,并根据结果以编程方式调整类和样式。

  2. 将要素计数信息嵌入到源数据中,显式地使用包含要素计数的属性字段,或者通过更改MAXFEATURES > 10000时存在的属性来隐式显示。使用后一个选项,您可以检查属性是否存在于mapfile表达式中。

  3. 沿着在源数据中嵌入要素计数信息的路线意味着您需要为每个请求生成数据,因为您已将逻辑从mapfile移动到创建数据的代码。这意味着要么数据来自数据库,SQL调用封装逻辑的过程,要么使用带有您控制的远程数据源的层CONNECTIONTYPE(例如,OGR CONNECTIONTYPE可以使用GeoJSON资源通过脚本生成的HTTP。