0

有没有办法计算一个层收到了多少项目/几何图形?如果查询返回的项目太多,我想要做的是绘制一个不同的符号。例子:

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] 但它无法计算整个层,它只计算几个集群中的点。

4

1 回答 1

0

据我所知,没有与您的countPoints伪参数匹配的内置 mapserver 参数,所以不幸的是,没有办法在普通的 mapfile 中做您想做的事情。在我看来,您有两种选择:

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

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

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

于 2014-01-31T10:02:02.150 回答