* 전체 소스코드 내용은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<!DOCTYPE html>
<html lang='en'>
<meta charset="UTF-8">
<head>
<script src="js/Cesium-1.54/Build/Cesium/Cesium.js"></script>
<link href="js/Cesium-1.54/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
<style>
@import url(js/Cesium-1.54/Apps/Sandcastle/templates/bucket.css);
</style>
<div id="cesiumContainer" style="width:auto; height:700px"></div>
<script>
var extent = Cesium.Rectangle.fromDegrees(117.896284, 31.499028, 139.597380, 43.311528);
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extent;
Cesium.Camera.DEFAULT_VIEW_FACTOR = 0.7;
var viewer = new Cesium.Viewer('cesiumContainer',{
timeline : false,
animation : false,
selectionIndicator : false,
navigationHelpButton : false,
infoBox : false,
navigationInstructionsInitiallyVisible : false
});
var scene = viewer.scene;
// 위,경도 표출될 라벨의 옵션을 파라미터로 지정
var entity = viewer.entities.add({
label : {
show : true,
showBackground : true,
backgroundColor : Cesium.Color.BLACK,
font : '25px sans-serif',
horizontalOrigin : Cesium.HorizontalOrigin.LEFT,
//verticalOrigin을 top으로 지정
verticalOrigin : Cesium.VerticalOrigin.TOP,
//pixelOffset을 통해 label의 상세 위치를 지정 / Cartesian2 사용(x,y)
pixelOffset : new Cesium.Cartesian2(15, 0)
}
});
// eventhandler 변수에 screenspacehandler를 담음
var eventhandler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
// movement가 발생하면 위,경도 값을 표출
eventhandler.setInputAction(function(movement){
var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
if(cartesian){
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var longitude = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
var latitude = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);
entity.position = cartesian;
entity.label.show = true;
entity.label.text = '경도 : '+('' + longitude).slice(-7) + '\u00B0' + '\n위도 : '+('' + latitude).slice(-7) + '\u00B0';
}else{
entity.label.show = false;
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
</script>
</head>
<body>
</body>
</html>
|
cs |
* 28 ~ 40행은 위,경도를 표출할 라벨의 옵션을 key : value 값, 파라미터로 지정한 부분입니다.
|
var entity = viewer.entities.add({
label : {
show : true,
showBackground : true,
backgroundColor : Cesium.Color.BLACK,
font : '25px sans-serif',
horizontalOrigin : Cesium.HorizontalOrigin.LEFT,
//verticalOrigin을 top으로 지정
verticalOrigin : Cesium.VerticalOrigin.TOP,
//pixelOffset을 통해 label의 상세 위치를 지정 / Cartesian2 사용(x,y)
pixelOffset : new Cesium.Cartesian2(15, 0)
}
});
|
cs |
* VerticalOrigin에 대한 설명입니다. (자세한 내용은 CesiumDocument를 참고하세요.)
각 포지션을 통해 라벨이 표출되는 위치를 조정할 수 있습니다.
* Cartesian2에 대한 설명입니다. (자세한 내용은 CesiumDocument를 참고하세요.)
Cartesian2는 2차원적 개념으로 x, y 값을 갖게됩니다.
* 44 ~ 57행은 MouseMove 이벤트를 활용하여 movement가 발생함에 따라 위,경도 값이 표출되게끔 하는 부분입니다.
eventhandler.setInputAction(function(movement){
var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
if(cartesian){
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var longitude = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
var latitude = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);
entity.position = cartesian;
entity.label.show = true;
entity.label.text = '경도 : '+('' + longitude).slice(-7) + '\u00B0' + '\n위도 : '+('' + latitude).slice(-7) + '\u00B0';
}else{
entity.label.show = false;
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
cs |
cartographic변수에 cartesian을 활용한 위,경도 값을 담아줍니다.
* Cartographic에 대한 설명입니다. (자세한 내용은 CesiumDocument를 참고하세요.)
기본적으로 Cartesian3(x,y,z)값을 갖게되며 기본 투영체 및 좌표계로 WGS84를 사용한다는 것을 알 수 있습니다.
결과 화면 보겠습니다.
라벨이 마우스를 따라다니며 위,경도를 알려주는 것을 볼 수 있습니다. 제주 한라산의 위,경도는 사진과 같군요
'꿀팁 - CesiumJS, nullschool' 카테고리의 다른 글
Cesium js 와 Qgis를 활용한 3D 건물 구현하기 (0) | 2019.04.01 |
---|---|
(재미삼아) Cesium JS를 활용한 운석 낙하 시뮬레이션 (3) | 2019.03.27 |
Cesium JS에서 gltf 포맷 활용 및 HeadingPitchRange 설정 (0) | 2019.02.26 |
Cesium JS 3D 객체에 마우스 이벤트 연동 (3) | 2019.02.19 |
Cesium JS에서 glTF 포맷 활용하기 (1) | 2019.02.12 |