Cesium三维地球标注
2018年06月26日 11:04:17 zhou8023ddw 阅读数:728 标签: cesium标注 更多
个人分类: 经验
1、三维地球上添加图层
添加的图层会覆盖该区域的地图信息
-
//添加图层 -
var layers = viewer.scene.imageryLayers; -
layers.addImageryProvider(new Cesium.SingleTileImageryProvider({ -
url : 'img/11.png', -
rectangle : Cesium.Rectangle.fromDegrees(-18, -18,18, 18)//矩形两个顶点的想经纬度值 -
}));
2、标注
a、添加标注
在viewer的实体对象中有add()方法,通过add()方法去添加标注,在add()中传入对象,确定标注的配置对象,标注样式可以是多种多样,下面举了点,广告牌,文本三种标注。
-
viewer.entities.add({ -
id:id, -
name : name, -
position : Cesium.Cartesian3.fromDegrees(point.lng, point.lat), -
//点样式 -
point : { -
pixelSize : 5, -
color : Cesium.Color.RED, -
outlineColor : Cesium.Color.WHITE, -
outlineWidth : 1 -
}, -
//立广告牌 -
/*billboard :{ -
image : 'img/11.png', -
show : true, // default -
width : 25, // default: undefined -
height : 25 // default: undefined -
},*/ -
//字体标签样式 -
label : { -
text : text, -
font : '14pt', -
color : Cesium.Color.RED, -
style: Cesium.LabelStyle.FILL_AND_OUTLINE, -
outlineWidth : 1, -
//垂直位置 -
//verticalOrigin : Cesium.VerticalOrigin.BUTTON, -
//中心位置 -
pixelOffset : new Cesium.Cartesian2(0, 20) -
} -
});
b、添加的标注本身有默认事件:左键单击选中标注实体,双击镜头会直接跳转到标注地点。如果你不想要这种效果,你可以取消默认事件,自己定义。下面添加左键单击选取拾取,双击将相机飞到该实体上空一定高度中,具体步骤如下
1、取消双击默认效果
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
2、自定义点击事件
-
function pickAndTrackObject(e) { -
//双击操作 -
} -
function pickAndSelectObject(e) { -
//单击操作 -
} -
viewer.cesiumWidget.screenSpaceEventHandler.setInputAction(pickAndSelectObject,Cesium.ScreenSpaceEventType.LEFT_CLICK); -
viewer.cesiumWidget.screenSpaceEventHandler.setInputAction(pickAndTrackObject,Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
3、根据屏幕坐标拾取实体坐标
-
//拾取实体 -
function pickEntity(viewer,position) { -
var picked=viewer.scene.pick(position); -
if(picked){ -
var id=Cesium.defaultValue(picked.id,picked.primitive.id); -
if(id instanceof Cesium.Entity){ -
return id; -
} -
} -
return undefined; -
}
4、拾取到的实体坐标系为笛卡尔直角坐标系,将相机飞过去,需要操作经纬度坐标,中间需要转化坐标系
-
//将笛卡尔直角坐标系转化为经纬度坐标系 -
var wgs84=viewer.scene.globe.ellipsoid.cartesianToCartographic(entity.position._value); -
//转化为经纬度 -
var long=Cesium.Math.toDegrees(wgs84.longitude); -
var lat=Cesium.Math.toDegrees(wgs84.latitude);
完整代码如下:
-
function pickAndTrackObject(e) { -
//双击操作 -
var entity=pickEntity(viewer,e.position); -
if(entity){ -
//将笛卡尔直角坐标系转化为经纬度坐标系 -
var wgs84=viewer.scene.globe.ellipsoid.cartesianToCartographic(entity.position._value); -
//转化为经纬度 -
var long=Cesium.Math.toDegrees(wgs84.longitude); -
var lat=Cesium.Math.toDegrees(wgs84.latitude); -
camera.flyTo( { -
destination : Cesium.Cartesian3.fromDegrees(long, lat, 2000 ),//使用WGS84 -
orientation : { -
heading : Cesium.Math.toRadians( 0 ), -
pitch : Cesium.Math.toRadians( -90 ), -
roll : Cesium.Math.toRadians( 0 ) -
}, -
duration : 3,//动画持续时间 -
complete : function()//飞行完毕后执行的动作 -
{ -
// addEntities(); -
canCont=true; -
}, -
pitchAdjustHeight: -90, // 如果摄像机飞越高于该值,则调整俯仰俯仰的俯仰角度,并将地球保持在视口中。 -
maximumHeight:5000 // 相机最大飞行高度 -
} ); -
} -
} -
function pickAndSelectObject(e) { -
//单击操作 -
viewer.selectedEntity= pickEntity(viewer,e.position) -
} -
//拾取实体 -
function pickEntity(viewer,position) { -
var picked=viewer.scene.pick(position); -
if(picked){ -
var id=Cesium.defaultValue(picked.id,picked.primitive.id); -
if(id instanceof Cesium.Entity){ -
return id; -
} -
} -
return undefined; -
} -
viewer.cesiumWidget.screenSpaceEventHandler.setInputAction(pickAndSelectObject,Cesium.ScreenSpaceEventType.LEFT_CLICK);
转自:https://blog.youkuaiyun.com/zhou8023ddw/article/details/80811630
4105

被折叠的 条评论
为什么被折叠?



