最近一直在做基于openlayers的地图开发,遇到了一些filter过滤的问题,特此记录
根据官方文档中filter的描述,它有以下几个方法:
网上的代码都是openlayers的老版本的,很多都已经失效了,我写的代码都是根据最新的官方文档来的,基于openlayers4;
我常用的有equalTo,like,or这几个:
//like,两边是通配符
var valFilter = ol.format.filter.like("NAME", "*"+val+"*");
//equalTo,相等
var valFilter = ol.format.filter.equalTo("NAME", val);
//多个对象的filter,用or
let filters = []
for(let i in arr){
filters.push(ol.format.filter.equalTo(that.fliterName("NAME"), val[i]))
}
var orFilter = flymap.format.filter.or(...filters);
开发的时候碰到了一个需求,要根据地级市范围来搜索,困扰了一段时间,我的意见是在数据中增加一个字段,我根据字段过滤,但是领导不让,说可以根据geometry过滤,网上说的确是可以的,但是那些代码是低版本的,无法直接使用,所以只能靠官方文档,全英文的阅读起来有点困难
- 根据查询文档,
within
这个方法是在…内部,应该是我们需要的,它接收3个参数
geometryName、geometry、srsName这三个参数
geometry、geometryName可以通过getGeometry()、getGeometryName()获取,第三个srsName根据提示可以不写.
把范围过滤跟条件过滤用and
方法结合起来,完成最终的搜索条件过滤
var geometry = features[0].getGeometry();
var geometryName = features[0].getGeometryName();
//范围过滤
var cityFilter = ol.format.filter.within(geometryName,geometry);
var oneFilter = ol.format.filter.equalTo("NAME", val);
var filter = ol.format.filter.and(oneFilter,cityFilter);