Bom dia pessoal, estou desenvolvendo uma aplicacao que acessa informações sobre um mapa urbano em banco (Postgres), estou usando a interface para fazer as querys.
Este metodo é usado em uma função de auto-complete e por isso não pode retornar resultados repetidos, porém eles existem em banco. Preciso que a minha query tenha algo como um DISTINCT ou GROUP BY do sql, porém não encontrei uma maneira de usá-los na interface que uso.
Já procurei pelo google, no codehaus (http://docs.codehaus.org/display/GEOTDOC/Filter+Examples) e no wiki do postgres mas não achei nada sobre eles.
Segue abaixo o meu codigo, ele funciona porém retorna resultados repetidos.
public List<String> getEnderecosPossiveis(String rua, String mapa) {
//lista de ruas para o auto-complete
List<String> nomes = new ArrayList<String>();
//iterator de resultados
SimpleFeatureIterator ite = null;
//filtro da busca
Filter filter = null;
try {
//factory responsavel pela criacao de filtros
FilterFactory ff = CommonFactoryFinder.getFilterFactory(new Hints(Hints.FEATURE_2D, true));
String WC_MULTI = "%";
String WC_SINGLE = "_";
String ESCAPE = "\\";
//filtro like para o campo rua
filter = ff.like(ff.property("RUA"), rua + WC_MULTI, WC_MULTI, WC_SINGLE, ESCAPE, false);
//pegando o objeto responsavel pelo acesso da tabela/mapa
SimpleFeatureSource feature = getFeature(mapa);
//montando a query
Query query = new Query(mapa, filter);
//maximo de resultados
query.setMaxFeatures(10);
//escolhendo campos a retornar
query.setPropertyNames(new String[]{"TIPO", "RUA"});
//ordenando
SortBy sortByTipo = ff.sort("TIPO", SortOrder.ASCENDING);
SortBy sortByRua = ff.sort("RUA", SortOrder.ASCENDING);
query.setSortBy(new SortBy[]{sortByTipo, sortByRua});
//executando a query
SimpleFeatureCollection features = feature.getFeatures(query);
//passando para o iterator or resultados
ite = features.features();
while (ite.hasNext()) {
//para cada resultado
SimpleFeature first = ite.next();
//leio a rua
String strRua = (String) first.getAttribute("RUA");
//o tipo de rua (Avenida, Rua, etc)
String strTipo = (String) first.getAttribute("TIPO");
//jogo na lista de retorno
nomes.add(strTipo +" "+ strRua);
}
} catch (Exception e) {
theLogger.severe("Erro na rua '"+rua+"' no mapa '"+mapa+"' : "+e.getMessage());
} finally {
if (ite != null) {
ite.close();
}
}
return nomes;
}
Por favor se alguém souber, me ajude!