`
longgangbai
  • 浏览: 7330208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

以下引用自官方文档:

CQL and ECQL

CQL (Common Query Language) is a query language created by the OGC for the Catalogue Web Services specification. Unlike the XML-based Filter Encoding language, CQL is written using a familiar text-based syntax. It is thus more readable and better-suited for manual authoring.

However, CQL has some limitations. For example it cannot encode id filters, and it requires an attribute to be on the left side of any comparison operator. For this reason, GeoServer provides an extended version of CQL called ECQL. ECQL removes the limitations of CQL, providing a more flexible language with stronger similarities with SQL.

GeoServer supports the use of both CQL and ECQL in WMS and WFS requests, as well as in GeoServer’s SLD dynamic symbolizers. Whenever the documentation refers to CQL, ECQL syntax can be used as well (and if not, please report that as a bug!).

This tutorial introduces the CQL/ECQL language by example. For a full reference, refer to the ECQL Reference.

 

 

 

实例如下:

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

 

分享到:
评论

相关推荐

    79.(leaflet篇)leaflet使用CQL过滤Geoserver发布的图层.rar

    本教程将深入讲解如何利用Leaflet结合CQL(Common Query Language)来过滤GeoServer发布的图层,使得地图展示更加精细化和定制化。 首先,了解CQL是关键。CQL是一种标准的查询语言,常用于地理信息系统中,允许用户...

    开源GIS服务平台 最新的GeoServer2.23.3版本的部署包

    GeoServer是一款广泛使用的开源GIS(地理信息系统)服务平台,它的最新版本是2.23.3。这个版本提供了许多先进的GIS功能,包括地图发布、数据共享、WMS(Web Map Service)、WFS(Web Feature Service)等,使得地理...

    geoserver中文教程

    geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文教程geoserver中文...

    geoserver 开源gis服务器

    作为GIS领域的重要工具,GeoServer提供了丰富的功能,用于发布、管理和共享地理空间数据。这款服务器是GeoTools项目的一部分,GeoTools是一个Java库,专为处理地理空间信息而设计。 GeoServer的核心功能包括: 1. ...

    Geoserver使用最全详解

    GeoServer是一个开源的用于共享地理空间数据的服务器,它支持使用开放标准对多数主要空间数据源进行发布。GeoServer实现了行业标准的OGC协议,如Web Feature Service(WFS)、Web Map Service(WMS)和Web Coverage ...

    【GIS地图服务】geoserver-2.24.1-war.zip

    【GIS地图服务】geoserver-2.24.1-war.zip是一个专注于地理信息系统(GIS)的开源项目,它基于Java技术实现,并符合开放地理空间联盟(OGC)的标准。这个压缩包包含了geoserver的2.24.1版本,以war(Web ARchive)...

    GeoServer官网推荐书籍: Mastering GeoServer & GeoServer Beginner's Guide

    同时,书中也会涉及如何通过GeoServer与其他GIS工具(如QGIS、ArcGIS)和大数据平台(如Hadoop、Spark)集成,实现更广泛的数据管理和分析功能。总的来说,GeoServer的学习不仅提升了你的GIS技能,还能增强你在地理...

    GeoServer开发手册系列(中文)

    本手册尤其强调了Maven和Eclipse的集成使用,同时介绍了如何操作OWS服务与REST服务,以及如何在GeoServer中进行Wicket开发和Web用户界面扩展。 ### GeoServer开发环境搭建 GeoServer的开发环境搭建需要先安装JDK...

    Geoserver学习测试代码

    【标题】"Geoserver学习测试代码"是一个关于使用Geoserver进行GIS(地理信息系统)开发的实践项目,主要基于Geoserver 2.1.2版本。该项目旨在解决网络上关于Geoserver实际操作代码的稀缺问题,通过参照最新的...

    geoserver中文开发手册.zip_GeoServer 地图服务_geoserver_geoserver手册

    GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。

    Geoserver中文教程

    由于Geoserver和Udig都是基于Java语言开发的应用程序,因此需要先安装JDK以确保后续步骤顺利进行。 #### 安装步骤如下: 1. 打开浏览器访问Oracle官方网站提供的JDK下载页面,地址通常为:*** ** 在JDK下载页面找到...

    geoserver wfs过滤查询

    在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的服务器软件,它能够发布和操作地理空间数据。WFS(Web Feature Service)是OGC(Open Geospatial Consortium)制定的一种标准接口,用于在网络上交换...

    GeoServer开发手册系列

    GeoServer是一款开源的GIS(地理信息系统)服务器,它支持OGC(开放地理空间联盟)标准,包括WMS、WFS等服务,使得地理空间数据能够通过网络进行发布和共享。本开发手册系列主要针对中文用户,旨在帮助开发者深入...

    geoserver中文开发手册范本.doc

    GeoServer 是一个开源的基于 Web 的 GIS 服务器,它提供了强大的空间数据管理和发布功能。下面是 GeoServer 中文开发手册的摘要信息: 目录 * 介绍 * 工具 * 源代码 * 快速入门 * Maven 指南 * Eclipse 指南 * ...

    GeoServer瓦片缓存机制研究

    GeoServer 作为一个基于 Java 的开源 GIS 服务器,具有成本低廉、良好的扩展性和部署的灵活性等特点。但是,在面对庞大地图数据、庞大的用户交互时,如果仅仅采用 GeoServer 作为 GIS 服务器,势必导致地图数据传输...

    uDig定制地图样式发布到Geoserver并使用Openlayers和Cesium验证.rar

    在本项目中,我们主要涉及三个关键的地理信息系统(GIS)工具:uDig、Geoserver和OpenLayers,以及3D地球渲染库Cesium。这些技术的集成使用可以帮助用户创建、发布和展示自定义的地图样式。 uDig(User-friendly ...

    GeoServer学习笔记.docx

    ### GeoServer 学习笔记 #### 一、GeoServer简介 GeoServer是一个开源地理信息系统(GIS)服务器,基于Java开发,遵循Open Geospatial Consortium (OGC) 的一系列Web服务规范,如WMS (Web Map Service), WFS (Web ...

    geoserver源码和geotools

    在GIS(地理信息系统)领域,Geoserver和Geotools是两个非常重要的开源组件。本文将深入探讨这两个组件,特别是如何利用Eclipse IDE和Maven构建Geoserver项目,并理解其源码。 **Geoserver简介** Geoserver是一款...

    Geoserver中sld样式文件的配置

    在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的Web服务,它能够发布地理数据并提供WMS(Web Map Service)和WFS(Web Feature Service)等OGC(Open Geospatial Consortium)标准服务。SLD(Styled ...

Global site tag (gtag.js) - Google Analytics