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 = '