package com.geoserver; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.feature.FeatureIterator; import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.cql2.CQLException; import org.geotools.geometry.jts.ReferencedEnvelope; import org.opengis.feature.simple.SimpleFeature; import org.opengis.filter.Filter; /** * 采用geotools中公共查询语言 * 过滤条件如下 * * 例如: * PERSONS > 15000000 * PERSONS BETWEEN 1000000 AND 3000000 * STATE_NAME LIKE 'N%' * STATE_NAME = 'California' * MALE > FEMALE * UNEMPLOY / (EMPLOYED + UNEMPLOY) > 0.07 * IN ('states.1', 'states.12'): * STATE_NAME IN ('New York', 'California', 'Montana', 'Texas'): * 带函数的使用: * strToLowerCase(STATE_NAME) like ‘%m%’ * * * * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company: * @Date:2012-9-10 * @author longgangbai * @version 1.0 */ public class GeoServerCQLECQL { /** * * @param filterStr * @param layerName * @return * @throws IOException */ public static ArrayList<SimpleFeature> queryMethod(String filterStr,String layerName) throws IOException { String getCapabilities = "http://localhost:8080/geoserver/wfs?REQUEST=GetCapabilities"; Map<String,String> connectionParameters = new HashMap<String,String>(); connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities ); // Step 2 - connection DataStore data = DataStoreFinder.getDataStore( connectionParameters ); SimpleFeatureSource featureSource =data.getFeatureSource(layerName); ArrayList<SimpleFeature> featureList = new ArrayList<SimpleFeature>(); if(featureSource==null) return featureList; try { Filter filter = CQL.toFilter(filterStr); // filterStr形式 如 name='武汉大学' or code like 'tt123%' SimpleFeatureCollection result = featureSource.getFeatures(filter); ReferencedEnvelope bounds = new ReferencedEnvelope(); FeatureIterator<SimpleFeature> itertor = result.features(); while (itertor.hasNext()) { SimpleFeature feature = itertor.next(); bounds.include( feature.getBounds() ); featureList.add(feature); } System.out.println( "Calculated Bounds:"+ bounds ); itertor.close(); result.close( itertor ); return featureList; } catch (CQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { } return null; } public static void main(String[] args) throws IOException { ArrayList<SimpleFeature> list=queryMethod("STATE_NAME='Arizona'","topp:states"); System.out.println("list="+list.toString()); } }
转载于:https://www.cnblogs.com/wang985850293/p/5150962.html
