2019년 1월 1일 화요일

세슘(Cesium)에서 현재 위치의 좌표 알아내기

카메라 위치의 수직 하향 지점의 좌표 알아내기

//현재 카메라 위치를 가져옴 : 경위도(라디안), 높이(미터)
var cartographic = viewer.camera.positionCartographic;

//라디안을 도(경위도) 단위로 변경
//경도
var longitude = Number(Cesium.Math.toDegrees(cartographic.longitude).toFixed(10));
//위도
var latitude = Number(Cesium.Math.toDegrees(cartographic.latitude).toFixed(10));

Canvas에 나타난 지도의 가운데 지점 좌표 알아내기

//지도 center 지점에 대한 좌표값 취득
var center = screenCenterCoodinate();
var longitude = Number(center[0].toFixed(10));
var latitude = Number(center[1].toFixed(10));

/**
 * 지도 center 지점에 대한 좌표값 취득
 */
function screenCenterCoodinate() {
    var cartographic = null;
    
    //장면 모드에 따라 처리방식이 다름
    if (viewer.scene.mode == 3) { //3D 지도에서
        var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
        var pickRay = viewer.scene.camera.getPickRay(windowPosition);
        var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
        cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
    } else if (viewer.scene.mode == 2) { //2D 지도에서
        cartographic = viewer.camera.positionCartographic;
    }
    
    //라디안을 도(경위도) 단위로 변경
    var longitude = Number(Cesium.Math.toDegrees(cartographic.longitude)); //라디안을 경위도 단위로 변경
    var latitude = Number(Cesium.Math.toDegrees(cartographic.latitude)); //라디안을 경위도 단위로 변경

    //아래와 같은 방법으로도 동일한 값을 구할 수 있었다
    /*
    var longitude = cartographic.longitude * (180 / Math.PI);
    var latitude = cartographic.latitude * (180 / Math.PI);
    */
    console.log(longitude, latitude);

 return [longitude, latitude];
}