지형에 대하여 토량계산을 가능하게 합니다.
JS SCRIPT
//분석 메쉬가 위치할 공중 위치를 설정합니다
var m_BaseHeight = 100;
// 면적 계산
this.CalcVolumn = function () {
if (Volumn3D) {
SliceByHeight(this.cuttingHeight);
var fill = calculateVolume(Volumn3D.downMesh);
var cut = calculateVolume(Volumn3D.upMesh);
alert("적토량 : " + format(fill.toFixed(2)) + " 입방미터\n" + "절토량 : " + format(cut.toFixed(2)) + " 입방미터");
}
}
// 면적의 크기를 설정합니다
function MakeVolumn(polygonPtList) {
if (!cmworld) return;
if (!polygonPtList) return;
if (polygonPtList.length < 3)
return;
var minx = Number.MAX_VALUE;
var maxx = Number.MIN_VALUE;
var miny = Number.MAX_VALUE;
var maxy = Number.MIN_VALUE;
for (var i = 0; i < polygonPtList.length; i++) {
if (minx > polygonPtList[i].x) minx = polygonPtList[i].x;
if (maxx < polygonPtList[i].x) maxx = polygonPtList[i].x;
if (miny > polygonPtList[i].y) miny = polygonPtList[i].y;
if (maxy < polygonPtList[i].y) maxy = polygonPtList[i].y;
}
var level = getZoomLevel(1000);
var powOfLevel = Math.pow(2, level);
var minCol = CMWORLD.CmMathEngine.getColFromLongitude(minx, cmworld.option.TileLevelRange[level]);
var maxCol = CMWORLD.CmMathEngine.getColFromLongitude(maxx, cmworld.option.TileLevelRange[level]);
var minRow = CMWORLD.CmMathEngine.getRowFromLatitude(miny, cmworld.option.TileLevelRange[level]);
var maxRow = CMWORLD.CmMathEngine.getRowFromLatitude(maxy, cmworld.option.TileLevelRange[level]);
var downloadList = [];
var serverURL = cmworld.getBaseQuadTerrainLayer().mapInfo.serverURL;
var url;
for (var row = minRow; row <= maxRow; row++) {
for (var col = minCol; col <= maxCol; col++) {
url = serverURL.replace("{Z}", level).replace("{Y}", row).replace("{X}", col);
url = serverURL.replace("{z}", level).replace("{y}", row).replace("{x}", col);
var func = downloadData(url, level, row, col);
downloadList.push(func);
}
}
var terrainList = [];
$.when.apply(undefined, downloadList).done(function () {
var objects = arguments;
for (var i = 0; i < objects.length; i++) {
var terrainData = getTerrainData(objects[i].data, objects[i].level, objects[i].row, objects[i].col);
terrainList.push(terrainData);
}
TerrainMeshProcess(terrainList, minRow, maxRow, minCol, maxCol);
});
}