๋งํฌ ๋๋ก ๊ตํต๋ง ๋ฐ์ดํฐ๋ฅผ CesiumJS์ ์ฌ๋ฆฌ๋ ์ํ
๊ฒฐ๊ณผ ์์ฝ
โ Did
- shp โ kml || geojson (geojson์ ์ข ๊นจ์ง๋ค) in QGIS
- ๋งํฌ ๋ฐ์ดํฐ๋ฅผ cesium asset ์ ์ฅ์์ ์ฌ๋ฆฌ๊ธฐ
- ๋งํฌ ๋ฐ์ดํฐ ํ์ถํ๊ธฐ
โ Did Not
- 3d ์ง๋์ KML Asset ์ฌ๋ฆฌ๊ธฐ
- ๋ฌธ์ ์ํฉ: 3D ๋ฐฐ๊ฒฝ ์ง๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ฌปํ๊ณ , ๊ฑด๋ฌผ๊ณผ ํจ๊ป ์ฌ๋ฆฌ๋ฉด ๋ชจ๋ ์์์ ๊ณ ๋ ๊ฐ์ด ์ฃผ์ด์ง๋์ง ๊ณต์ค์ ๋ ์๋ค.
- ์์ฌ๋๋ ๋ถ๋ถ: 2D์์๋ ๋ฌธ์ ์์ด ๋ฐ์ดํฐ ํ์ธ์ด ๊ฐ๋ฅํ๊ฑธ ๋ณด๋ฉด ๊ณ ๋ ์ค์ ๊ณผ ๊ด๋ จ๋ ๋ญ๊ฐ์ธ ๋ฏ. KML ๋ณํ ๊ณผ์ ์์ ์ผ๋ถ ํ๊ทธ ๊ฐ์ด NULL๋ก ์ ์ฅ๋จ. KML์ ์๋ณธ๋ฐ์ดํฐ ๋ํ 2D ๋ฐ์ดํฐ์ด๊ธด ํจ
- ์๋ํ ๊ฒ: ์ด ๊ธ๋ณด๊ณ <altitudeMode> ์์ฑ์ absolute ๊ฐ์ ์ถ๊ฐํ๋๋ฐ ๋ณํจ ์์
- ์๋ํ ๊ฒ: ์์ฑ ๊ฐ์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ฃผ๊ฑฐ๋ GeoServer์์ WMS๋ก ๊ฐ์ ธ์จ ๋ ์ด์ด ์ถ๊ฐํ๊ธฐ
โ๏ธ To do
- Try: 3D์ง๋์ Asset ์ฌ๋ฆฌ๊ธฐ ์๋ ์์ ํญ๋ชฉ
- ๊ฒฝ์๋ ์ ๋ ฅ๋ฐ๊ณ ํด๋น ์์น์ 3D๋ชจ๋ธ ์ถ๊ฐ
- ์๊ฐ ํ๋ฆ์ด ํฌํจ๋ CZML ํ์ถ
CesiumJS์ ๊ธฐ๋ฅ์ ํ์ํ๊ณ ์ถ์๊ฑฐ๋ผ๋ฉด ๊ตณ์ด ์น์๋ฒ๋ฅผ ์ค์ ํ ํ์ ์์ด, ์ ๊ณต๋ ์๋๋ฐ์ค ํ์ด์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Cesium Sandcastle
The Cesium Sandcastle provides an interactive environment for testing Cesium code.
sandcastle.cesium.com
์คํ
- NodeJS 16.13.2.
- Express 4.17.2.
- CesiumJS 1.90.
์น ์๋ฒ์ ํ์ถ์ฉ ํ์ด์ง
ํด๋ณด๋ ค ํ๋ ๊ฒ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ์ธ๋ฐ, ์น ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ดค์ ์์ง ํ๋ ์ผ์ ํ์ถ์ฉ ํ์ด์ง๋ฅผ ๋ฐํํ๋ ์ผ ๋ฐ์ ์๋ค. (๋ง์ฝ ๋ก์ปฌ์์ HTML๋ง ๊ฐ์ง๊ณ ํ ์คํธํด๋ด์ผ์ง ํ๋ค๋ฉด ๊ทธ๋ฅ ์์ ์๋๋ฐ์ค ํ์ด์ง ๊ฐ์ ํ๋ ๊ฒ ๋ซ๋ค.) ์ค์ ์๋น์ค๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ง๋ ํ์ถ์ด์ผ ์ฌ์ฉ์ ์ปดํจํฐ์์ ํ๋๊ฑฐ๊ณ ์๋ฒ๊ฐ ํ๋ ์ผ์ DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ๋ค์ฃผ๋ ๊ฒ ์ฃผ์ผ๊ฒ ๊ฐ์์ ๋น๋๊ธฐ! ๊ทธ๋ผ NodeJS! ์ด๋ฐ ๋จ์ํ ์๊ฐ์ผ๋ก NodeJS๋ฅผ ์ ํํ๋ค. ์ฌ์ค ๊ทธ๋์ Spring๊ณผ Tomcat๋ง ์จ๋ด์ ๋ค๋ฅธ ๊ฒ๋ ์ฐ๋จนํด๋ณด์๋ ๊ฒ ๊ฐ์ฅ ์ปธ๋ค.

nodejs ์ฐ๋จน ์งง์ ํ๊ธฐ: Spring์ด J๋ผ๋ฉด NodeJs๋ P์ด๋ค. ์ ์ Vue ์ผ์ ๋๋ ๋๊ผ์ง๋ง ๋ ๊ฐ์ ์ฌ๋์ด ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ๊ฒํฐ ์ฅ์ธ์ผ๋ก ์ ์งํ๋ ๊ฒ์ ์์์ฃฝ ๋จน๊ธฐ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
NodeJS ์ค์นํ๊ณ ์ฒซ ํ์ด์ง ์ ๊ทผํ๋ ์ํ
ํ์ถ์ฉ ํ์ด์ง์ CesiumJS ์ ์ฉํ๊ธฐ
์ด ๊ธ์ ๊ทธ๋๋ก ๋ฐ๋ผํ๋ฉด ๋๋ค.
1. Cesium JS ๊ณ์ ์์ฑ ๋ฐ ํ ํฐ ๋ฐ๊ธ๋ฐ๊ธฐ
Cesium ion
cesium.com

2. Cesium ํด๋ผ์ด์ธํธ ์ค์นํ๊ธฐ
NPM์ผ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ก์ปฌ์ ์ค์นํด๋ ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ฐจํผ ํ์ถ์ฉ์ธ๋ฐ ํ๋ก์ ํธ ํ์ผ์ ๊ฐ๋ณ๊ฒ ๋ง๋ค์ง, ๋ผ๋ ๋ง์ธ๋๋ก CDN์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
<script src="https://cesium.com/downloads/cesiumjs/releases/1.90/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.90/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
3. ํ์ถ ํ์ด์ง main.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cesium.com/downloads/cesiumjs/releases/1.90/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.90/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
<div id="cesiumContainer"></div>
<script>
Cesium.Ion.defaultAccessToken = '๋ฐ๊ธ๋ฐ์ ํ ํฐ';
// ๊ธฐ๋ณธ ์งํ
const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
// ๊ฑด๋ฌผ
const buildingTileset = viewer.scene.primitives.add(Cesium.createOsmBuildings());
// ์นด๋ฉ๋ผ ์์น
viewer.camera.flyTo({
/// fromDegrees(๊ฒฝ๋, ์๋ [, ๋์ด])
destination: Cesium.Cartesian3.fromDegrees(126.97698794172634, 37.57834971978493, 400),
orientation: {
heading: Cesium.Math.toRadians(0.0),
pitch: Cesium.Math.toRadians(-15.0),
}
});
</script>
</body>
</html>
4. ๊ฒฐ๊ณผ
๊ดํ๋ฌธ ์์ชฝ์ผ๋ก ์นด๋ฉ๋ผ๊ฐ ์ด๋ํ๊ฒ ์ค์ ํจ.

5. ๋งํฌ ๋ฐ์ดํฐ ์ ๋ก๋ํ๊ธฐ
(๋ฏธ์๋ฃ)
์๋๋ ์์ ๊ฐ์ด๋ ๋ด์ฉ๋๋ก ์ ๋ก๋ ๊ณผ์ ๊น์ง ๊ตฌํํ๋ ค๊ณ ํ๋๋ฐ, ํ ์คํธํ๋ ์ค ๋ณ์๋ฅผ ๋ง๋์ ์ผ์์ ์ง
์๊ฐํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- shp์ kml๋ก ๋ณํ <- ์ด ๊ณผ์ ์์ ๋ฐ์ดํฐ ์์ถ์ด ์๋ผ์ ํ์ผ ๋ฒ์๋ฅผ ์์ธ ์ฌ์ด์ฆ๋ก cropํจ (QGIS)
- kml์ Amazon S3(Asset Storage)์ ์ ์ฅ
- ํ์ถ
<script>
Cesium.Ion.defaultAccessToken = "๋ฐ๊ธ๋ฐ์ํ ํฐ";
var viewer = new Cesium.Viewer("cesiumContainer");
var promise = Cesium.IonResource.fromAssetId(์ ์ฅ๋ ์์
์์ด๋)
.then(function (resource) {
return Cesium.KmlDataSource.load(resource, {
camera: viewer.scene.camera,
canvas: viewer.scene.canvas,
});
})
.then(function (dataSource) {
return viewer.dataSources.add(dataSource);
})
.then(function (dataSource) {
return viewer.zoomTo(dataSource);
})
.otherwise(function (error) {
console.log(error);
});
</script>
์ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด 2D ์ง๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. viewer ์์ฑ ์ {terrainProvider: Cesium.createWorldTerrain()} ํ๋ผ๋ฏธํฐ๊ฐ ์์ด ์งํ์ด ๋ง๋ค์ด์ง์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.

๊ทธ๋์ ์๋์ ๊ฐ์ด ์งํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฑด๋ฌผ์ ๋์ด๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ์ํ ์ํ๋ก ์ถ๊ฐ๋๊ณ , ๋งํฌ ๋ฐ์ดํฐ๋ ์งํ ๋์ด์ ํ๋ฌปํ๋ฒ๋ฆฐ๋ค.
// ์งํ ๋ฐ์ดํฐ ์ค์
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
// 3D ๊ฑด๋ฌผ ๋ฐ์ดํฐ ์ค์
const buildingTileset = viewer.scene.primitives.add(Cesium.createOsmBuildings());

์ง๊ธ ์๊ฐํด๋ณด๋๊น ๋งํฌ ์๋ณธ ๋ฐ์ดํฐ๊ฐ 2D๋ผ์ ๊ทธ๋ฐ ๋ฏ. ๊ทผ๋ฐ ๋จ์ํ altitude ๋ชจ๋ ์์ฑ๊ฐ์ ๋ฐ๊ฟ์ฃผ๋ ๊ฑธ๋ก๋ ๋ถ์กฑํ ๋ชจ์์ด๋ค.
์ฐธ๊ณ ์๋ฃ
'๐ ํ์ต๊ณผ ๊ฐ๋ฐ ๊ธฐ๋ก > GIS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CesiumJS: 3D ์งํ ์์ ํด๋ฆฌ๊ณค๊ณผ ์ ๊ทธ๋ฆฌ๊ธฐ (0) | 2024.08.09 |
---|---|
ํ์ค๋ ธ๋๋งํฌ ์ปฌ๋ผ ๋ถ์ (0) | 2022.01.12 |
QGIS๋ฅผ ์ฌ์ฉํ์ฌ, ์ขํ๊ณ ์ ๋ณด๋ฅผ ํฌํจํ ๋ฐ์ดํฐ ๋ด๋ณด๋ด๊ธฐ (0) | 2022.01.07 |
[GIS] GeoCoding (0) | 2021.08.31 |
[GIS] ์ฃผ์ ์ขํ๊ณ (0) | 2021.08.12 |