//指定起点
|
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);//初始化地图
|
}
|