Skip to content

Commit 1028054

Browse files
committed
人工模型、风场
1 parent cb3fd0e commit 1028054

18 files changed

Lines changed: 681 additions & 10 deletions
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<!--********************************************************************
2+
* by jiawanlong
3+
*********************************************************************-->
4+
<!DOCTYPE html>
5+
<html>
6+
7+
<head>
8+
<meta charset="UTF-8" />
9+
<link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
10+
<script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
11+
12+
</head>
13+
14+
<body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0">
15+
<div id="map" style="margin: 0 auto; width: 100%; height: 100%"></div>
16+
<script type="text/javascript">
17+
18+
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M'
19+
const viewer = new Cesium.Viewer('map', {});
20+
21+
// 开启帧率
22+
viewer.scene.debugShowFramesPerSecond = true;
23+
24+
// 取消默认的单击和双击事件,右上角弹窗很丑
25+
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
26+
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
27+
28+
29+
var position = Cesium.Cartesian3.fromDegrees(121.507762, 31.233975, 200);
30+
var heading = Cesium.Math.toRadians(215);
31+
var pitch = Cesium.Math.toRadians(0);
32+
var roll = Cesium.Math.toRadians(0);
33+
34+
var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
35+
var orientation = Cesium.Transforms.headingPitchRollQuaternion(
36+
position,
37+
hpr
38+
);
39+
40+
var entity = viewer.entities.add({
41+
position: position,
42+
orientation: orientation,
43+
model: {
44+
uri: 'https://data.mars3d.cn/gltf/mars/shanghai/pudong/scene.gltf',
45+
scale: 520,
46+
}
47+
});
48+
49+
viewer.flyTo(entity)
50+
51+
</script>
52+
</body>
53+
54+
</html>
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<!--********************************************************************
2+
* by jiawanlong
3+
*********************************************************************-->
4+
<!DOCTYPE html>
5+
<html>
6+
7+
<head>
8+
<meta charset="UTF-8" />
9+
<link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
10+
<script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
11+
12+
</head>
13+
14+
<body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0">
15+
<div id="map" style="margin: 0 auto; width: 100%; height: 100%"></div>
16+
<script type="text/javascript">
17+
18+
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M'
19+
const viewer = new Cesium.Viewer('map', {});
20+
21+
// 开启帧率
22+
viewer.scene.debugShowFramesPerSecond = true;
23+
24+
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
25+
url: 'http://data.mars3d.cn/terrain'
26+
});
27+
28+
viewer.camera.setView({
29+
destination: Cesium.Cartesian3.fromDegrees(112.245269, 39.066518, 2913),
30+
orientation: {
31+
heading: Cesium.Math.toRadians(226),
32+
pitch: Cesium.Math.toRadians(-21),
33+
roll: 0.0
34+
}
35+
});
36+
37+
const positions = [
38+
{ lng: 112.227630577, lat: 39.0613382363999, alt: 1815 },
39+
{ lng: 112.229302206, lat: 39.0579481036999, alt: 1827 },
40+
{ lng: 112.226596341, lat: 39.0584773033999, alt: 1849 },
41+
{ lng: 112.22511174, lat: 39.0574840383999, alt: 1866 },
42+
{ lng: 112.225476722, lat: 39.0550566812, alt: 1866 },
43+
{ lng: 112.225643865, lat: 39.0532631538, alt: 1899 },
44+
{ lng: 112.229228645, lat: 39.0525930380999, alt: 1880 },
45+
{ lng: 112.224976033, lat: 39.0502488098, alt: 1926 },
46+
{ lng: 112.225661372999, lat: 39.0484097539999, alt: 1948 },
47+
{ lng: 112.229409737, lat: 39.0474211486, alt: 1910 },
48+
{ lng: 112.224894212, lat: 39.0464248147999, alt: 1983 },
49+
{ lng: 112.224022809, lat: 39.0436919592999, alt: 2036 },
50+
{ lng: 112.224492463, lat: 39.0413040158, alt: 2036 },
51+
{ lng: 112.223470676999, lat: 39.0381470684, alt: 2038 },
52+
{ lng: 112.220336836, lat: 39.039450506, alt: 2071 },
53+
{ lng: 112.221019662, lat: 39.0367113260999, alt: 2063 },
54+
{ lng: 112.221282611, lat: 39.045567662, alt: 2026 },
55+
{ lng: 112.221147308, lat: 39.0439265946, alt: 2048 },
56+
{ lng: 112.2216533, lat: 39.041840792, alt: 2056 },
57+
{ lng: 112.222813848, lat: 39.0343489941, alt: 2075 },
58+
{ lng: 112.225573092, lat: 39.0307660108, alt: 2015 },
59+
{ lng: 112.220069655, lat: 39.0323883292, alt: 2022 },
60+
{ lng: 112.217448043999, lat: 39.0310627231, alt: 2021 },
61+
{ lng: 112.230322327, lat: 39.0281575923999, alt: 1965 }
62+
]
63+
64+
positions.forEach(function (item, index) {
65+
var position = Cesium.Cartesian3.fromDegrees(item.lng, item.lat, item.alt);
66+
var heading = Cesium.Math.toRadians(135);
67+
var pitch = Cesium.Math.toRadians(0);
68+
var roll = Cesium.Math.toRadians(0);
69+
70+
var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
71+
var orientation = Cesium.Transforms.headingPitchRollQuaternion(
72+
position,
73+
hpr
74+
);
75+
76+
var entity = viewer.entities.add({
77+
position: position,
78+
orientation: orientation,
79+
model: {
80+
uri: 'https://data.mars3d.cn/gltf/mars/fengche.gltf',
81+
scale: 40,
82+
}
83+
});
84+
85+
entity.model.runAnimations = 1
86+
})
87+
88+
viewer.clock.shouldAnimate = true;
89+
90+
viewer.flyTo(entity)
91+
92+
</script>
93+
</body>
94+
95+
</html>
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<!--********************************************************************
2+
* by jiawanlong
3+
*********************************************************************-->
4+
<!DOCTYPE html>
5+
<html>
6+
7+
<head>
8+
<meta charset="UTF-8" />
9+
<link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
10+
<script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
11+
<script src="./turf.min.js"></script>
12+
</head>
13+
14+
<body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0">
15+
<div id="map3" style="margin: 0 auto; width: 100%; height: 100%;float: left;"></div>
16+
17+
<script type="text/javascript">
18+
// 三维
19+
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M'
20+
const viewer = new Cesium.Viewer('map3', {});
21+
22+
// 全局事件监听
23+
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas)
24+
25+
// 移入三维
26+
handler.setInputAction(function (event) {
27+
open3d()
28+
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
29+
30+
// 关闭之前所有事件
31+
function closeO() {
32+
try {
33+
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP)
34+
handler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL)
35+
} catch (error) { }
36+
}
37+
38+
// 进入3d,监听3d事件
39+
function open3d() {
40+
closeO()
41+
handler.setInputAction(function (event) {
42+
liandong3D2D()
43+
}, Cesium.ScreenSpaceEventType.WHEEL)
44+
handler.setInputAction(function (event) {
45+
liandong3D2D()
46+
}, Cesium.ScreenSpaceEventType.LEFT_UP)
47+
}
48+
// 3d联动2d
49+
function liandong3D2D() {
50+
var rectangle = viewer.camera.computeViewRectangle()
51+
var west = (rectangle.west / Math.PI) * 180
52+
var north = (rectangle.north / Math.PI) * 180
53+
var east = (rectangle.east / Math.PI) * 180
54+
var south = (rectangle.south / Math.PI) * 180
55+
56+
57+
function calculateCellSide(bbox, N, units = 'kilometers') {
58+
const bboxPolygon = turf.bboxPolygon(bbox);
59+
const areaMeters = turf.area(bboxPolygon);
60+
61+
let area;
62+
switch (units) {
63+
case 'kilometers': area = areaMeters / 1e6; break;
64+
case 'miles': area = areaMeters / 2589988.1103; break;
65+
default: area = areaMeters;
66+
}
67+
68+
const hexArea = area / N;
69+
return Math.sqrt((2 * hexArea) / (3 * Math.sqrt(3)));
70+
}
71+
72+
var bbox = [west , north , east , south ];
73+
74+
const desiredCount = 100; // 目标生成100个六边形
75+
const units = 'kilometers';
76+
77+
const cellSide = calculateCellSide(bbox, desiredCount, units);
78+
79+
const hexGrid = turf.hexGrid(bbox, cellSide, { units });
80+
81+
viewer.scene.primitives.removeAll();
82+
const geometryInstances = [];
83+
84+
hexGrid.features.forEach((hex) => {
85+
let boundary = hex.geometry.coordinates
86+
const positions = boundary.map(([lat, lon]) =>
87+
Cesium.Cartesian3.fromDegrees(lon, lat)
88+
);
89+
const height = 1;
90+
const polygon = new Cesium.PolygonOutlineGeometry({
91+
polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(boundary.flat().flat())),
92+
extrudedHeight: height,
93+
height: 0,
94+
});
95+
96+
const instance = new Cesium.GeometryInstance({
97+
geometry: polygon,
98+
attributes: {
99+
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
100+
Cesium.Color.fromBytes(220, 20, 60, 200)
101+
),
102+
},
103+
});
104+
geometryInstances.push(instance);
105+
});
106+
107+
const primitive = new Cesium.Primitive({
108+
geometryInstances: geometryInstances,
109+
appearance: new Cesium.PerInstanceColorAppearance({
110+
flat: true,
111+
translucent: true,
112+
renderState: {
113+
// 禁用抗锯齿
114+
lineSmooth: false,
115+
// 直接设置线条宽度
116+
lineWidth: 10,
117+
},
118+
}),
119+
});
120+
121+
viewer.scene.primitives.add(primitive);
122+
123+
124+
125+
}
126+
127+
</script>
128+
</body>
129+
130+
</html>

examples/cesiumEx/config.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var exampleConfig = {
1111
content: {
1212
"maxssp": {
1313
name: "综合应用",
14-
name_en: "base",
14+
name_en: "ba22222se",
1515
content: [
1616
{
1717
name: "",
@@ -94,6 +94,30 @@ var exampleConfig = {
9494
// },
9595
]
9696
},
97+
"maxs111sp": {
98+
name: "常用工具",
99+
name_en: "常用工具",
100+
content: [
101+
{
102+
name: "Goejson",
103+
name_en: "Goejson",
104+
thumbnail: "Goejson.jpg",
105+
fileName: "https://geojson.io/"
106+
},
107+
{
108+
name: "mapshaper",
109+
name_en: "mapshaper",
110+
thumbnail: "mapshaper.jpg",
111+
fileName: "https://mapshaper.org/"
112+
},
113+
{
114+
name: "sketchfab",
115+
name_en: "sketchfab",
116+
thumbnail: "sketchfab.jpg",
117+
fileName: " https://sketchfab.com/feed"
118+
},
119+
]
120+
},
97121
}
98122
},
99123
"base": {
@@ -553,7 +577,18 @@ var exampleConfig = {
553577
thumbnail: "2.4.6、点击获取子节点.jpg",
554578
fileName: "2.4.6、点击获取子节点"
555579
},
556-
580+
{
581+
name: "2.4.7、人工模型",
582+
name_en: "2.4.7、人工模型",
583+
thumbnail: "2.4.7、人工模型.jpg",
584+
fileName: "2.4.7、人工模型"
585+
},
586+
{
587+
name: "2.4.8、风力发电机",
588+
name_en: "2.4.8、风力发电机",
589+
thumbnail: "2.4.8、风力发电机.jpg",
590+
fileName: "2.4.8、风力发电机"
591+
},
557592
]
558593
},
559594
}
6.99 KB
Loading
4.32 KB
Loading

examples/cesiumEx/img/Goejson.jpg

3.04 KB
Loading
2.56 KB
Loading
5.76 KB
Loading

examples/cesiumEx/sd.glb

2.73 MB
Binary file not shown.

0 commit comments

Comments
 (0)