FingerEyes-Xr은 웹 기반에서 공간 데이터를 편집할 수 있도록 도형 데이터를 클라이언트에서 직접 렌더링하여 표시합니다. 즉 배경지도는 Image로 표시하고 그외 수치지도 레이어는 SVG와 같은 그래픽 요소로 표시됩니다.
이러한 구조로 인해 마우스 등을 통한 지도 이동 시에는 문제가 없으나, 코드를 통한 지도 이동시에 수치지도 레이어가 깜빡 거리는 현상이 발생할 수 있습니다. 그러나 움직이는 물체를 지도에서 추적하거나 GPS 등을 이용해 내 위치를 중심으로 지도를 이동시키는 등의 기능을 개발할때 이러한 깜빡거리는 현상은 사용자에게 좋지 않은 경험을 제공합니다.
그러나 FingerEyes-Xr에서도 움직이는 물체나 GPS 등을 통한 지도 이동 등과 같은 기능에서 자연스럽게 지도를 깜빡임없이 이동시키는 기능의 구현이 가능합니다. 이럴때 사용할 수 있는 코드는 아래와 같습니다.
function smoothMapMoveByPixel(map, px, py) { var cm = map.coordMapper(); cm.moveMapByViewOffset(px, py); map.update(Xr.MouseActionEnum.MOUSE_DRAG_END, px, py); } function smoothMapMove(map, newX, newY) { var cm = map.coordMapper(); var prePt = cm.currentCenter(); cm.moveTo(newX, newY); var deltaX = cm.viewLength(newX - prePt.x); var deltaY = cm.viewLength(newY - prePt.y); if (newX > prePt.x) deltaX = -deltaX; if (newY < prePt.y) deltaY = -deltaY; map.update(Xr.MouseActionEnum.MOUSE_DRAG_END, deltaX, deltaY); }
함수가 2개인데요. 먼저 smoothMapMoveByPixel는 픽셀 단위값 만큼 지도를 자연스럽게 이동시키는 함수이고, smoothMapMove는 이동하고자 하는 위치를 지도의 절대좌표값으로 해서 자연스럽게 이동하는 함수입니다. 이중 smoothMapMove 함수의 사용예는 아래와 같습니다.
setInterval(function () { var map = ...; var cm = map.coordMapper(); var prePt = cm.currentCenter(); var newX = prePt.x + 2; var newY = prePt.y - 2; smoothMapMove(map, newX, newY); }, 100);
위의 코드는 0.1초마다 지도를 우측하단으로 x와 y축 모두에 대해 2미터만큼 이동시키는 것으로, 실제 시스템에 적용한 결과 화면은 아래와 같습니다.
보시는 것처럼 깜빡거림없이 자연스럽게 지도가 이동하는 것을 볼 수 있는데요. 만약, 구성 레이어가 많거나 해서 깜빡거림이 여전이 발생한다면 지도 이동 반복 주기에 대한 시간을 늘려 테스트 해보기 바랍니다.