//指定起点 var routeStart; var routeEnd; function addpoi(type){ var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function(movement) { //获取鼠标点击处的坐标 var poiStr; var cartesian = viewer.scene.pickPosition(movement.position); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var height = cartographic.height;//模型高度 if(Number(height)<0){ var ray = viewer.camera.getPickRay(movement.position); cartesian = viewer.scene.globe.pick(ray,viewer.scene); } cartographic = Cesium.Cartographic.fromCartesian(cartesian); var lng = Cesium.Math.toDegrees(cartographic.longitude); var lat = Cesium.Math.toDegrees(cartographic.latitude); poiStr = lat+','+lng; } if(type=="start"){ $('#startStr').val(poiStr); //创建标注 var startpoiPin = viewer.entities.getById("startpoiId"); if(startpoiPin == undefined){ routeStart = viewer.entities.add({ id :"startpoiId", position :cartesian.clone(), billboard : { image : '../images/pinimg/30.png', verticalOrigin : Cesium.VerticalOrigin.BOTTOM, scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), } }); }else{ startpoiPin.position = cartesian.clone(); } }else{ $('#endStr').val(poiStr); //创建标注 var endpoiPin = viewer.entities.getById("endpoiId"); if(endpoiPin == undefined){ routeEnd = viewer.entities.add({ id :"endpoiId", position :cartesian.clone(), billboard : { image : '../images/pinimg/31.png', verticalOrigin : Cesium.VerticalOrigin.BOTTOM, scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), } }); }else{ endpoiPin.position = cartesian.clone(); } } handler.destroy(); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } //路径导航,向百度服务发送请求 function getRoadNav(url){ $.ajax({ url: url, dataType: "jsonp", async: false, cache:false, success:function(data){ showRouteLine(data); } }); } //显示路径导航 function showRoadNav(){ var startpoi = $('#startStr').val(); var endpoi = $('#endStr').val(); if(startpoi!=""&&endpoi!=""){ var url = "http://api.map.baidu.com/direction/v2/driving?origin=" +startpoi+"&destination="+endpoi+"&coord_type=wgs84&tactics=5" +"&alternatives=0&ak=ZpRjzwQe7dQCVzTR9zytcdLO"; getRoadNav(url); }else{ swal("起终点不能为空!","请重试!","error"); } } //创建路径线(进一步可增加动画或流动线效果) var steplineArr = []; var steplabelArr = []; function showRouteLine(data){ clearRouteLine(); if(data.status==0){ for ( var i = 0; i < data.result.routes[0].steps.length; i++) { var step = data.result.routes[0].steps[i]; var pathArr = step.path.split(/[,;]/); var wgs84pathArr = []; for ( var m = 0; m < pathArr.length; m=m+2) { var wgs84poi = bd09towgs84(pathArr[m],pathArr[m+1]); wgs84pathArr.push(wgs84poi); } var traConCount = 0; for ( var j = 0; j < step.traffic_condition.length; j++) { var traCon = step.traffic_condition[j]; var trafficStr = ""; var roadColor = Cesium.Color.YELLOW; switch (traCon.status) { case 0: trafficStr = "无路况"; roadColor = Cesium.Color.YELLOW; break; case 1: trafficStr = "畅通"; roadColor = Cesium.Color.YELLOW; break; case 2: trafficStr = "缓行"; roadColor = Cesium.Color.ORANGE; break; case 3: trafficStr = "拥堵"; roadColor = Cesium.Color.RED; break; case 4: trafficStr = "非常拥堵"; roadColor = Cesium.Color.DARKRED; break; default: break; } var subwgs84pathArr = wgs84pathArr.slice(traConCount,traConCount+traCon.geo_cnt+1); var linesubwgs84pathArr = []; for ( var n = 0; n < subwgs84pathArr.length; n++) { linesubwgs84pathArr.push(subwgs84pathArr[n][0],subwgs84pathArr[n][1]); } var stepline = viewer.entities.add({ polyline : { positions : Cesium.Cartesian3.fromDegreesArray(linesubwgs84pathArr), width : 8, material : new Cesium.PolylineOutlineMaterialProperty({ color : roadColor, outlineWidth : 2, outlineColor : Cesium.Color.BLACK }), clampToGround : true, classificationType : Cesium.ClassificationType.BOTH }, }); steplineArr.push(stepline); var point = Cesium.Cartesian3.fromDegrees( Number(subwgs84pathArr[0][0]), Number(subwgs84pathArr[0][1]), 137); var clampedpoint = viewer.scene.clampToHeight(point); var steptext = ''; if(traConCount==0){ steptext = step.road_name+' | '+traCon.distance+'米 | '+trafficStr; }else{ steptext = traCon.distance+'米 | '+trafficStr; } var steplabel = viewer.entities.add({ //position :point, position :clampedpoint, billboard : { image : '../images/pinimg/37.png', verticalOrigin : Cesium.VerticalOrigin.BOTTOM, horizontalOrigin : Cesium.HorizontalOrigin.CENTER, scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), },label : { verticalOrigin : Cesium.VerticalOrigin.BOTTOM, horizontalOrigin : Cesium.HorizontalOrigin.CENTER, font : 'bold 15px Helvetica', fillColor : Cesium.Color.WHITE, text : steptext, disableDepthTestDistance : 100000000, pixelOffset : new Cesium.Cartesian2(0, -35.0), scaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), pixelOffsetScaleByDistance : new Cesium.NearFarScalar(1000, 1, 20000, 0.2), } }); steplabelArr.push(steplabel); traConCount = traConCount + traCon.geo_cnt; } } }else{ swal("路径导航服务请求失败!","请重试!","error"); } } //清除导航路线 function clearRouteLine(){ for ( var i = 0; i < steplineArr.length; i++) { viewer.entities.remove(steplineArr[i]); } for ( var j = 0; j < steplabelArr.length; j++) { viewer.entities.remove(steplabelArr[j]); } } //清除导航起始点 function clearRoutePoi(){ viewer.entities.remove(routeStart); viewer.entities.remove(routeEnd); } /***************************上:路径导航;下:通视分析********************************************/ //单线通视线分析 function showVisibleLine(){ var options = { "viewer": viewer, "drawColor": Cesium.Color.YELLOW, "originColor": Cesium.Color.BLUE, "targetColor": Cesium.Color.BLUE, "breakColor": Cesium.Color.YELLOW, "visibleColor": Cesium.Color.GREEN, "hiddenColor": Cesium.Color.RED, "bodyHeight": 1.78, //用于做视域分析的人员身高 "bodyColor": Cesium.Color.YELLOW, }; var result = CesiumVisibleLine.drawLines(options); } //清除可视线 function clearVisible(){ CesiumVisibleLine.removeLines(viewer); } //环状通视线分析 function showVisibleCircle(){ var options = { "viewer": viewer, "drawColor": Cesium.Color.YELLOW, "originColor": Cesium.Color.BLUE, "targetColor": Cesium.Color.YELLOW, "breakColor": Cesium.Color.YELLOW, "visibleColor": Cesium.Color.GREEN, "visiblePolygonColor": Cesium.Color.GREEN.withAlpha(0.6), "hiddenColor": Cesium.Color.RED, "bodyHeight": 1.78, //用于做视域分析的人员身高 "bodyColor": Cesium.Color.YELLOW, }; var result = CesiumVisibleLine.drawCircles(options); } //地形夸张 function terrainEx(){ $(".cesium-viewer").remove(); initmap3D(initMapOptions);//初始化地图 }