Мне нужно перебрать уже отсортированную SimpleFeatureCollection по их геометрии ie.
Я понял, что класс c SimpleFeatureIterator приходит несортированный и SortedFeatureIterator (итератор SimpleFeatureIterator, схема SimpleFeatureType, SortBy [] sortBy, int maxFeatures) существует объект, который я пытался использовать.
Для этого объекта sortBy требуется PropertyName, которое должно быть сгенерированным FilterFactory, я думаю. Вот моя проблема: я не могу найти, как установить это свойство для запуска с функцией. Я обнаружил, что org.opengis.filter.expression.Function существует, например, org.opengis.filter.expression.Function.AreaFunction . Но так как PropertyName и AreaFunction оба расширяют интерфейс org.opengis.filter.expression.Expression , я не могу найти способ поместить функцию в SortBy объект. Я попробовал пару вещей и посмотрел, но не нашел решения.
Есть идеи? Имею ли я правильное мышление, и я пропустил методы спасения? Большое спасибо за вашу помощь.
PS: Площадь не является атрибутом моей коллекции (хотя об этом для грязного хакерского решения, но я стараюсь их избегать ...)
Пример кода:
SimpleFeatureIterator sfcIt = sfc.features();
FilterFactory2 ff = FeatureUtilities.DEFAULT_FILTER_FACTORY;
Function function = new AreaFunction();
//first intention
SortBy[] s = {ff.sort(function.toString(), SortOrder.ASCENDING)};
//second intention
Expression expr = ff.function(function.toString(), ff.property("the_geom"));
//desperate intention
final PropertyName propertyName = (PropertyName) function; //utopic
final PropertyName propertyName = ff.arithmeticOperators(true, function); //that isn't the same function object...
SortBy[] sort = { new SortByImpl(expr, SortOrder.ASCENDING) };
SortBy[] sort = { new SortByImpl(propertyName, SortOrder.ASCENDING) };
SortedFeatureIterator sfcIter = new SortedFeatureIterator(sfcIter, sfc.getSchema(), sort, sfc.size());
Спасибо за ваше мнение! Максим Коломб