document.write(''); /** * 人脸识别 */ var vscanvas; var targetcanvas; var facecxt; var lineArr = [];//边线数组 var prefacevideoId; var prefaceimgElement; var isCanvasOnFirst = true; var vsfaceEvent; //创建人脸识别视频监控画面的画布,定格人脸识别视频画面并开启圈选人脸监听 function createvscanvas(videoId) { prefacevideoId = videoId; shootup(); $('#vscanvas').unbind(vsfaceEvent); vsfaceEvent = $('#vscanvas').mousedown(function(e){ if(isCanvasOnFirst){ clearRect(); drawpoint(e); isCanvasOnFirst = false; }else{ drawpoint(e); var imgwidth = Math.abs(lineArr[0].x-lineArr[1].x); var imgheight = Math.abs(lineArr[0].y-lineArr[1].y); var leftx = (lineArr[0].x>lineArr[1].x)?lineArr[1].x:lineArr[0].x; var lefty = (lineArr[0].y>lineArr[1].y)?lineArr[1].y:lineArr[0].y; var imgdata = facecxt.getImageData(leftx, lefty, imgwidth, imgheight); targetcanvas = document.createElement('canvas'); targetcanvas.width = imgwidth; targetcanvas.height = imgheight; targetcanvas.getContext("2d").putImageData(imgdata,0,0); facecxt.save(); facecxt.fillStyle = "rgba(0,0,0,0.8)"; facecxt.fillRect(0,0,vscanvas.width,vscanvas.height); facecxt.beginPath(); facecxt.lineWidth = 2; facecxt.setLineDash([6, 4]); facecxt.lineTo(leftx, lefty); facecxt.lineTo(leftx+imgwidth, lefty); facecxt.lineTo(leftx+imgwidth, lefty+imgheight); facecxt.lineTo(leftx, lefty+imgheight); facecxt.lineTo(leftx, lefty); facecxt.strokeStyle="red"; facecxt.stroke(); facecxt.closePath(); facecxt.clip(); facecxt.drawImage(prefaceimgElement,0,0,vscanvas.width,vscanvas.height); facecxt.restore(); isCanvasOnFirst = true; } }); function drawpoint(e){ x = e.offsetX; // 鼠标落下时的X y = e.offsetY; // 鼠标落下时的Y lineObj = {"x":x,"y":y}; lineArr.push(lineObj); facecxt.beginPath(); facecxt.arc(x, y, 5, 0, Math.PI * 2, true); facecxt.closePath(); facecxt.strokeStyle = 'rgba(255,0,0,1)'; facecxt.stroke(); } } function shootup(){ var faceVideoElement = document.getElementById(prefacevideoId); vscanvas = document.getElementById("vscanvas"); facecxt = vscanvas.getContext("2d"); facecxt.drawImage(faceVideoElement,0,0,vscanvas.width,vscanvas.height); prefaceimgElement = document.createElement('img'); prefaceimgElement.src = vscanvas.toDataURL("image/jpeg"); } function faceRecognition() { if(lineArr.length!=0){ clearRect(); closeDrawFace(); ctrlTargetFace("block"); document.getElementById("targetfaceimg").src = targetcanvas.toDataURL("image/jpeg"); $('#faced').hide(); $('#facedbtn').hide(); $('#facing').show(); setTimeout(function(){ $('#facing').hide(); $('#faced').show(); $('#facedbtn').show(); startface(); }, 4000); }else{ swal("请先框选人工智能识别的图像!","请重试!","error"); } } function startface(){ ctrlFaceResultlist('block'); queryKeypeopleByBlood(); } var faceresultStr = ''; function showfaceresultlist(data){ faceresultStr = ''; var content = ''; var percent = [98,64,13]; var geojson = { "type": "FeatureCollection", "features": [] }; for ( var i = 0; i < data.length; i++) { faceresultStr += data[i].keyId+","; var position = data[i].address.poi.split(','); var feature = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [Number(position[0]),Number(position[1]),Number(position[2])] }, "id": "kp" + data[i].keyId, "name": '查询结果', "properties": { "title": "marker", "marker-symbol": "marker-stroked", "marker-color": "#FFD700" } }; geojson.features.push(feature); var nearEllipsoidId = 'ke' + data[i].keyId; var pos = Cesium.Cartesian3.fromDegrees(Number(position[0]), Number(position[1]),Number(position[2])); var color = Cesium.Color.GOLD.withAlpha(0.7); createNearEllipsoid(nearEllipsoidId,'查询结果',pos,color,query2_overlays3D); content += '
' + '
'+percent[i]+'%
' + '
' + '' + '' + '' + '
' + '' + '' + '' + '
' + '
' } faceresultStr = faceresultStr.substring(0, faceresultStr.length-1); $('#faceresultlistcontent').html(content); createClusterPin(geojson,"query"); } function closefaceresult(){ ctrlTargetFace("none"); ctrlFaceResultlist('none'); stopfollow(); clearRouteLines(); deletePolice3DMarks(); deletePoliceCar3DMarks(); policemanList = []; rePolicemanList = [] ; policeCarList = []; rePoliceCarList = []; } function clearRect() { facecxt.clearRect(0,0,vscanvas.width,vscanvas.height); facecxt.drawImage(prefaceimgElement,0,0,vscanvas.width,vscanvas.height); lineArr = []; isCanvasOnFirst = true; } //清除人脸识别画布 function removeface() { clearRect(); } //追踪嫌疑人 var prefollowdata = null; var followpath = []; var followPeopleArr = []; function startfollow(){ $("#following").show(); //绘制人员轨迹 var followlineground = viewer.entities.add({ id : 'followlineground', polyline : { width : 7.0, material : new Cesium.PolylineGlowMaterialProperty({ color : Cesium.Color.RED, glowPower : 0.25 }), clampToGround : true, classificationType : Cesium.ClassificationType.BOTH } }); if(rhpcListArray.length!==0){ clearrhpcVideo(); } setTimeout(function(){ CesiumPop.bindPopGlobeEventHandler(viewer); //弹出监控画面 prefollowdata = getVideoAndShow(followvideo[0].id); if(emergencyPosArr.length!=0){ var tmppoi = new Cesium.Cartesian3.fromDegrees(emergencyPosArr[0],emergencyPosArr[1],emergencyPosArr[2]); followpath.push(tmppoi); } var poi = prefollowdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); followpath.push(tmppoi); addSuspectPin(tmppoi,followvideo[0].alarmTime); followlineground.polyline.positions = followpath; flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); followPeopleArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])]; document.getElementById("audioSource").play(); emergencyPosArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])]; getPolicemanList(followPeopleArr); getPoliceCarList(followPeopleArr); }, 5000); setTimeout(function(){ closeVideoPop(followvideo[0].id); prefollowdata = getVideoAndShow(followvideo[1].id); var poi = prefollowdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); followpath.push(tmppoi); addSuspectPin(tmppoi,followvideo[1].alarmTime); followlineground.polyline.positions = followpath; flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); followPeopleArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])+400]; document.getElementById("audioSource").play(); emergencyPosArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])]; getPolicemanList(followPeopleArr); getPoliceCarList(followPeopleArr); }, 30000); setTimeout(function(){ closeVideoPop(followvideo[1].id); prefollowdata = getVideoAndShow(followvideo[2].id); var poi = prefollowdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); followpath.push(tmppoi); addSuspectPin(tmppoi,followvideo[2].alarmTime); followlineground.polyline.positions = followpath; flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); followPeopleArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])+400]; document.getElementById("audioSource").play(); emergencyPosArr = [Number(poi[0]),Number(poi[1]),Number(poi[2])]; getPolicemanList(followPeopleArr); getPoliceCarList(followPeopleArr); }, 60000); } //追踪定位嫌犯位置并添加图标 var suspectArr = []; function addSuspectPin(poi,alarmtime){ var alarmtimearr = alarmtime.split(' '); var alarmtimen = alarmtimearr[0]+'\n'+alarmtimearr[1]; suspectArr.push(viewer.entities.add({ position : poi, label : { show : true, verticalOrigin : Cesium.VerticalOrigin.BOTTOM, horizontalOrigin : Cesium.HorizontalOrigin.CENTER, font : '16px Helvetica', style : Cesium.LabelStyle.FILL_AND_OUTLINE, fillColor : Cesium.Color.WHITE, outlineColor : Cesium.Color.WHITE, text : alarmtimen, pixelOffset : new Cesium.Cartesian2(60.0, -130.0), disableDepthTestDistance : 100000000, scaleByDistance : new Cesium.NearFarScalar(300, 1, 20000, 0.3), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(300, 1, 20000, 0.3), }, billboard : { image : '../images/pinimg/02.png', verticalOrigin : Cesium.VerticalOrigin.BOTTOM, pixelOffset : new Cesium.Cartesian2(51.0, 0.0), scaleByDistance : new Cesium.NearFarScalar(300, 1, 20000, 0.3), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(300, 1, 20000, 0.3), } })); } //结束追踪 function stopfollow(){ for (var i = 0; i < followvideo.length; i++) { clearVideoOnEarth(followvideo[i].id); } CesiumPop.clearDivPop(viewer); if(prefollowdata!=null){ stopVideoConvertor(prefollowdata); } if(viewer.entities.getById("followlineground")){ viewer.entities.removeById("followlineground"); } for (var i = 0; i < suspectArr.length; i++) { viewer.entities.remove(suspectArr[i]); } prefollowdata = null; followpath = []; suspectArr = []; emergencyPosArr = []; $("#following").hide(); } /** * 重点人员人脸识别报警 */ //开始智能识别模拟 function startFaceAlarm(){ if(rhpcListArray.length!==0){ clearrhpcVideo(); } setTimeout(function(){ CesiumPop.bindPopGlobeEventHandler(viewer); var prealarmdata = getVideoAndShow(followvideo[3].id); var poi = prealarmdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); getKeypeopleByCardId(followvideo[3].alarmKPId,prealarmdata,followvideo[3]); addAlarmPin(tmppoi,followvideo[3].alarmTime); flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); document.getElementById("audioSource").play(); }, 2000); setTimeout(function(){ closeVideoPop(followvideo[3].id); var prealarmdata = getVideoAndShow(followvideo[0].id); var poi = prealarmdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); getKeypeopleByCardId(followvideo[0].alarmKPId,prealarmdata,followvideo[0]); addAlarmPin(tmppoi,followvideo[0].alarmTime); flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); document.getElementById("audioSource").play(); }, 16000); setTimeout(function(){ closeVideoPop(followvideo[0].id); var prealarmdata = getVideoAndShow(followvideo[2].id); var poi = prealarmdata.camPosition.split(","); var tmppoi = new Cesium.Cartesian3.fromDegrees(Number(poi[0]),Number(poi[1]),Number(poi[2])); getKeypeopleByCardId(followvideo[2].alarmKPId,prealarmdata,followvideo[2]); addAlarmPin(tmppoi,followvideo[2].alarmTime); flyToLocation([Number(poi[0]),Number(poi[1]),Number(poi[2])+400]); document.getElementById("audioSource").play(); }, 30000); } //添加智能识别报警图标 var prealarmpin; function addAlarmPin(poi, alarmtime) { if(prealarmpin){ viewer.entities.remove(prealarmpin); } var alarmtimearr = alarmtime.split(' '); var alarmtimen = alarmtimearr[0]+'\n'+alarmtimearr[1]; prealarmpin = viewer.entities.add({ position : poi, billboard : { image : '../images/pinimg/06.png', verticalOrigin : Cesium.VerticalOrigin.BOTTOM, pixelOffset : new Cesium.Cartesian2(51.0, 0.0), scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), }, label : { show : true, verticalOrigin : Cesium.VerticalOrigin.BOTTOM, horizontalOrigin : Cesium.HorizontalOrigin.CENTER, font : '16px Helvetica', style : Cesium.LabelStyle.FILL_AND_OUTLINE, fillColor : Cesium.Color.WHITE, outlineColor : Cesium.Color.WHITE, text : alarmtimen, pixelOffset : new Cesium.Cartesian2(60.0, -128.0), disableDepthTestDistance : 100000000, scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), } }); } //追加人脸识别照片 function appendAlarmPic(kpdata,videodata,alarmdata){ var content = '
' +videodata.camAdd+'
' +kpdata.name+'
'+alarmdata.alarmTime+'
'; $('#facealarmcon').append(content); } //停止智能识别模拟 function stopFaceAlarm(){ for (var i = 0; i < followvideo.length; i++) { clearVideoOnEarth(followvideo[i].id); stopVideoConvertor(followvideo[i]); } if(prealarmpin){ viewer.entities.remove(prealarmpin); } } //追踪记录展示 function showFaceFollowRecord(data){ var faceFollowgeojson = { "type": "FeatureCollection", "features": [] }; for (var i = 0; i < data.length; i++) { var poiArr = data[i].video.camPosition.split(","); var feature = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [Number(poiArr[0]),Number(poiArr[1]),Number(poiArr[2])] }, "id": "ff" + data[i].faceId, }; feature.properties = { "title": "marker", "marker-symbol": "marker", "marker-color": "#180EF1" }; faceFollowgeojson.features.push(feature); } var faceFollowdataSource = Cesium.GeoJsonDataSource.load(faceFollowgeojson,{"markerSize":32}); var dataSourcePromise = viewer.dataSources.add(faceFollowdataSource); dataSourcePromise.then(function(dataSource) { dataSource.clustering.enabled = true; dataSource.clustering.pixelRange = 25; dataSource.clustering.minimumClusterSize = 3; var dataSourceEntities = dataSource.entities.values; for (var i = 0; i < dataSourceEntities.length; i++) { dataSourceEntities[i].billboard.image = '../images/pinimg/07.png'; dataSourceEntities[i].billboard.scaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); dataSourceEntities[i].billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); } var removeListener; var pinBuilder = new Cesium.PinBuilder(); var pin50 = pinBuilder.fromText('50+', Cesium.Color.RED, 36).toDataURL(); var pin40 = pinBuilder.fromText('40+', Cesium.Color.ORANGE, 36).toDataURL(); var pin30 = pinBuilder.fromText('30+', Cesium.Color.YELLOW, 36).toDataURL(); var pin20 = pinBuilder.fromText('20+', Cesium.Color.GREEN, 36).toDataURL(); var pin10 = pinBuilder.fromText('10+', Cesium.Color.BLUE, 36).toDataURL(); var singleDigitPins = new Array(8); for (var i = 0; i < singleDigitPins.length; ++i) { singleDigitPins[i] = pinBuilder.fromText('' + (i + 2), Cesium.Color.VIOLET, 36).toDataURL(); } function customStyle() { if (Cesium.defined(removeListener)) { removeListener(); removeListener = undefined; } else { removeListener = dataSource.clustering.clusterEvent.addEventListener(function(clusteredEntities, cluster) { cluster.label.show = false; cluster.billboard.show = true; cluster.billboard.id = cluster.label.id; cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; if (clusteredEntities.length >= 50) { cluster.billboard.image = pin50; } else if (clusteredEntities.length >= 40) { cluster.billboard.image = pin40; } else if (clusteredEntities.length >= 30) { cluster.billboard.image = pin30; } else if (clusteredEntities.length >= 20) { cluster.billboard.image = pin20; } else if (clusteredEntities.length >= 10) { cluster.billboard.image = pin10; } else { cluster.billboard.image = singleDigitPins[clusteredEntities.length - 2]; } }); } // force a re-cluster with the new styling var pixelRange = dataSource.clustering.pixelRange; dataSource.clustering.pixelRange = 0; dataSource.clustering.pixelRange = pixelRange; } // start with custom style customStyle(); addPOMListener(); }); } //追踪记录清除 function clearFollowRecord(){ viewer.dataSources.removeAll(); } //智能识别展示 function showFaceAlarmRecord(data){ var facealarmgeojson = { "type": "FeatureCollection", "features": [] }; for (var i = 0; i < data.length; i++) { var poiArr = data[i].poi.split(","); var feature = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [Number(poiArr[0]),Number(poiArr[1]),Number(poiArr[2])] }, "id": "fa" + data[i].faId, }; feature.properties = { "title": "marker", "marker-symbol": "marker", "marker-color": "#FF6347" }; facealarmgeojson.features.push(feature); } var facealarmdataSource = Cesium.GeoJsonDataSource.load(facealarmgeojson,{"markerSize":32}); var dataSourcePromise = viewer.dataSources.add(facealarmdataSource); dataSourcePromise.then(function(dataSource) { dataSource.clustering.enabled = true; dataSource.clustering.pixelRange = 25; dataSource.clustering.minimumClusterSize = 3; var dataSourceEntities = dataSource.entities.values; for (var i = 0; i < dataSourceEntities.length; i++) { dataSourceEntities[i].billboard.image = '../images/pinimg/08.png'; dataSourceEntities[i].billboard.scaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); dataSourceEntities[i].billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); } var removeListener; var pinBuilder = new Cesium.PinBuilder(); var pin50 = pinBuilder.fromText('50+', Cesium.Color.RED, 36).toDataURL(); var pin40 = pinBuilder.fromText('40+', Cesium.Color.ORANGE, 36).toDataURL(); var pin30 = pinBuilder.fromText('30+', Cesium.Color.YELLOW, 36).toDataURL(); var pin20 = pinBuilder.fromText('20+', Cesium.Color.GREEN, 36).toDataURL(); var pin10 = pinBuilder.fromText('10+', Cesium.Color.BLUE, 36).toDataURL(); var singleDigitPins = new Array(8); for (var i = 0; i < singleDigitPins.length; ++i) { singleDigitPins[i] = pinBuilder.fromText('' + (i + 2), Cesium.Color.VIOLET, 36).toDataURL(); } function customStyle() { if (Cesium.defined(removeListener)) { removeListener(); removeListener = undefined; } else { removeListener = dataSource.clustering.clusterEvent.addEventListener(function(clusteredEntities, cluster) { cluster.label.show = false; cluster.billboard.show = true; cluster.billboard.id = cluster.label.id; cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; if (clusteredEntities.length >= 50) { cluster.billboard.image = pin50; } else if (clusteredEntities.length >= 40) { cluster.billboard.image = pin40; } else if (clusteredEntities.length >= 30) { cluster.billboard.image = pin30; } else if (clusteredEntities.length >= 20) { cluster.billboard.image = pin20; } else if (clusteredEntities.length >= 10) { cluster.billboard.image = pin10; } else { cluster.billboard.image = singleDigitPins[clusteredEntities.length - 2]; } }); } // force a re-cluster with the new styling var pixelRange = dataSource.clustering.pixelRange; dataSource.clustering.pixelRange = 0; dataSource.clustering.pixelRange = pixelRange; } // start with custom style customStyle(); addPOMListener(); }); } //智能识别清除 function clearFaceAlarmRecord(){ viewer.dataSources.removeAll(); } //刷卡记录展示 function showCardRecord(data){ var cardgeojson = { "type": "FeatureCollection", "features": [] }; for (var i = 0; i < data.length; i++) { var poiArr = data[i].poi.split(","); var feature = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [Number(poiArr[0]),Number(poiArr[1]),Number(poiArr[2])] }, "id": "cd" + data[i].crId, }; feature.properties = { "title": "marker", "marker-symbol": "marker", "marker-color": "#2bff30" }; cardgeojson.features.push(feature); } var carddataSource = Cesium.GeoJsonDataSource.load(cardgeojson,{"markerSize":32}); var dataSourcePromise = viewer.dataSources.add(carddataSource); dataSourcePromise.then(function(dataSource) { dataSource.clustering.enabled = true; dataSource.clustering.pixelRange = 25; dataSource.clustering.minimumClusterSize = 3; var dataSourceEntities = dataSource.entities.values; for (var i = 0; i < dataSourceEntities.length; i++) { dataSourceEntities[i].billboard.image = '../images/pinimg/09.png'; dataSourceEntities[i].billboard.scaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); dataSourceEntities[i].billboard.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1000, 1, 20000, 0.2); } var removeListener; var pinBuilder = new Cesium.PinBuilder(); var pin50 = pinBuilder.fromText('50+', Cesium.Color.RED, 36).toDataURL(); var pin40 = pinBuilder.fromText('40+', Cesium.Color.ORANGE, 36).toDataURL(); var pin30 = pinBuilder.fromText('30+', Cesium.Color.YELLOW, 36).toDataURL(); var pin20 = pinBuilder.fromText('20+', Cesium.Color.GREEN, 36).toDataURL(); var pin10 = pinBuilder.fromText('10+', Cesium.Color.BLUE, 36).toDataURL(); var singleDigitPins = new Array(8); for (var i = 0; i < singleDigitPins.length; ++i) { singleDigitPins[i] = pinBuilder.fromText('' + (i + 2), Cesium.Color.VIOLET, 36).toDataURL(); } function customStyle() { if (Cesium.defined(removeListener)) { removeListener(); removeListener = undefined; } else { removeListener = dataSource.clustering.clusterEvent.addEventListener(function(clusteredEntities, cluster) { cluster.label.show = false; cluster.billboard.show = true; cluster.billboard.id = cluster.label.id; cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; if (clusteredEntities.length >= 50) { cluster.billboard.image = pin50; } else if (clusteredEntities.length >= 40) { cluster.billboard.image = pin40; } else if (clusteredEntities.length >= 30) { cluster.billboard.image = pin30; } else if (clusteredEntities.length >= 20) { cluster.billboard.image = pin20; } else if (clusteredEntities.length >= 10) { cluster.billboard.image = pin10; } else { cluster.billboard.image = singleDigitPins[clusteredEntities.length - 2]; } }); } // force a re-cluster with the new styling var pixelRange = dataSource.clustering.pixelRange; dataSource.clustering.pixelRange = 0; dataSource.clustering.pixelRange = pixelRange; } // start with custom style customStyle(); addPOMListener(); }); } //刷卡记录清除 function clearCardRecord(){ viewer.dataSources.removeAll(); }