[OpenLayers] geoServer CQL_FILTER를 활용한 폴리곤 버퍼검색(WITHIN, INTERSECTS)
이전 포스팅에서는 기준점을 기준으로 반경 검색을 하는 것에 대해 알아보았다.
이번에 시도할 기능은 면(POLYGON)에 대한 일정 거리의 버퍼를 부여해서 이 버퍼에 걸리는 Feature들을 검색해 볼 것이다.
BUFFER생성
일단 해당 레이어에 대한 버퍼를 만들어준다. 여러 방법이 있겠지만 필자는 JSTS라이브러리를 활용했다.
//JSTS를 활용해 Buffer Feature 생성
//필요한 파라미터 : feature, radius
//피처 geometry 파싱
var parser = new jsts.io.OL3Parser();
var jstsGeom = parser.read(feature.getGeometry());
//버퍼 geometry 생성
var buffered = jstsGeom.buffer(radius);
//버퍼 feature 생성
var bufferFeature = new ol.Feature();
bufferFeature.setGeometry(parser.write(buffered));
//WKT format으로 변경(CQL_FILTER로 검색시 필요)
var bufferFeature_WTK = new ol.format.WKT().writeFeature(bufferFeature);
INTERSECTS
INTERSECTS 구문은 해당 버퍼에 일부분이라도 걸리는 Feature들을 모두 검색해준다.
구문 | 의미 | 예시 |
INTERSECTS(Expression,Expression) | 두번째 객체와 겹치는 것들만 추출 | ![]() |
INTERSECTS(geom_col,POLYGON(x y,x y,x y,x y))
//geom_col : 레이어 geometry 스키마 명
//POLYGON : 버퍼객체정보
이를 cql_filter에 적용하면 다음과 같다
// ※참고 : param에 들어있는 정보
//var param = {
// radius //반경 정보(100m)
// bufferFeature_WTK //POLYGON() 객체 정보
// lyrId //검색할 레이어ID(GeoSever에 발행되어있는 레이어 ID)
// style //레이어 스타일정보
//}
function setBufferLayer(param) {
//url 생성
var url = info.geoServer.url; //geosever host url이 들어갈곳
url += '/ows?service=WFS';
url += '&version=1.0.0';
url += '&request=GetFeature';
url += '&typeName=' + param.lyrId;
url += '&outputFormat=application/json';
//cql_filter 적용
url += '&cql_filter=INTERSECTS(geom,'+param.bufferFeature_WTK+')';
//source 생성
var vectorSource = new ol.source.Vector({
format: new ol.format.GeoJSON(),
url : url,
strategy: ol.loadingstrategy.bbox
});
//Layer 생성
var bufferLayer = new ol.layer.Vector({
source : vectorSource,
style : param.style,
name : param.lyrId+'_'+param.radius
});
return bufferLayer;
}
WITHIN
WITHIN 구문은 INTERSECTS와 비슷하지만 버퍼 내부에 위치하는 Feature만 가져온다.
구문 | 의미 | 예시 |
WITHIN(Expression,Expression) |
첫번째 객체들 중 두번째 객체의 내부에 위상적으로 위치하는 것만 추출 |
![]() |
WITHIN(geom_col,POLYGON(x y,x y,x y,x y))
//geom_col : 레이어 geometry 스키마 명
//POLYGON : 버퍼객체정보
REFERENCE
ECQL Reference — GeoServer 2.19.x User Manual
ECQL Reference This section provides a reference for the syntax of the ECQL language. The full language grammar is documented in the the GeoTools ECQL BNF definition Syntax Notes The sections below describe the major language constructs. Each construct lis
docs.geoserver.org
- ECQL 참고 문서