【问题标题】:Compare two fields with OGC filter in OL3 and GeoServer在 OL3 和 GeoServer 中使用 OGC 过滤器比较两个字段
【发布时间】:2016-08-27 14:19:22
【问题描述】:

我正在使用 Opeonlayers 3.18 + GeoServer。我可以制作一个 ogc 过滤器来比较字段和值。如何比较两个字段?
下面的代码显示了我正在寻找的内容:

var f = ol.format.ogc.filter.greaterThan('Field1', 100);  // this works nicely
var f = ol.format.ogc.filter.greaterThan('Field1', 'Field2'); // this doesn't work

等效的工作 CQL 过滤器是:'Field1 > Field2'

问候

【问题讨论】:

    标签: openlayers-3 geoserver


    【解决方案1】:

    这种过滤应该可以工作。我会注意到许多数据库可能无法以最佳方式执行该过滤器,因此,此类过滤器的处理可能不正确。

    首先要检查的是 GeoServer 日志是否有任何其他信息。对于大多数请求,有日志消息将提供请求的所有详细信息(包括过滤器)。

    如果 OL3 发出无意义的请求,首先应该有某种解析错误。如果数据存储在请求方面遇到问题,您可能会看到异常。

    为了进一步提供帮助,您使用的是哪个版本的 GeoServer 和哪个数据存储?另外,日志中是否有其他信息?

    更新:根据下面的评论,我查看了 Open Layers 3 源代码。如果您查看here,看起来 OL3 将第一个参数视为属性名称,将第二个参数视为文字。在项目的 GitHub 页面上填写错误/功能请求可能值得。

    【讨论】:

    • 它的 Geoserver 2.8.2 和 shapefile 层以及这两个字段都是 Long 类型。 GeoServer 只返回一个空响应,其日志显示:“无法解析过滤器:... Field1Field2”。如果我通过将 Literal 标签更改为 PropertyName 标签来制作纯文本过滤器,现在 Openlayers 返回错误:“TypeError:filter.getTagName 不是函数。ol.xml.makeSimpleNodeFactory(filter.getTagName())”。跨度>
    • 谢谢。如果第二个参数不应该是 Literal -in this case- ,那么它必须是什么?我的意思是这种情况下正确和标准的过滤器是什么?
    • 第二个参数必须是 PropertyName。我的猜测是,当您尝试在 JavaScript 中将其设为 PropertyName 时,OL3 并不满意,因为它希望第二个参数是文字。
    猜你喜欢
    • 2020-05-17
    • 2012-06-03
    • 2015-08-04
    • 2020-01-18
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多