222 lines
9.1 KiB
HTML
222 lines
9.1 KiB
HTML
|
|
<!DOCTYPE html>
|
|||
|
|
<html lang="en">
|
|||
|
|
<head>
|
|||
|
|
<meta charset="utf-8" />
|
|||
|
|
<script src="./Build/Cesium/Cesium.js"></script>
|
|||
|
|
<script src="./js/turf.min.js"></script>
|
|||
|
|
<link href="./Build/Cesium/Widgets/widgets.css" rel="stylesheet" />
|
|||
|
|
|
|||
|
|
<!-- 添加罗盘 -->
|
|||
|
|
<script>
|
|||
|
|
var defineProperties = Object.defineProperties;
|
|||
|
|
</script>
|
|||
|
|
<script src="./js/nav/CesiumNavigation.umd.js"></script>
|
|||
|
|
<link href="./js/nav/cesium-navigation.css" rel="stylesheet" />
|
|||
|
|
<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", {
|
|||
|
|
// terrainProvider: Cesium.createWorldTerrain({
|
|||
|
|
// requestVertexNormal: true, //添加地形光照
|
|||
|
|
// requestWaterMask: true, //添加水面波浪效果
|
|||
|
|
// }),
|
|||
|
|
// baseLayerPicker: false, //底图选择器
|
|||
|
|
// mapProjection : new Cesium.WebMercatorProjection(),
|
|||
|
|
// geocoder:false,//位置查找
|
|||
|
|
// homeButton:false,//视图返回初始位置
|
|||
|
|
// sceneModePicker:false,//视角选择器
|
|||
|
|
// navigationHelpButton:false,//导航帮助按钮
|
|||
|
|
// animation:false,//动画控制器
|
|||
|
|
// // creditContainer:"credit",//版权显示,指定dom对象的id,再通过id样式可以隐藏CESIUM 版本图标
|
|||
|
|
// timeline:false,//时间线
|
|||
|
|
// fullscreenButton:false,//全屏控件
|
|||
|
|
// vrButton:false,
|
|||
|
|
// infoBox:true ,
|
|||
|
|
// shouldAnimate:true,
|
|||
|
|
// scene3DOnly:true,//默认false,若为true,所有几何体实例将仅会在3D模式中渲染(在GPU内存中)
|
|||
|
|
// terrainProvider: Cesium.createWorldTerrain({
|
|||
|
|
// requestVertexNormal: true, //添加地形光照
|
|||
|
|
// requestWaterMask: true, //添加水面波浪效果
|
|||
|
|
// }),
|
|||
|
|
});
|
|||
|
|
viewer.imageryLayers.removeAll();
|
|||
|
|
// 添加 Mapbox tile provider
|
|||
|
|
const mapboxAccess =
|
|||
|
|
"pk.eyJ1IjoicWl1c2hpamllIiwiYSI6ImNsMDNvdDRybDEyc2YzZG9kbWZoY2FuOW0ifQ.4FH-BUupi46Z0zQ-CEm_Ig";
|
|||
|
|
|
|||
|
|
// 样式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: "dark-v9",
|
|||
|
|
accessToken: mapboxAccess,
|
|||
|
|
// proxy: new Cesium.DefaultProxy("http://127.0.0.1:8080/proxy/"),
|
|||
|
|
});
|
|||
|
|
viewer.imageryLayers.addImageryProvider(mapboxStyleImagery);
|
|||
|
|
|
|||
|
|
var options = {};
|
|||
|
|
// 用于在使用重置导航重置地图视图时设置默认视图控制。接受的值是Cesium.Cartographic 和 Cesium.Rectangle.
|
|||
|
|
options.defaultResetView = Cesium.Rectangle.fromDegrees(80, 22, 130, 50);
|
|||
|
|
// 用于启用或禁用罗盘。true是启用罗盘,false是禁用罗盘。默认值为true。如果将选项设置为false,则罗盘将不会添加到地图中。
|
|||
|
|
options.enableCompass = true;
|
|||
|
|
// 用于启用或禁用缩放控件。true是启用,false是禁用。默认值为true。如果将选项设置为false,则缩放控件将不会添加到地图中。
|
|||
|
|
options.enableZoomControls = true;
|
|||
|
|
// 用于启用或禁用距离图例。true是启用,false是禁用。默认值为true。如果将选项设置为false,距离图例将不会添加到地图中。
|
|||
|
|
options.enableDistanceLegend = true;
|
|||
|
|
// 用于启用或禁用指南针外环。true是启用,false是禁用。默认值为true。如果将选项设置为false,则该环将可见但无效。
|
|||
|
|
options.enableCompassOuterRing = true;
|
|||
|
|
|
|||
|
|
CesiumNavigation.umd(viewer, options);
|
|||
|
|
|
|||
|
|
var scene = viewer.scene;
|
|||
|
|
|
|||
|
|
viewer.camera.flyTo({
|
|||
|
|
destination: Cesium.Cartesian3.fromDegrees(
|
|||
|
|
114.89555032,
|
|||
|
|
32.40536756,
|
|||
|
|
4000
|
|||
|
|
),
|
|||
|
|
orientation: {
|
|||
|
|
heading: Cesium.Math.toRadians(0),
|
|||
|
|
pitch: Cesium.Math.toRadians(-90),
|
|||
|
|
roll: Cesium.Math.toRadians(0),
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 加载淮河水系面
|
|||
|
|
let url =
|
|||
|
|
"http://localhost:8088/geoserver/allRegion/ows?srsname=EPSG:4326&service=WFS&version=1.0.0&request=GetFeature&typeName=allRegion%3Ajiguan&maxFeatures=50&outputFormat=application%2Fjson";
|
|||
|
|
fetch(url)
|
|||
|
|
.then((res) => res.json())
|
|||
|
|
.then((result) => {
|
|||
|
|
const primitives = new Cesium.PrimitiveCollection();
|
|||
|
|
const labelCollection = new Cesium.LabelCollection();
|
|||
|
|
let colorOption = [0.0, 255, 0.0, 0.8];
|
|||
|
|
let color = new Cesium.ColorGeometryInstanceAttribute.fromColor(
|
|||
|
|
Cesium.Color.fromBytes(
|
|||
|
|
colorOption[0],
|
|||
|
|
colorOption[1],
|
|||
|
|
colorOption[2],
|
|||
|
|
colorOption[3]
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
result.features.forEach((feature) => {
|
|||
|
|
// 添加面要素
|
|||
|
|
primitives.add(createPrimitiveByFeature1(feature, color));
|
|||
|
|
// 添加label
|
|||
|
|
labelCollection.add(addLabel(feature));
|
|||
|
|
});
|
|||
|
|
viewer.scene.primitives.add(primitives);
|
|||
|
|
viewer.scene.primitives.add(labelCollection);
|
|||
|
|
// window.labelCollection = labelCollection
|
|||
|
|
});
|
|||
|
|
function addLabel(feature) {
|
|||
|
|
// 计算中心点
|
|||
|
|
let polygon = feature.geometry.coordinates[0];
|
|||
|
|
let points = [];
|
|||
|
|
polygon.forEach((ring) => {
|
|||
|
|
ring.forEach((coord) => {
|
|||
|
|
points.push([coord[0], coord[1]]);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
let pointss = turf.points(points);
|
|||
|
|
let centerResult = turf.center(pointss);
|
|||
|
|
// console.log(centerResult)
|
|||
|
|
let center = centerResult.geometry.coordinates;
|
|||
|
|
let height = 30;
|
|||
|
|
// addLine(center,height);
|
|||
|
|
return {
|
|||
|
|
position: Cesium.Cartesian3.fromDegrees(center[0], center[1], height),
|
|||
|
|
text: feature.properties["名称"]
|
|||
|
|
? feature.properties["名称"]
|
|||
|
|
: "null",
|
|||
|
|
font: "24px Helvetica",
|
|||
|
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // 水平对齐方式
|
|||
|
|
// verticalOrigin:Cesium.HorizontalOrigin.CENTER,// 垂直对齐方式
|
|||
|
|
fillColor: Cesium.Color.WHITE,
|
|||
|
|
outlineColor: Cesium.Color.BLACK,
|
|||
|
|
outlineWidth: 1,
|
|||
|
|
showBackground: true,
|
|||
|
|
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
|
|||
|
|
scale: 0.8,
|
|||
|
|
disableDepthTestDistance: 100.0,
|
|||
|
|
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
|
|||
|
|
10.0,
|
|||
|
|
30000.0
|
|||
|
|
), //根据到相机的距离确定可见性。
|
|||
|
|
scaleByDistance: new Cesium.NearFarScalar(500, 1, 30000, 0.0),
|
|||
|
|
// translucencyByDistance: new Cesium.NearFarScalar(500, 1, 1400, 0.0)
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
function addLine(center, height) {
|
|||
|
|
scene.primitives.add(
|
|||
|
|
new Cesium.Primitive({
|
|||
|
|
geometryInstances: new Cesium.GeometryInstance({
|
|||
|
|
geometry: new Cesium.PolylineGeometry({
|
|||
|
|
positions: Cesium.Cartesian3.fromDegreesArrayHeights([
|
|||
|
|
center[0],
|
|||
|
|
center[1],
|
|||
|
|
0,
|
|||
|
|
center[0],
|
|||
|
|
center[1],
|
|||
|
|
height,
|
|||
|
|
]),
|
|||
|
|
width: 2.0,
|
|||
|
|
arcType: Cesium.ArcType.RHUMB, //ArcType. GEODESIC, NONE , RHUMB
|
|||
|
|
// colors:[Cesium.Color.VIOLET,Cesium.Color.WHEAT,Cesium.Color.THISTLE],//指定线段每段的颜色,数量必须与线段数相同
|
|||
|
|
}),
|
|||
|
|
attributes: {
|
|||
|
|
// 通过attributes属性统一指定线段颜色
|
|||
|
|
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
|
|||
|
|
new Cesium.Color(44 / 255, 44 / 255, 44 / 255, 0.2)
|
|||
|
|
),
|
|||
|
|
},
|
|||
|
|
}),
|
|||
|
|
appearance: new Cesium.PolylineColorAppearance({
|
|||
|
|
translucent: false,
|
|||
|
|
}),
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function createPrimitiveByFeature1(feature, color) {
|
|||
|
|
let coords = feature.geometry.coordinates;
|
|||
|
|
let ground = new Cesium.GroundPrimitive({
|
|||
|
|
geometryInstances: new Cesium.GeometryInstance({
|
|||
|
|
geometry: new Cesium.PolygonGeometry({
|
|||
|
|
polygonHierarchy: new Cesium.PolygonHierarchy(
|
|||
|
|
Cesium.Cartesian3.fromDegreesArrayHeights(coords.flat(3))
|
|||
|
|
),
|
|||
|
|
}),
|
|||
|
|
id: feature.properties,
|
|||
|
|
attributes: {
|
|||
|
|
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
|
|||
|
|
new Cesium.Color(1.0, 0, 1.0, 1.0)
|
|||
|
|
),
|
|||
|
|
},
|
|||
|
|
}),
|
|||
|
|
appearance: new Cesium.PerInstanceColorAppearance({
|
|||
|
|
translucent: false,
|
|||
|
|
}),
|
|||
|
|
});
|
|||
|
|
return ground;
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
</body>
|
|||
|
|
</html>
|