document.write(''); //显示全部建筑物 var bu_overlays3D = []; function showBuildingAll(data){ $.each(data, function(index) { var polygonArrtmp = stringToNumber(this.coordinates); var polygonArr = []; for ( var i = 0; i < polygonArrtmp.length; i+=2) { polygonArr.push(polygonArrtmp[i],polygonArrtmp[i+1]); } var tmpGeometryInstance = new Cesium.GeometryInstance({ id : "bu" + this.buildingId, geometry : new Cesium.PolygonGeometry({ polygonHierarchy : new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArray(polygonArr)), extrudedHeight : 5000 }), attributes : { color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.DEEPSKYBLUE.withAlpha(0.0)) } }); var tmpClassificationPrimitive = new Cesium.ClassificationPrimitive({ geometryInstances : tmpGeometryInstance }); viewer.scene.primitives.add(tmpClassificationPrimitive); bu_overlays3D.push(tmpClassificationPrimitive); }); addPOMListener(); } function closeBuilding(){ for ( var i = 0; i < bu_overlays3D.length; i++) { viewer.scene.primitives.remove(bu_overlays3D[i]); } bu_overlays3D.length = 0; clearSelectBuildingAll(); closePreBuilding(); } var prebuildingprimitive = undefined; function showBuildingById(data){ closePreBuilding(); for (var i = 0; i < buildingData.length; i++) { if(buildingData[i].buildingId==data.buildingId){ var polygonArrtmp = stringToNumber(data.coordinates); var polygonArr = []; for ( var i = 0; i < polygonArrtmp.length; i+=2) { polygonArr.push(polygonArrtmp[i],polygonArrtmp[i+1]); } var tmpGeometryInstance = new Cesium.GeometryInstance({ id : "bubyid" + data.buildingId, geometry : new Cesium.PolygonGeometry({ polygonHierarchy : new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArray(polygonArr)), extrudedHeight : 5000 }), attributes : { color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW.withAlpha(0.6)) } }); var tmpClassificationPrimitive = new Cesium.ClassificationPrimitive({ geometryInstances : tmpGeometryInstance }); viewer.scene.primitives.add(tmpClassificationPrimitive); prebuildingprimitive = tmpClassificationPrimitive; break; } } } function closePreBuilding(){ if(prebuildingprimitive!=undefined){ viewer.scene.primitives.remove(prebuildingprimitive); } } //框选显示,并统计分析 var buildingpointArr = []; function selectbypolygon(){ clearSelectBuildingAll(); var activeShapePoints = []; var comPoints = []; function createPoint(worldPosition) { buildingpointArr.push(viewer.entities.add({ position : worldPosition, point : { color : Cesium.Color.RED, pixelSize : 10, outlineWidth : 1, outlineColor : Cesium.Color.WHITE, disableDepthTestDistance : 10000 } })); } function drawPolygon() { if((viewer.entities.getById('comEntity')!==undefined)){ viewer.entities.removeById('comEntity'); } viewer.entities.add({ id: 'comEntity', polygon: { hierarchy: new Cesium.PolygonHierarchy(activeShapePoints), /*new Cesium.CallbackProperty(function () { return activeShapePoints; }, false),*/ material: new Cesium.ColorMaterialProperty(Cesium.Color.RED.withAlpha(0.3)), classificationType : Cesium.ClassificationType.BOTH, outline: true, outlineColor: Cesium.Color.WHITE } }); } var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function(movement) { var earthPosition = viewer.scene.pickPosition(movement.position); //获取地理坐标(经度、纬度、高程) var cartographic = Cesium.Cartographic.fromCartesian(earthPosition); var heightString = cartographic.height; if (Number(heightString) < 0) { var ray = viewer.camera.getPickRay(movement.position); earthPosition = viewer.scene.globe.pick(ray, viewer.scene); } cartographic = Cesium.Cartographic.fromCartesian(earthPosition); var longitudeString = Cesium.Math.toDegrees(cartographic.longitude); var latitudeString = Cesium.Math.toDegrees(cartographic.latitude); var comPoint = {'x':Number(longitudeString), 'y':Number(latitudeString)}; comPoints.push(comPoint); if (Cesium.defined(earthPosition)) { activeShapePoints.push(earthPosition); if(activeShapePoints.length>3){ drawPolygon(); } createPoint(earthPosition); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); handler.setInputAction(function(movement) { var newPosition = viewer.scene.pickPosition(movement.endPosition); var cartographic = Cesium.Cartographic.fromCartesian(newPosition); var height = cartographic.height; //模型高度 if (Number(height) < 0) { var ray = viewer.camera.getPickRay(movement.endPosition); newPosition = viewer.scene.globe.pick(ray, viewer.scene); } activeShapePoints.pop(); activeShapePoints.push(newPosition); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); handler.setInputAction(function(movement) { handler = handler && handler.destroy(); if (activeShapePoints.length > 3) { drawPolygon(); showbuildingComresult(comPoints); //计算符合条件的数据并显示 } }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); } var inbuildings = []; function showbuildingComresult(comPoints){ clearSelectResult(); clearQueryResult(); for (var i = 0; i < buildingData.length; i++) { var coordArr = buildingData[i].coordinates.split(','); var targetPoi = []; for (var j = 0; j < coordArr.length; j+=3) { targetPoi.push({'x':Number(coordArr[j]),'y':Number(coordArr[j+1])}); } if(isPointInPolygonBidirectional(comPoints,targetPoi)){ var attributes = bu_overlays3D[i].getGeometryInstanceAttributes("bu"+buildingData[i].buildingId); attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.YELLOW.withAlpha(0.6)); inbuildings.push(i); } } showbuildingstat(); } var shpQArr = []; function showShpQueryBuilding(shpdata){ clearSelectBuildingAll(); for (var i = 0; i < shpdata.length; i++) { if(shpdata[i].buildingId.split('_')[0]!="qshp"){ for (var j = 0; j < buildingData.length; j++) { if(shpdata[i].buildingId == buildingData[j].buildingId){ var attributes = bu_overlays3D[j].getGeometryInstanceAttributes("bu"+buildingData[j].buildingId); attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.YELLOW.withAlpha(0.6)); inbuildings.push(j); } } }else{ var polygonArrtmp = stringToNumber(shpdata[i].coordinates); shpQArr.push(viewer.entities.add({ polygon : { hierarchy : new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(polygonArrtmp)), material : new Cesium.ColorMaterialProperty(Cesium.Color.RED.withAlpha(0.5)), classificationType : Cesium.ClassificationType.BOTH } })); } } showbuildingstat(); } function showbuildingstat(){ $('#buildingStat').show(); $('#buildinglandStat').show(); var statz1 = 0, statz2 = 0, statz3 = 0, statz4 = 0, statz5 = 0, statz6 = 0; var statj1 = 0, statj2 = 0, statj3 = 0, statj4 = 0, statj5 = 0; var statzb1 = 0, statzb2 = 0, statzb3 = 0, statzb4 = 0, statzb5 = 0, statzb6 = 0; var statjb1 = 0, statjb2 = 0, statjb3 = 0, statjb4 = 0, statjb5 = 0; for (var i = 0; i < inbuildings.length; i++) { switch (Number(buildingData[inbuildings[i]].fwcs)) { case 1: statz1 += Number(buildingData[inbuildings[i]].jzzdmj); statzb1 += Number(buildingData[inbuildings[i]].sjjzmj); break; case 2: statz2 += Number(buildingData[inbuildings[i]].jzzdmj); statzb2 += Number(buildingData[inbuildings[i]].sjjzmj); break; case 3: statz3 += Number(buildingData[inbuildings[i]].jzzdmj); statzb3 += Number(buildingData[inbuildings[i]].sjjzmj); break; case 4: statz4 += Number(buildingData[inbuildings[i]].jzzdmj); statzb4 += Number(buildingData[inbuildings[i]].sjjzmj); break; case 5: statz5 += Number(buildingData[inbuildings[i]].jzzdmj); statzb5 += Number(buildingData[inbuildings[i]].sjjzmj); break; case 6: statz6 += Number(buildingData[inbuildings[i]].jzzdmj); statzb6 += Number(buildingData[inbuildings[i]].sjjzmj); break; default: statz6 += Number(buildingData[inbuildings[i]].jzzdmj); statzb6 += Number(buildingData[inbuildings[i]].sjjzmj); break; } switch (buildingData[inbuildings[i]].fwjg) { case '砼': statj1 += Number(buildingData[inbuildings[i]].jzzdmj); statjb1 += Number(buildingData[inbuildings[i]].sjjzmj); break; case '砖': statj2 += Number(buildingData[inbuildings[i]].jzzdmj); statjb2 += Number(buildingData[inbuildings[i]].sjjzmj); break; case '混': statj3 += Number(buildingData[inbuildings[i]].jzzdmj); statjb3 += Number(buildingData[inbuildings[i]].sjjzmj); break; case '简': statj4 += Number(buildingData[inbuildings[i]].jzzdmj); statjb4 += Number(buildingData[inbuildings[i]].sjjzmj); break; case '棚': statj5 += Number(buildingData[inbuildings[i]].jzzdmj); statjb5 += Number(buildingData[inbuildings[i]].sjjzmj); break; default: statj5 += Number(buildingData[inbuildings[i]].jzzdmj); statjb5 += Number(buildingData[inbuildings[i]].sjjzmj); break; } } var buildinglandtotal = statz1+statz2+statz3+statz4+statz5+statz6; var buildingtotal = statzb1+statzb2+statzb3+statzb4+statzb5+statzb6; var buildingStat = echarts.init(document.getElementById("buildingStat"), 'dark'); var buildingOption = { title : { text: '面积统计', subtext: '实际建筑面积共: '+buildingtotal.toFixed(1)+'平方米', textStyle: {fontSize:15}, subtextStyle: {fontSize:13,color:'#eee'} }, legend: {bottom : '5px'}, tooltip: {}, toolbox: { show : true, feature : { mark : {show: true}, dataView : {show: false, readOnly: false}, saveAsImage : {show: false} } }, backgroundColor : 'rgba(255, 255, 255, 0)', dataset: { dimensions: ['product', '1层', '2层', '3层', '4层', '5层', '6层以上'], source: [{product: '建筑占地面积', '1层': statz1.toFixed(1), '2层': statz2.toFixed(1), '3层': statz3.toFixed(1), '4层': statz4.toFixed(1), '5层': statz5.toFixed(1), '6层以上': statz6.toFixed(1)}, {product: '实际建筑面积', '1层': statzb1.toFixed(1), '2层': statzb2.toFixed(1), '3层': statzb3.toFixed(1), '4层': statzb4.toFixed(1), '5层': statzb5.toFixed(1), '6层以上': statzb6.toFixed(1)}] }, xAxis: {type: 'category'}, yAxis: {}, series: [ {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'} ] }; buildingStat.setOption(buildingOption), $(window).resize(buildingStat.resize); var buildinglandStat = echarts.init(document.getElementById("buildinglandStat"), 'dark'); var buildinglandOption = { title : { text: '面积统计', subtext: '实际建筑面积共: '+buildingtotal.toFixed(1)+'平方米', textStyle: {fontSize:15}, subtextStyle: {fontSize:13,color:'#eee'} }, legend: {bottom : '5px'}, tooltip: {}, toolbox: { show : true, feature : { mark : {show: true}, dataView : {show: false, readOnly: false}, saveAsImage : {show: false} } }, backgroundColor : 'rgba(255, 255, 255, 0)', dataset: { dimensions: ['product', '砼', '砖', '混', '简', '棚'], source: [{product: '建筑占地面积', '砼': statj1.toFixed(1), '砖': statj2.toFixed(1), '混': statj3.toFixed(1), '简': statj4.toFixed(1), '棚': statj5.toFixed(1)}, {product: '实际建筑面积', '砼': statjb1.toFixed(1), '砖': statjb2.toFixed(1), '混': statjb3.toFixed(1), '简': statjb4.toFixed(1), '棚': statjb5.toFixed(1)}] }, xAxis: {type: 'category'}, yAxis: {}, series: [ {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'} ] }; buildinglandStat.setOption(buildinglandOption), $(window).resize(buildinglandStat.resize); } function clearSelectBuildingAll(){ if( (viewer.entities.getById('comEntity') !== undefined) ) { viewer.entities.removeById('comEntity'); } for (var i = 0; i < buildingpointArr.length; i++) { viewer.entities.remove(buildingpointArr[i]); } for (var i = 0; i < shpQArr.length; i++) { viewer.entities.remove(shpQArr[i]); } clearSelectResult(); clearQueryResult(); $('#buildingStat').hide(); $('#buildinglandStat').hide(); } function clearSelectResult(){ for (var i = 0; i < inbuildings.length; i++) { if(bu_overlays3D[inbuildings[i]]){ var attributes = bu_overlays3D[inbuildings[i]].getGeometryInstanceAttributes("bu"+buildingData[inbuildings[i]].buildingId); attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.DEEPSKYBLUE.withAlpha(0.0)); } } inbuildings = []; closePreBuilding(); } //关键字搜索——建筑物信息管理 var query_building3D = []; function showQueryBuilding(data) { clearSelectBuildingAll(); var content = '
' + '' + '' + '
'; for (var i = 0; i < data.length; i++) { var polygonArrtmp = stringToNumber(data[i].coordinates); var tmpGeometryInstance = new Cesium.GeometryInstance({ id : "bu" + data[i].buildingId, geometry : new Cesium.PolygonGeometry({ polygonHierarchy : new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArray(polygonArrtmp)), extrudedHeight : 5000 }), attributes : { color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.DEEPPINK.withAlpha(0.6)) } }); var tmpClassificationPrimitive = new Cesium.ClassificationPrimitive({ geometryInstances : tmpGeometryInstance }); viewer.scene.primitives.add(tmpClassificationPrimitive); query_building3D.push(tmpClassificationPrimitive); content += '
' + '' + '' + '' + '' + '
'; } content += '
'; $('#searchresult').html(content); } function clearQueryResult(){ for (var i = 0; i < query_building3D.length; i++) { viewer.scene.primitives.remove(query_building3D[i]); } query_building3D.length = 0;// 清空用于存放查询结果的数据 } //js导出结果 function exportResult() { var aoa = [ [ '图标建库库号', '土地性质', '意向公司', '建筑占地面积', '实际建筑面积', '房屋层数', '房屋结构', '宗地号', '房产证号' ] ]; for (var i = 0; i < inbuildings.length; i++) { var aoap = buildingData[inbuildings[i]]; aoa.push([aoap.dbnum,aoap.tdxz,aoap.yxgs,aoap.jzzdmj,aoap.sjjzmj,aoap.fwcs,aoap.fwjg,aoap.zdh,aoap.fczh]); } var workbook = XLSX.utils.aoa_to_sheet(aoa); openDownloadDialog(sheet2blob(workbook), '导出结果.xlsx'); } //将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载 function sheet2blob(sheet, sheetName) { sheetName = sheetName || 'sheet1'; var workbook = { SheetNames: [sheetName], Sheets: {} }; workbook.Sheets[sheetName] = sheet; // 生成excel的配置项 var wopts = { bookType: 'xlsx', // 要生成的文件类型 bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性 type: 'binary' }; var wbout = XLSX.write(workbook, wopts); var blob = new Blob([s2ab(wbout)], {type:"application/octet-stream"}); // 字符串转ArrayBuffer function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } return blob; } /** * 通用的打开下载对话框方法,没有测试过具体兼容性 * @param url 下载地址,也可以是一个blob对象,必选 * @param saveName 保存文件名,可选 */ function openDownloadDialog(url, saveName){ if(typeof url == 'object' && url instanceof Blob) { url = URL.createObjectURL(url); // 创建blob地址 } var aLink = document.createElement('a'); aLink.href = url; aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 var event; if(window.MouseEvent) event = new MouseEvent('click'); else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event); } //classification分层分户 var buildingHighlight = []; function showFloorAll(data){ for (var i = 0; i < data.length; i++) { var options = { 'viewer':viewer, 'floorAddId':data[i].floorAddId, 'floorPoi':data[i].floorPoi, 'floorHeading':data[i].floorHeading, 'floorHeight':data[i].floorHeight, 'miniheading':data[i].miniheading, 'floorName':data[i].floorName, } CesiumFloor.addFloor(options); } addPOMListener(); } function removeFloorAll(){ CesiumFloor.removeFloor(viewer); } //建筑室内模型表达 var buildingIndataSource; var buildingInWall; function showBuildingIn(){ viewer.camera.setView({ destination : Cesium.Cartesian3.fromDegrees(126.6312,45.7556,534.5), orientation : { heading : Cesium.Math.toRadians(323.5239304918397), pitch : Cesium.Math.toRadians(-30.359751625405547), roll : 0 } }); var promise = Cesium.GeoJsonDataSource.load('../../easy3dfile/data/buildings/haerbinstation.json'); promise.then(function(dataSource) { viewer.dataSources.add(dataSource); buildingIndataSource = dataSource; var entities = dataSource.entities.values; var color; for (var i = 0; i < entities.length; i++) { var entity = entities[i]; entity.polygon.outline = false; var baseheight = 210 + Number(entity.properties.Height)*7; entity.polygon.height = baseheight; switch (entity.properties.Utype._value) { case '1': case '2': case '3': color = new Cesium.Color(205/255,205/255,205/255,1); //给室内模型加墙的效果,备用 /*var posArr = entity.polygon._hierarchy._value.positions; var posResultArr = []; var wallminimumHeights = []; for (var n = 0; n < posArr.length; n++) { var cartographic = Cesium.Cartographic.fromCartesian(posArr[n]); var lon = Cesium.Math.toDegrees(cartographic.longitude); var lat = Cesium.Math.toDegrees(cartographic.latitude); var height = cartographic.height; posResultArr.push(lon,lat,baseheight+height+3); wallminimumHeights.push(baseheight+height); } buildingInWall = viewer.entities.add({ polyline : { positions : Cesium.Cartesian3.fromDegreesArrayHeights(posResultArr), width : 1, show : true, material : new Cesium.Color(145/255,145/255,145/255,1) }, wall : { positions : Cesium.Cartesian3.fromDegreesArrayHeights(posResultArr), material : Cesium.Color.WHITE, outline : false, //outlineColor : new Cesium.Color(155/255,155/255,155/255,1), minimumHeights : wallminimumHeights, } });*/ entity.polygon.extrudedHeight = entity.polygon.height - 1; var posArr = entity.polygon._hierarchy._value.positions; var cartographic = Cesium.Cartographic.fromCartesian(posArr[0]); var lon = Cesium.Math.toDegrees(cartographic.longitude); var lat = Cesium.Math.toDegrees(cartographic.latitude); var content = '
' + '
'+entity.properties.Utype._value+'F
' + '
'; var options = { "viewer":viewer, "id":"floorlabel"+i, "popupWidth":40, "popupHeight":28, "pos":{"lon":lon,"lat":lat,"alt":baseheight}, "extentHeight":8, "extentColor":Cesium.Color.RED, "content":content }; CesiumPop.addDivPop(options); break; case 'A': color = Cesium.Color.LIGHTPINK; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'B': color = Cesium.Color.LIGHTGREEN; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'C': color = Cesium.Color.MEDIUMSLATEBLUE; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'D': color = Cesium.Color.NAVAJOWHITE; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'E': color = Cesium.Color.ROYALBLUE; entity.polygon.extrudedHeight = entity.polygon.height + 4; break; case 'F': color = Cesium.Color.TOMATO; entity.polygon.extrudedHeight = entity.polygon.height + 4; break; case 'G': color = Cesium.Color.TEAL; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'H': color = Cesium.Color.TURQUOISE; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'I': color = Cesium.Color.SALMON; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'J': color = Cesium.Color.PLUM; entity.polygon.extrudedHeight = entity.polygon.height + 3; break; case 'R': color = Cesium.Color.WHITE; entity.polygon.extrudedHeight = entity.polygon.height + 0.1; break; default: break; } entity.polygon.material = color; } }).otherwise(function(error){ swal(error,"请重试!","error"); }); } function clearBuildingIn(){ viewer.dataSources.remove(buildingIndataSource); viewer.entities.remove(buildingInWall); }