- 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());
- }
- }