meface/docs/.vuepress/public/html/infobox.html

235 lines
8.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8" />
<!-- Tell IE to use the latest, best version. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
/>
<title>poiIconLabel</title>
<script src="./Build/Cesium/Cesium.js"></script>
<style>
@import url(./Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
Cesium.Ion.defaultAccessToken =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5ZjRjNTZkNC01NDYxLTRhMjQtOGEwZC1kZjA3YzQ5YTJlZDkiLCJpZCI6MjYwODQsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1ODcxOTMwODN9.prGsSKyAW_9Ow5zHYPhbm3LsQL-ApQw5-5PNJkDaHi8";
var viewer = new Cesium.Viewer("cesiumContainer", {
geocoder: false, //位置查找
homeButton: false, //视图返回初始位置
sceneModePicker: false, //视角选择器
baseLayerPicker: false, //底图选择器
navigationHelpButton: false, //导航帮助按钮
animation: false, //动画控制器
// creditContainer:"credit",//版权显示
timeline: false, //时间线
fullscreenButton: false, //全屏控件
vrButton: false,
terrainProvider: Cesium.createWorldTerrain({
requestVertexNormal: true, //添加地形光照
requestWaterMask: true, //添加水面波浪效果
}),
});
//========================================================================================
// viewer.imageryLayers.removeAll();
// 添加 Mapbox tile provider
// const mapboxAccess =
// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5ZjRjNTZkNC01NDYxLTRhMjQtOGEwZC1kZjA3YzQ5YTJlZDkiLCJpZCI6MjYwODQsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1ODcxOTMwODN9.prGsSKyAW_9Ow5zHYPhbm3LsQL-ApQw5-5PNJkDaHi8";
// 样式id查看https://docs.mapbox.com/api/maps/styles/
// URL格式的 mapbox://styles/:owner/:style 其中 :owner 是您的 Mapbox 账户名 :style 是样式 ID 。
// 可选值streets-v10、outdoors-v10 、light-v9、dark-v9、satellite-v9、satellite-streets-v10
// const mapboxStyleImagery = new Cesium.MapboxStyleImageryProvider({
// styleId: "streets-v10",
// accessToken: mapboxAccess,
// // proxy: new Cesium.DefaultProxy("http://127.0.0.1:8080/proxy/"),
// });
// viewer.imageryLayers.addImageryProvider(mapboxStyleImagery);
// var imageryLayers = viewer.scene.imageryLayers;
//后添加的图层在顶部,addImageryProvider 方法
// var blackMarble = imageryLayers.addImageryProvider(
// new Cesium.IonImageryProvider({ assetId: 3812 })
// );
//========================================================================================
//添加OSM的建筑
const tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(96188),
})
);
// Add OSM Building tileset
let osmBuildingsTileset = Cesium.createOsmBuildings();
//设置条件渲染
osmBuildingsTileset.style = new Cesium.Cesium3DTileStyle({
defines: {
mh: "${feature['cesium#estimatedHeight']}",
},
color: {
conditions: [
// ["(${mh} >= 100.0)", "color('blue')"],
// ["(${mh} >= 1.0)", "color('red')"],
["${mh} >= 300", "rgba(45, 0, 75, 0.5)"],
["${mh} >= 200", "rgb(102, 71, 151)"],
["${mh} >= 100", "rgb(170, 162, 204)"],
["${mh} >= 50", "rgb(224, 226, 238)"],
["${mh} >= 25", "rgb(252, 230, 200)"],
["${mh} >= 10", "rgb(248, 176, 87)"],
["${mh} >= 5", "rgb(198, 106, 11)"],
["true", "rgb(127, 59, 8)"],
// ["${name} === '周大福金融中心(广州东塔)'","color('red')"],
// ["${name} === '周大福金融中心(广州东塔)'", "color('red')"],
],
},
// "show" : "${Height} > 50.0"
});
viewer.scene.primitives.add(osmBuildingsTileset);
// osmBuildingsTileset.style = new Cesium.Cesium3DTileStyle({
// defines: {
// material: "${feature['building:material']}",
// },
// color: {
// conditions: [
// ["${material} === null", "color('white')"],
// ["${material} === 'glass'", "color('skyblue', 0.5)"],
// ["${material} === 'concrete'", "color('grey')"],
// ["${material} === 'brick'", "color('indianred')"],
// ["${material} === 'stone'", "color('lightslategrey')"],
// ["${material} === 'metal'", "color('lightgrey')"],
// ["${material} === 'steel'", "color('lightsteelblue')"],
// ["true", "color('white')"], // This is the else case
// ],
// },
// });
// const gzTile = "http://localhost:9000/model/985e07c0af2611ecb9f6593f47f8b446/tileset.json";
// const gzTileset = viewer.scene.primitives.add(
// new Cesium.Cesium3DTileset({
// url: gzTile,
// })
// );
// gzTileset.style = new Cesium.Cesium3DTileStyle({
// color:{
// conditions:[
// ["${floor} === '4'","color(red)"]
// ]
// }
// })
// 创建一个用于存储标注的数据源
const dataSource = new Cesium.CustomDataSource("poiIconLabel");
viewer.dataSources.add(dataSource);
/**
* 用于添加poi的icon和label的函数
* @param {*} lon :经度
* @param {*} lat :纬度
* @param {*} name :标签内容
* @param {*} color :底部圆和横线的颜色
* @param {*} url icon地址
*/
function poiIconLabelAdd(lon, lat, height, name, color, url) {
// 获取标注数据源
const labelDataSource = viewer.dataSources.getByName("poiIconLabel")[0];
labelDataSource.entities.removeAll();
//添加图标和标注
labelDataSource.entities.add({
name: name,
position: Cesium.Cartesian3.fromDegrees(lon, lat, height + 300),
// 图标
billboard: {
image: url,
width: 50,
height: 50,
},
label: {
//文字标签
text: name,
font: "20px sans-serif",
style: Cesium.LabelStyle.FILL,
// 对齐方式(水平和竖直)
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
verticalOrigin: Cesium.VerticalOrigin.CENTER,
pixelOffset: new Cesium.Cartesian2(20, -2),
showBackground: true,
backgroundColor: new Cesium.Color.fromBytes(0, 70, 24),
},
});
// 先画线后画点,防止线压盖点
let linePositions = [];
linePositions.push(new Cesium.Cartesian3.fromDegrees(lon, lat, height));
linePositions.push(
new Cesium.Cartesian3.fromDegrees(lon, lat, height + 300)
);
labelDataSource.entities.add({
polyline: {
positions: linePositions,
width: 1.5,
material: color,
},
});
// 画点
labelDataSource.entities.add({
// 给初始点位设置一定的离地高度,否者会被压盖
position: Cesium.Cartesian3.fromDegrees(lon, lat, height),
point: {
color: color,
pixelSize: 15,
},
});
}
//添加点击事件
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
viewer.selectedEntity = undefined;
const pickedBuilding = viewer.scene.pick(movement.position);
if (pickedBuilding) {
const lat = pickedBuilding.getProperty("cesium#latitude");
const lon = pickedBuilding.getProperty("cesium#longitude");
const height = pickedBuilding.getProperty("cesium#estimatedHeight");
const name = pickedBuilding.getProperty("name");
const color = Cesium.Color.SNOW;
const url = "./data/local.png";
poiIconLabelAdd(lon, lat, height, name, color, url);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
viewer.camera.flyTo({
destination: new Cesium.Cartesian3(
-2325771.0288233184,
5392181.511762224,
2484480.395134067
),
orientation: {
heading: 6.0399326,
pitch: -0.30503,
roll: 6.2825747,
},
});
</script>
</body>
</html>