Geoserver系列:将CQL转换OGC的xml过滤

简介: Geoserver将CQL转换OGC的xml过滤

在Geoserver的wfs查询中,支持CQL的数据查询过滤,但是常用的OGC的查询中,是以post的形式,通过传递一个xml文件的格式,返回查询数据的结果。这在arcgis server,sfs server中都能够进行支持的,因为这些服务都支持OGC的标准查询。

CQL使用类似文本语法的格式,具有很高的可读性和适用性。

这里分享一个使用GeoTools将CQL转换为OGC过滤查询的代码样例,具体的英文网址在原文链接中。

GeoTools是一个开源的java版gis工具集,里边有许多gis方面的相关方法,可在网上直接下载编译好的jar包进行使用。

转换代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.geotools.filter.text.cql2.CQL;
import org.geotools.filter.text.cql2.CQLException;
import org.opengis.filter.Filter;
public class CQLToOGC {
  public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String line;
    org.geotools.xml.Configuration configuration = new org.geotools.filter.v1_0.OGCConfiguration();
    org.geotools.xml.Encoder encoder = new org.geotools.xml.Encoder(
        configuration);
    encoder.setIndenting(true);

    while (!(line = reader.readLine()).isEmpty()) {
      try {
        Filter filter = CQL.toFilter(line);
        // System.out.println("\t" + filter);
        encoder.encode(filter, org.geotools.filter.v1_0.OGC.Filter, System.out);
      } catch (CQLException e) { 
        e.printStackTrace();
      }
    }
  }}

转换的结果:

CQL样式

prop = 23

转换结果:

<?xml version="1.0" encoding="UTF-8"?><ogc:Filter xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<ogc:PropertyIsEqualTo>

<ogc:PropertyName>prop</ogc:PropertyName>
<ogc:Literal>23</ogc:Literal>

</ogc:PropertyIsEqualTo></ogc:Filter>
空间查询转换的效果:

CQL语句:

INTERSECTS(SP_GEOMETRY, POLYGON ((142578.64599609 252217.79003906, 73781.897460938 141983.61767578, 287078.38037109 146764.85888672, 142578.64599609 252217.79003906)))

转换结果:

<?xml version="1.0" encoding="UTF-8"?><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml">
  <ogc:Intersects>
    <ogc:PropertyName>SP_GEOMETRY</ogc:PropertyName>
    <gml:Polygon>
      <gml:outerBoundaryIs>
        <gml:LinearRing>
          <gml:coordinates>142578.64599609,252217.79003906 73781.897460938,141983.61767578 287078.38037109,146764.85888672 142578.64599609,252217.79003906</gml:coordinates>
        </gml:LinearRing>
      </gml:outerBoundaryIs>
    </gml:Polygon>
  </ogc:Intersects></ogc:Filter>
相关文章
|
12天前
|
XML SQL 数据处理
学习 XQuery:XML数据查询的关键
XQuery是用于查询XML数据的语言,类似SQL对数据库的操作。它基于XPath构建,用于从XML文档中提取和排序元素。FLWOR表达式(For, Let, Where, Order by, Return)是其核心,用于处理和过滤数据。例如,示例代码展示了如何选取&quot;books.xml&quot;中价格大于30的书籍并按标题排序。XQuery还可用于Web服务、生成报告、XML到XHTML转换及搜索文档等场景。了解XPath能帮助更好地掌握XQuery,两者有相似的数据模型和函数。
36 0
|
4月前
|
Java 数据库连接 数据库
使用原生JDBC动态解析并获取表格列名和数据
使用原生JDBC动态解析并获取表格列名和数据
|
10月前
|
XML 数据库 数据格式
数据库视频第六章 XML查询,FOR XML语句
数据库视频第六章 XML查询,FOR XML语句
|
XML JSON Java
Spring Batch输出文本数据 XML数据 JSON数据 数据库
Spring Batch输出文本数据 XML数据 JSON数据 数据库
|
XML 数据格式 开发者
使用 Schema 的 sax 方式操作 xml(一)| 学习笔记
快速学习使用 Schema 的 sax 方式操作 xml。
70 0
使用 Schema 的 sax 方式操作 xml(一)| 学习笔记
|
XML 前端开发 JavaScript
解析 xml 数据格式| 学习笔记
快速学习解析 xml 数据格式。
106 0
解析 xml 数据格式| 学习笔记
|
存储 缓存 编解码
Solr解析器通用的查询参数
本文主要介绍下Solr解析器中通用的查询参数。这些参数能够在标准查询解析器、DisMax查询解析器及eDisMax查询解析器中通用。 下表总结了Solr通用的查询参数,支持标准的、DisMax、eDisMax查询请求。
138 0