2020년 12월 16일 수요일

Cesium Terrain 적용 예

Cesium에서 사용가능한 Terrain을 조사하고 적용해 보았다.

2D 지형

/**
 * Cesium 평면 지형 가져올때의 예시 코드 (20201202 정상작동 확인됨)
 * Ion.defaultAccessToken 불필요
 * 실 서비스에 제한없이 사용 가능
 */
var terrainProvider = new Cesium.EllipsoidTerrainProvider(), //기본 지형

3D 지형

Cesium Ion Terrain
/**
 * Ion 기본 지형 가져올때의 예시 코드 (20201202 정상작동 확인됨)
 * 지형 사용에 대한 트래픽 용량 제한이 있음
 * 실 서비스를 위해 Commercial 요금제 이상 사용 필요 (https://cesium.com/pricing/)
 * 빠른 로딩 속도 제공 확인
 * 
 * 인증키 필요 여부 : Ion.defaultAccessToken 필요
 * availability 속성 지원 : Yes (지형 공급자가 availability 속성 정의)
 */
var terrainProvider = Cesium.createWorldTerrain();

//옵션 변경 예시 코드 (20201202 정상작동 확인됨)
var terrainProvider = Cesium.createWorldTerrain({
    requestWaterMask : false, //수면에 파도효과
    requestVertexNormals : true //경사 명암효과
});

//Ion에 등록한 사용자 정의 지형 가져올때의 예시 코드 (20201202 정상작동 확인됨)
var terrainProvider = new Cesium.CesiumTerrainProvider({
    url: Cesium.IonResource.fromAssetId(아이디값), //Ion에 지형 업로드시 자동 생성
    requestWaterMask : false, //수면에 파도효과
    requestVertexNormals : true //경사 명암효과
});

MapTiler Terrain
/**
 * maptiler 지형 가져올때의 예시 코드 (20201202 정상작동 확인됨)
 * 지형 사용에 대한 요청 수 제한이 있음
 * 실 서비스를 위해 FLEX 요금제 이상 사용 필요 (https://www.maptiler.com/cloud/plans/)
 * 빠른 로딩 속도 제공 확인
 * 
 * 인증키 필요 여부 : maptiler로부터 발급받은 인증키 필요
 * availability 속성 지원 : Yes (지형 공급자가 availability 속성 정의)
 */
var terrainProvider = new Cesium.CesiumTerrainProvider({
    url: 'https://api.maptiler.com/tiles/terrain-quantized-mesh/?key=인증키',
    credit: new Cesium.Credit("\u003ca href=\"https://www.maptiler.com/copyright/\" target=\"_blank\"\u003e\u0026copy; MapTiler\u003c/a\u003e \u003ca href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\"\u003e\u0026copy; OpenStreetMap contributors\u003c/a\u003e", true),
    requestVertexNormals: true
});

VRTheWorld Terrain
/**
 * VRTheWorld 지형 사용 예시 코드 (20201202 정상작동 확인됨)
 * API에 인증키, 토큰 등 인증 정보 넣는 옵션이 존재하지 않음
 * 실 서비스를 위한 영구적 지형 제공이 되는지 확인 할수 없었음
 * 트래픽, 요청수 등의 스트리밍 용량에 대한 명시적 제한을 확인할 수 없었음
 * 타 지형에 비해 상대적으로 약간 느린 로딩 속도 확인
 * 
 * 인증키 필요 여부 : 불필요
 * availability 속성 지원 : No (지형 공급자가 availability 속성 미정의)
 */
var terrainProvider = new Cesium.VRTheWorldTerrainProvider({
    url : 'https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/',
    credit: new Cesium.Credit('<a href="https://cesium.com/" target="_blank"><img src="/images/cesium_logo.png" title="Cesium"/></a>')
});

Esri ArcGIS Terrain
/**
 * Esri ArcGIS 지형 사용 예시 코드 (20201202 정상작동 확인됨)
 * token 넣는 옵션이 있지만 옵션을 제거 후 사용 가능
 * token 값을 취득하는 방법을 확인 할수 없었음
 * 실 서비스를 위한 영구적 지형 제공이 되는지 확인 할수 없었음
 * 트래픽, 요청수 등의 스트리밍 용량에 대한 명시적 제한을 확인할 수 없었음
 * 타 지형에 비해 상대적으로 많이 느린 통신 속도 확인
 * 
 * 인증키 필요 여부 : 인증키 없을시 언제까지 사용 가능한지 파악 안됨
 * availability 속성 지원 : No (지형 공급자가 availability 속성 미정의)
 */
var terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({
    url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer'
})

//token값이 있으면 응답 거부됨 (20201202 작동불가 확인)
var terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({
    url: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer",
    token : 'KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6g..'
});

Google Terrain
/**
 * Google 지형 사용 예시 코드 (20201202 작동안됨)
 * API는 존재하지만 지형을 불러올 수 없음
 */
var terrainProvider = new Cesium.GoogleEarthEnterpriseTerrainProvider({
    metadata : new GoogleEarthEnterpriseMetadata('http://www.earthenterprise.org/3d'),
    credit: new Cesium.Credit('<a href="https://cesium.com/" target="_blank"><img src="/images/cesium_logo.png" title="Cesium"/></a>')
});

//또 하나의 코드 (20201202 작동안됨)
var terrainProvider = new Cesium.GoogleEarthEnterpriseTerrainProvider({
    metadata: new Cesium.GoogleEarthEnterpriseMetadata(
        new Cesium.Resource({
            url: "http://www.earthenterprise.org/3d",
//          proxy: new Cesium.DefaultProxy("/proxy/"),
        })
    ),
});