Geotools按问题排序

时间:2014-08-21 13:03:22

标签: geotools

我在postgis中有一个简单的SQL查询:

"通过提交1 desc,ABS(提交2 - 10)asc"

从table1命令中选择*

在上面的查询中我首先根据field1,然后是field2的绝对值减去10,在postgis中正常工作。

我将使用geotools模拟这个,但我无法实现ABS功能。这是我的代码的一部分:

final SortBy sortByField1 = ff.sort(" field1",SortOrder.DESCENDING);

final SortBy sortByField2 = ff.sort(" ABS(field2 -10)",SortOrder.ASCENDING);

seconds语句抛出异常,因为sort只识别字段名而不是表达式。 我查看了文档,我发现我们可以使用表达式来处理这个,但我无法实现它:

   PropertyName name = sortByField2.getPropertyName();  
   name.evaluate(object)
    final SortBy newSort  = new SortByImpl(name, SortOrder.ASCENDING);

我知道Geotools中有FilterFunction_abs和Add函数,但我不知道如何使用它来评估ABS和减去函数。

如果有人可以帮我找到解决方案,那将会很棒。

谢谢,

1 个答案:

答案 0 :(得分:0)

Abs应该已经存在(如果查看GeoServer documentation),具体取决于列的类型,您需要abs_3或abs_4。你还需要将field2 - 10分解为子函数(这是standard的内置部分)。

如果其他所有方法都失败了,您可以使用此tutorial编写自定义过滤器。