我在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和减去函数。
如果有人可以帮我找到解决方案,那将会很棒。
谢谢,
答案 0 :(得分:0)
Abs应该已经存在(如果查看GeoServer documentation),具体取决于列的类型,您需要abs_3或abs_4。你还需要将field2 - 10分解为子函数(这是standard的内置部分)。
如果其他所有方法都失败了,您可以使用此tutorial编写自定义过滤器。