CmWorld Home Return

지도응용

CmWorld 지도

Vworld 지도

3D 벡터

이미지 적용

극점 그리기

그래픽을 사용한 등고선

등고선

건물 용적률 계산

광원

광원 기준점

태양의 움직임

서치라이트

지오메트리

전광판

이미지 추가

모형 추가

3차원 입체격자

입체격자 컨셉트

입체격자 적용예

입체격자 디테일

지하공간

벡터형상

시각정보

3D 입체효과

건불정보

드론 비행

특정위치로 이동

지하지형물 확인하기

1인칭 시점

공간분석

침수지역 예측

적성 토량 예측

Sample 지도응용 건물 용적률 계산

건물 용적률 계산

3D 지도상의 건물 모델에 정보, 속성등을 넣어 육안으로 확인 할수 있도록 하였습니다.

CmWorld3 Sample
SHP열기 (용적율계산으로 허용가능건물모양)

JS SCRIPT


		
var cmworld;

//용적율 변수
var m_BuildingRates = {};
var m_PNUField = "A1";
var m_CodeField = "용도코드";
var m_LandAreaField = "LAND_AREA";
var m_BuildAreaField = "BUILD_AREA";

var wgslatlon;
var wgsutm;
var utmk;

function getBuildingRates()
{
   m_BuildingRates['UQA111'] = 1.00;
   m_BuildingRates['UQA112'] = 1.20;
   m_BuildingRates['UQA121'] = 1.50;
   m_BuildingRates['UQA122'] = 2.00;
   m_BuildingRates['UQA123'] = 2.50;
   m_BuildingRates['UQA130'] = 4.00;
   m_BuildingRates['UQA210'] = 10.00;
   m_BuildingRates['UQA220'] = 8.00;
   m_BuildingRates['UQA230'] = 6.00;
   m_BuildingRates['UQA240'] = 6.00;
   m_BuildingRates['UQA310'] = 2.00;
   m_BuildingRates['UQA320'] = 2.00;
   m_BuildingRates['UQA330'] = 4.00;
   m_BuildingRates['UQA410'] = 0.50;
   m_BuildingRates['UQA420'] = 0.50;
   m_BuildingRates['UQA430'] = 0.50;
}

function openShp()
{
	var url2 = "파일경로";
	shp(url2).then(function (data2) {
  
	var geoDataLen2 = data2.features.length; // 실행한 shp 파일의 객체 수를 저장합니다
	console.log(geoDataLen2);
	
	if (geoDataLen2 == 0) return;
	console.log('============== jijuk');
	
	var pnus = {};
	for (var i = 0; i < geoDataLen2; i++)
	{
	   pnus[data2.features[i].properties.A1] = data2.features[i].geometry.coordinates[0]; //PNU에 포인트 할당
	}
	
	var url = "파일경로";
	
	// shp 파일을 실행하여 데이터를 조회합니다
	shp(url).then(function (data)
	{
		var geoDataLen = data.features.length; // 실행한 shp 파일의 객체 수를 저장합니다
		
		if (geoDataLen == 0) return;
		
		//var light = new THREE.DirectionalLight(0x015AB3);
		var light = new THREE.DirectionalLight(0xffffff);
		light.position.set(0.75, 0.75, 1.0).normalize();
		
		cmworld.getWorldScene().add(light);
		
		var jijuk_ptlist, code, areaLand, areaBuild;
		var areaY; //용적율 면적
		var ptlist, dHeight, h, model, dFloor, iFloor;
		for (var i = 0; i < geoDataLen; i++)
		{
		    //console.log(i);
			try
			{
			
			   ptlist = data.features[i].geometry.coordinates[0];
			   ptlist.length = ptlist.length - 1;
			
			   for (var j = 0; j < ptlist.length; j++)
			   {
			      ptlist[j].x = ptlist[j][0]; ptlist[j].y = ptlist[j][1];
			   }
			
			
			   jijuk_ptlist = pnus[data.features[i].properties.A1]; //PNU
			   if (!jijuk_ptlist)
			   {
			      continue;
			   }
			
			   for (var j = 0; j < jijuk_ptlist.length; j++)
			   {
			      jijuk_ptlist[j].x = jijuk_ptlist[j][0]; jijuk_ptlist[j].y = jijuk_ptlist[j][1];
			   }
			
			
			   ptlist = sortNorthFirst(ptlist);
			   jijuk_ptlist = sortNorthFirst(jijuk_ptlist);
			
			   code = data.features[i].properties.CODE.trim();
			
			   if (!m_BuildingRates[code])
			   {
			      continue;
			   }
			
			   h = cmworld.getGroundHeight(ptlist[0].x, ptlist[0].y); //지형 높이
			
			   areaLand = data.features[i].properties.LAND_AREA;
			   areaBuild = data.features[i].properties.BUILD_AREA;
			
			   areaY = areaLand * m_BuildingRates[code]; //토지면적 X 용적율 = 가능한 면적
			   //가능 층수
			   dFloor = areaY / areaBuild;
			   iFloor = parseInt(dFloor);
			
			   var bBoxBuild = true;
			   if (code.indexOf('UQA1') == 0) //주거지역은 사선처리
			   {
			      if (iFloor > 2) //3층 이하이면 박스로 그림
			      {
			         bBoxBuild = false;
			
			         // 층수, 토지면적, 건물면적, 용적율, 토지ptlist, 건물 ptlist
			         // iFloor, areaLand, areaBuild, m_BuildingRates[code], jijuk_ptlist, ptlist
			      
			         model = makeBuildingMesh2(iFloor, areaLand, areaBuild, m_BuildingRates[code], jijuk_ptlist, ptlist);
			
			         if (model)
			         {
			            var obj = new CMWORLD.UserObject(name, model, new THREE.Vector3(ptlist[0].x, ptlist[0].y, h));
			
			            obj.rotate4GlobeEarth();
			            var userLayer = getUserLayer();
			
			            userLayer.add(obj);
			         }
			      }
			   }
			
			   if (bBoxBuild == true) //박스형 건물
			   {
			      dHeight = iFloor * 3; //ptlist를 dHeight만큼 그리고, 나머지 옥상 그림
			      remareaBuild = areaBuild * (dFloor - iFloor); //옥상 면적... ptlist 다시 계산해서 옥상 그리기
			
			      if (dHeight < 3) dHeight = 3;
			
			      var color = 0x505050;
			      //건물 그리자.
			      ptlist = sortSouthFirst(ptlist);
			
			      model = makeBuildingMesh(ptlist, dHeight, areaBuild, remareaBuild, color);
			
			      //console.log(data.features[i]);
			      if (model)
			      {
			         var obj = new CMWORLD.UserObject(name, model, new THREE.Vector3(ptlist[0].x, ptlist[0].y, h));
			
			         obj.rotate4GlobeEarth();
			         var userLayer = getUserLayer();
			
			         userLayer.add(obj);
			      }
			   }
			} catch(e) {
			    //console.log("Error Message: " + i.toString() + " " +  e.message);
			    }
			
			}
		});
	});
}

	
License지원브라우저Tel: 02-578-5101E-mail: mspyun@cmworld.co.kr

© CmWorld INC all right reserved.