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

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

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

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

转换代码如下:

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importorg.geotools.filter.text.cql2.CQL;importorg.geotools.filter.text.cql2.CQLException;importorg.opengis.filter.Filter;publicclassCQLToOGC{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));Stringline;org.geotools.xml.Configurationconfiguration=neworg.geotools.filter.v1_0.OGCConfiguration();org.geotools.xml.Encoderencoder=neworg.geotools.xml.Encoder(configuration);encoder.setIndenting(true);while(!(line=reader.readLine()).isEmpty()){try{Filterfilter=CQL.toFilter(line);// System.out.println("\t" + filter);encoder.encode(filter,org.geotools.filter.v1_0.OGC.Filter,System.out);}catch(CQLExceptione){e.printStackTrace();}}}}

转换的结果:

CQL样式

prop = 23

转换结果:

prop

23

空间查询转换的效果:

CQL语句:

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

转换结果:

SP_GEOMETRY

142578.64599609,252217.79003906 73781.897460938,141983.61767578 287078.38037109,146764.85888672 142578.64599609,252217.79003906

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐