FingerEyes-Xr에서 GraphicLayer의 Row 순회 및 MBR 얻기

GraphicLayer의 구성요소들을 순회하는 방법은 for 문을 통해 쉽게 해결할 수 있습니다. 즉, 아래의 예와 같습니다.

var targetGl = map.layers("sketch_grp");

for (var id in targetRows) {
    var row = targetRows[id];

    ...
}

그래픽 레이어를 구성하는 그래픽 요소를 순회하면서 해당 그래픽 요소의 MBR을 얻어야 하는 경우가 많이 생깁니다. 위의 코드에서 row 변수의 MBR 함수를 통해 쉽게 MBR을 얻을 수 있는데, FingerEyes-Xr에서는 그래픽 요소의 정확한 MBR을 얻기 위해서 약간의 특이점이 발생합니다. 이 특이점으로 인해 혼란스러움이 있어 이 글을 통해 정리합니다. 즉, Text 형태의 그래픽 요소 등과 같은 정확한 MBR을 얻기 위해서는 CoordMapper와 그래픽 요소(SVG)를 담고 있는 DOM 컨테이너를 인자로 넣어줘야 합니다. 즉, 아래의 예제 코드와 같습니다.

var targetGl = map.layers("sketch_grp");
var cm = map.coordMapper();
var svgContainer = targetGl.container();

for (var id in targetRows) {
    var row = targetRows[id];
    var mbrTarget = row.MBR(cm, svgContainer);

    ...
}

FingerEyes-Xr의 소스코드는 GitHub에서 다운로드 받으실 수 있습니다.

FingerEyes-Xr의 Hotspot 기능

지도 상에 특정한 지점을 시각적으로 두드러지게 표현하고 싶을 경우 FignerEyes-Xr에서는 Hotspot 기능을 활용할 수 있습니다. 아래는 이러한 Hotspot 기능을 활용하여 원하는 위치를 강조하는 기능에 대한 동영상입니다.

코드는 아래와 같이 간단합니다.

var pt = new Xr.PointD(102033, 231233);
var hotSpot = new Xr.ui.HotSpotControl(id, map, pt);
map.userControls().add(hotSpot);

위의 코드에 덧붙여 만약 사용자가 hotSpot을 클릭하면 지도에서 사라지도록 하는 추가 코드는 아래와 같습니다.

hotSpot.addEventListener("click", 
    function() {
        map.userControls().remove(id);
    }
);

FingerEyes-Xr의 소스코드는 GitHub에서 다운로드 받으실 수 있습니다.