SpatialOperator

SpatialOperator

공간연산을 위한 다양한 유틸리티 함수를 지원하는 클래스이다.
Tracker 객체로부터 영역정보를 얻어 SpatialOperator에 적용하여 공간연산 결과를 확인할 수 있다.

Constructor

new SpatialOperator(type, extent, param1, param2)

공간연산 객체를 생성한다.

Example
// Tracker를 설정한다. 
tracker = new Tracker(map);
tracker.setStyle([255, 173, 58, 1.0], 3, [128, 128, 128, 0.2]);
// 사각형 영역으로 Tracker를 설정하고 영역을 반환 받는다.  
tracker.select('rectangle', true, function (extent, param1, param2) {
     //현재 지도 해상도를 얻는다.
     var resolution = window.map.getView().getResolution();

     //영역 검색을 위해 10px 버퍼를 준다.
     var bufferExtend = [extent[0] - resolution * 10, extent[1] - resolution * 10, extent[2] + resolution * 10, extent[3] + resolution * 10];

     //버퍼 영역을 기준으로 OL 객체를 검색한다.
     var selectFeature = [], extentFeature = olSource.getFeaturesInExtent(bufferExtend);     

     //객체 표시상태가 true인 객체만 필터링한다.
     selectFeature = extentFeature.filter(feature => feature.get('visible') == true);

     //트래커 속성정보를 기준으로 공간연산 객체를 생성한다.
     var spatialOperator = new SpatialOperator(type, extent, param1, param2);

     if (selectFeature.length > 0) {
         var center = selectFeature[0].getGeometry().getCoordinates();
         var width = resolution * iconScale * iconSize[0];
         var height = resolution * iconScale * iconSize[1];
         var iconExtend = [center[0] - width, center[1] - width, center[0] + height, center[1] + height];
    
         //iconExtend 내에 Intersects 여부를 조사한다.        
         if (spatialOperator.intersects('rectangle', iconExtend)) {
             console.log(selectFeature[i].get('properties')['SIDC']);
         }
         //OLFeature에 대한 intersects 여부를 조사한다.
         else if (spatialOperator.intersectsOLFeature(selectFeature[i])) {
             console.log(selectFeature[i].get('properties')['SIDC']);
         }
     }
}
Parameters:
Name Type Description
type number

point, line, rectangle, circle, polygon 문자열로 설정

extent array

[minx, miny, maxx, maxy] 배열형식으로 영역값 설정

param1 object

type에 따라 좌표열 설정
type이 circle일 경우 중심좌표 입력
type이 polygon일 경우 좌표배열값 입력
type이 line일 경우 좌표배열값 입력
type이 point일 경우 중심좌표값 입력

param2 number

type이 circle일 경우 반지름 설정

Methods

intersects(type, extent, param1, param2) → {bool}

각 타입별 정보로 기반으로 intersects 여부를 조사한다.

Example
if (spatialOperator.intersects('rectangle', iconExtend)) {
    console.log(selectFeature[i]);
}
Parameters:
Name Type Description
type number

point, line, rectangle, circle, polygon 문자열로 설정

extent array

[minx, miny, maxx, maxy] 배열형식으로 영역값 설정

param1 object

type에 따라 좌표열 설정
type이 circle일 경우 중심좌표 입력
type이 polygon일 경우 좌표배열값 입력
type이 line일 경우 좌표배열값 입력
type이 point일 경우 중심좌표값 입력

param2 number

type이 circle일 경우 반지름 설정

Returns:

intersects 여부 반환

Type
bool

intersectsOLFeature(olFeature) → {bool}

OLFeature에 대한 intersects 여부를 조사한다.

Example
spatialOperator.intersectsOLFeature(selectFeature[i]);
Parameters:
Name Type Description
olFeature object
Returns:

intersects 여부 반환

Type
bool