2019년 5월 2일 목요일

Cesium에서 좌표계(데카르트, 라디안, 경위도) 변환하기

좌표(데카르트, 라디안, 경위도) 변환하기

  • cartesian : 데카르트 = 직교좌표
  • cartographic : radian
  • longitude, latitude : degree = 경위도

//타원체 또는 지도를 선택한 경우 해당 지점을 반환. 높이정보 없는 직교좌표 취득
//return 데카르트 : cartesian = 직교좌표
var cartesian = viewer.camera.pickEllipsoid(mousePosition, undefined, undefined);
var cartesian = viewer.scene.pickPosition(movement.position);
var cartesian = viewer.scene.pickPosition(movement.endPosition);
var cartesian = viewer.scene.pick(movement.endPosition); //Cartesian2 인스턴스인 click.position으로부터 해당 위치의 프리미티브가 포함된 객체를 반환
var cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition); //타원체 또는지도를 선택한 경우 해당 지점을 반환. 높이정보 없는 좌표정보 취득
//카메라 위치에서 마우스 위치를 바라볼때 지면에 드리워지는 위치를 알아내는 기능
//3d가 올려져 있더라도 마치 3d가 없는 듯 지면의 위치를 잡아냄
var ray = viewer.camera.getPickRay(movement.endPosition); //windowPosition 픽셀의 x,y 좌표를 통해 카메라 위치에서 Cartesian3광선의 위치와 방향을 반환
var cartesian = viewer.scene.globe.pick(ray, viewer.scene); //광선과 지구 표면 사이의 교차점을 찾음
var cartesian = Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographic);
var cartesian = new Cesium.Cartesian3(1216347.3898980194, -4736345.958636395, 4081281.9421334346); //데카르트 값으로부터 생성
var cartesian = Cesium.Cartesian3.fromElements(1216347.3898980194, -4736345.958636395, 4081281.9421334346); //데카르트 값으로부터 생성
var cartesian = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);
var cartesian = Cesium.Cartesian3.fromDegrees(127.0722820928, 37.5137639686, 1000000.0);
var cartesian = Cesium.Cartesian3.fromArray([127.0722820928, 37.5137639686, 1000000]);
var cartesian = Cesium.Cartesian3.fromArray([0.0, 0.0, 1.0, 2.0, 3.0], 2); //(1.0, 2.0, 3.0)의 Cartesian3
var cartesian = Cesium.Cartographic.toCartesian(cartographic, ellipsoid, result);

var cartesian3Array = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(cartographicArray);
var cartesian3Array = Cesium.Cartesian3.fromDegreesArray([lon1, lat1, lon2, lat2]);
var cartesian3Array = Cesium.Cartesian3.fromDegreesArrayHeights([lon1, lat1, hei1, lon2, lat2, hei2...]);
var cartesian3Array = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]);
var cartesian3Array = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]);


//데카르트(cartesian) --> 라디안,높이(미터)
//return radian : cartographic
var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian); //데카르트를 라디안으로 변경
var cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); //데카르트를 라디안으로 변경
var cartographic = viewer.viewer.camera.positionCartographic; //현재 카메라가 위치한 공간상의 위치(좌표와 고도)를 가져옴
var cartographic = new Cesium.Cartographic(-2.007, 0.645);
var cartographic = new Cesium.Cartographic(-2.007, 0.645, 100000.0);
var cartographic = Cesium.Cartographic.fromDegrees(86.925145, 27.988257);
var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
var cartographic = Cesium.Cartographic.fromCartesian(cartesian, ellipsoid, result);
var cartographic = Cesium.Cartographic.fromCartesian(cartesian, Cesium.Ellipsoid.WGS84);
var cartographic = Cesium.Math.toRadians(175.0);


//라디안,높이(미터) --> 경위도 좌표
//return degree : 경위도
var longitude = Number(Cesium.Math.toDegrees(cartographic.longitude).toFixed(10)); //라디안을 도(경위도) 단위로 변경
var latitude = Number(Cesium.Math.toDegrees(cartographic.latitude).toFixed(10)); //라디안을 도(경위도) 단위로 변경
var height = Number(cartographic.height.toFixed(3)); //라디안을 도(경위도) 단위로 변경
//아래는 위와 동일값
var longitude = cartographic.longitude * (180 / Math.PI); //라디안을 도(경위도) 단위로 변경
var latitude = cartographic.latitude * (180 / Math.PI); //라디안을 도(경위도) 단위로 변경

//Cartesian3 배열
hierarchy : new Cesium.PolygonHierarchy(outlines); //outlines = Array.
const positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]);
const positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]);

//Cartesian3를 복제
const newCartesian = Cesium.Cartesian3.clone(cartesian);

//Cartesian3 배열을 복제
const degreeArray = Cesium.Cartesian3.packArray(cartesianArray);
const newCartesianArray = Cesium.Cartesian3.unpackArray(degreeArray);

Cesium.Cartesian3.pack(Cartesian3, [], 0) == [-3216766.7474918603,4139506.301141361,3620660.378889914];
Cesium.Cartesian3.packArray(Array.〈Cartesian3〉) == [-3216766.7474918603,4139506.301141361,3620660.378889914, -3216783.4893309157,4139488.4788987567,3620665.843922182];