feature:完成数据更新

This commit is contained in:
qiushijie 2025-07-11 19:37:21 +08:00
parent ef0a9aa2db
commit f03ac6b8e4
70 changed files with 604 additions and 82 deletions

BIN
dist.zip Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
{
"type": "FeatureCollection",
"name": "53",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "FID_": 0, "Entity": "LWPolyline", "Layer": "JZD", "Color": 1, "Linetype": "CONTINUOUS", "Elevation": 0.0, "LineWt": 25, "RefName": null, "height": 0.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 113.817802708539915, 23.25060214342405, 0.0 ], [ 113.817802708539915, 23.25060214342405, 0.0 ], [ 113.817809209046672, 23.250598103484563, 0.0 ], [ 113.817855785345316, 23.250585433085476, 0.0 ], [ 113.81793855664921, 23.250555340601839, 0.0 ], [ 113.818018127784654, 23.250518604038916, 0.0 ], [ 113.818093874889314, 23.250475514332937, 0.0 ], [ 113.818165200421845, 23.250426411211176, 0.0 ], [ 113.818225004498359, 23.250377074401491, 0.0 ], [ 113.818230115191383, 23.250367625771254, 0.0 ], [ 113.818246739999964, 23.25032178, 0.0 ], [ 113.81827989, 23.25027594, 0.0 ], [ 113.818321329999989, 23.25023012000003, 0.0 ], [ 113.81837102999998, 23.250184310000016, 0.0 ], [ 113.81844554999995, 23.250146160000018, 0.0 ], [ 113.818577990000023, 23.25010045, 0.0 ], [ 113.818599689337915, 23.250093793546359, 0.0 ], [ 113.818776638917882, 23.250039512643596, 0.0 ], [ 113.818798112030606, 23.250035137153137, 0.0 ], [ 113.818798819911265, 23.250034925527586, 0.0 ], [ 113.818890475116518, 23.25001517349089, 0.0 ], [ 113.818906597420508, 23.250012992352701, 0.0 ], [ 113.81892561, 23.250009110000029, 0.0 ], [ 113.819124210000055, 23.249986400000036, 0.0 ], [ 113.819223500000021, 23.24998652, 0.0 ], [ 113.819322769999971, 23.25000193, 0.0 ], [ 113.819482908267261, 23.250045286516855, 0.0 ], [ 113.819521259999902, 23.25005567, 0.0 ], [ 113.819570880000029, 23.250071030000019, 0.0 ], [ 113.819670129999949, 23.250101720000011, 0.0 ], [ 113.819868629999974, 23.250155459999974, 0.0 ], [ 113.81991824, 23.250178450000053, 0.0 ], [ 113.820017450000051, 23.250239720000057, 0.0 ], [ 113.820116590000026, 23.250346870000037, 0.0 ], [ 113.82019918000006, 23.250453990000047, 0.0 ], [ 113.820273499999985, 23.250568760000032, 0.0 ], [ 113.820285758999944, 23.250591481, 0.0 ], [ 113.82039730043364, 23.250798250372064, 0.0 ], [ 113.820413778125314, 23.250844140522545, 0.0 ], [ 113.820428549588939, 23.250926669564006, 0.0 ], [ 113.820450298403813, 23.25104816801165, 0.0 ], [ 113.820462322491494, 23.251061022575083, 0.0 ], [ 113.820753331516244, 23.250575433613296, 0.0 ], [ 113.820936583386228, 23.25024723771757, 0.0 ], [ 113.821372995245312, 23.249453251704708, 0.0 ], [ 113.821321563463144, 23.24943988473623, 0.0 ], [ 113.821276832613407, 23.249428279408797, 0.0 ], [ 113.820077691457442, 23.249117159196416, 0.0 ], [ 113.819864355443414, 23.24906180751713, 0.0 ], [ 113.819811693738714, 23.249051312555086, 0.0 ], [ 113.819758038924448, 23.24904684546361, 0.0 ], [ 113.819704195134463, 23.249048474886461, 0.0 ], [ 113.819650971514591, 23.249056175567016, 0.0 ], [ 113.819599166581824, 23.249069832845016, 0.0 ], [ 113.819549556501471, 23.249089240837158, 0.0 ], [ 113.819502888239626, 23.249114107846619, 0.0 ], [ 113.819459860012387, 23.249144061758503, 0.0 ], [ 113.819396154131695, 23.24919006988787, 0.0 ], [ 113.819328355998238, 23.249230781065691, 0.0 ], [ 113.819256981992382, 23.24926588707077, 0.0 ], [ 113.819182572872364, 23.249295120343501, 0.0 ], [ 113.819105692787318, 23.249318260305749, 0.0 ], [ 113.819034095962081, 23.249333595487272, 0.0 ], [ 113.819026924393754, 23.249335131549199, 0.0 ], [ 113.818946885472812, 23.249345600243281, 0.0 ], [ 113.818931185714248, 23.249346381255837, 0.0 ], [ 113.818920392994343, 23.249338093232097, 0.0 ], [ 113.818875358851315, 23.249303511361038, 0.0 ], [ 113.818846754163772, 23.249304056186872, 0.0 ], [ 113.818755286125437, 23.249300539191228, 0.0 ], [ 113.818671838201269, 23.249285993468142, 0.0 ], [ 113.81857688591073, 23.249261768553307, 0.0 ], [ 113.818499746685958, 23.249233488550558, 0.0 ], [ 113.818298429456462, 23.249563382917916, 0.0 ], [ 113.818114864900934, 23.249902005396926, 0.0 ], [ 113.817949490839737, 23.250248537998175, 0.0 ], [ 113.817802708539915, 23.25060214342405, 0.0 ] ] ] ] } }
]
}

View File

@ -102,7 +102,7 @@
<div class="position">
<label>经度{{ lng }}</label>
<label>纬度{{ lat }}</label>
<!-- <label>视角高{{cameraHeight}}</label> -->
<label>视角高{{cameraHeight}}</label>
</div>
</template>
<script setup>
@ -110,7 +110,7 @@ import { ref, onMounted, nextTick } from 'vue'
import { Plus, Minus, View } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import dataLoading from './utils/dataLoading.js';
import { getHeightByType, cartesianToLnglat ,debounce} from './utils/common.js';
import { getHeightByType, cartesianToLnglat ,debounce,getAssetsFile} from './utils/common.js';
import { queryGridItem } from './api/index.js';
import Bubble from '@/components/bubble/index.js'
import { sourceEpsgCode, targetProj4Defined } from "@/config/index.js"
@ -183,10 +183,14 @@ const initViewer = async () => {
// viewer.scene.globe.translucency.enabled = true;
viewer.scene.globe.undergroundColor = Cesium.Color.TRANSPARENT;
//
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 20
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 5;
// viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;//穿
// viewer.scene.pickTranslucentDepth = true;
//
viewer.scene.debugShowFramesPerSecond = true;
addSkyBox();
initNavigation();
initEvent(viewer);
window.viewer = viewer;
@ -220,6 +224,11 @@ const initViewer = async () => {
if (lc.type === "poi") {
dataLoading.addPoiLayer(viewer, wsConfig.url, lc.id, wsConfig.show)
}
if (lc.type === "geojson") {
fetch(wsConfig.url).then(res => res.json()).then(data => {
dataLoading.addGeoJSONData(viewer, data, lc.id, wsConfig.show)
})
}
if (lc.type === "3dTilesLayer") {
let url = tileUrlTemplate.replace('{Text}', lc.id);
dataLoading.loadTileset(viewer, url, lc.id,false).then(tileset => {
@ -240,6 +249,24 @@ const initViewer = async () => {
window.coordSource = new Cesium.CustomDataSource("coordSource");
viewer.dataSources.add(window.coordSource);
}
//
import GroundSkyBox from './utils/SkyboxOnGround/index.js';
const addSkyBox = () => {
viewer.scene.skyBox = new GroundSkyBox ({
show: true,
sources: {
positiveX: getAssetsFile('img/skybox/lantian/Right.jpg'),
negativeX: getAssetsFile('img/skybox/lantian/Left.jpg'),
positiveY: getAssetsFile('img/skybox/lantian/Front.jpg'),
negativeY: getAssetsFile('img/skybox/lantian/Back.jpg'),
positiveZ: getAssetsFile('img/skybox/lantian/Up.jpg'),
negativeZ: getAssetsFile('img/skybox/lantian/Down.jpg'),
},
nearGround:true
});
}
const clearEntity = () => {
if (!isDraw) {
//
@ -520,34 +547,34 @@ const initEvent = (viewer) => {
//
//
//
viewer.scene.postRender.addEventListener(() => {
// viewer.scene.postRender.addEventListener(() => {
const allTilesets = getAll3DTilesets(viewer);
allTilesets.forEach(tileset => {
const distance = Cesium.Cartesian3.distance(
viewer.camera.position,
tileset.boundingSphere.center
);
if (distance > 2500) {
tileset.maximumScreenSpaceError = 256;
tileset.baseScreenSpaceError = 1024 * 3;
}else if (distance > 2000) {
tileset.maximumScreenSpaceError = 128;
tileset.baseScreenSpaceError = 1024 * 2;
}else if (distance > 1500) {
tileset.maximumScreenSpaceError = 64;
tileset.baseScreenSpaceError = 1024 ;
// tileset.skipScreenSpaceErrorFactor = 512;
} else if (distance > 500) {
tileset.maximumScreenSpaceError = 32;
tileset.baseScreenSpaceError = 16;
} else {
tileset.maximumScreenSpaceError = 16;
tileset.baseScreenSpaceError = 16;
}
})
// const allTilesets = getAll3DTilesets(viewer);
// allTilesets.forEach(tileset => {
// const distance = Cesium.Cartesian3.distance(
// viewer.camera.position,
// tileset.boundingSphere.center
// );
// if (distance > 2500) {
// tileset.maximumScreenSpaceError = 256;
// tileset.baseScreenSpaceError = 1024 * 3;
// }else if (distance > 2000) {
// tileset.maximumScreenSpaceError = 128;
// tileset.baseScreenSpaceError = 1024 * 2;
// }else if (distance > 1500) {
// tileset.maximumScreenSpaceError = 64;
// tileset.baseScreenSpaceError = 1024 ;
// // tileset.skipScreenSpaceErrorFactor = 512;
// } else if (distance > 500) {
// tileset.maximumScreenSpaceError = 32;
// tileset.baseScreenSpaceError = 16;
// } else {
// tileset.maximumScreenSpaceError = 16;
// tileset.baseScreenSpaceError = 16;
// }
// })
});
// });
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
//
@ -654,6 +681,7 @@ const initEvent = (viewer) => {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
lat.value = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6);
lng.value = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6);
cameraHeight.value = viewer.camera.positionCartographic.height.toFixed(2);
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
}
@ -701,6 +729,16 @@ const checkChange = (data, checked, childrenChecked) => {
if (data.type === "poi") {
viewer.dataSources.getByName(data.id)[0].show = checked
}
if (data.type === "geojson") {
const primitives = viewer.scene.primitives;
for (let i = 0; i < primitives.length; ++i) {
if (primitives.get(i).name == data.id) {
primitives.get(i).show = checked;
checked&&dataLoading.focusPrimitivesCollection(primitives.get(i));
break;
}
}
}
if (data.type === "userVector") {
const primitives = viewer.scene.primitives;
let currPrimitive = null;
@ -724,7 +762,8 @@ const checkChange = (data, checked, childrenChecked) => {
}
}
if (currPrimitive) {
currPrimitive.show = checked
currPrimitive.show = checked;
// viewer.zoomTo(currPrimitive);
} else {
if (checked) {
let url = tileUrlTemplate.replace('{Text}', data.id);
@ -1180,6 +1219,9 @@ async function calcArea(points) {
label:nth-child(2) {
margin-left: 0.8rem;
}
label:nth-child(3) {
margin-left: 0.8rem;
}
}
.addition-nav {

BIN
src/assets/img/404.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,68 +1,68 @@
// const host = "192.168.21.30";
// const host = "172.27.40.60";
const host = "192.168.28.126";
const geoserverUrl = "http://"+host+":8088/geoserver"
const host = "127.0.0.1";
const geoserverUrl = "http://" + host + ":8088/geoserver"
const geoserverWMTSUrl = geoserverUrl+"/cxy/gwc/service/wmts"
const geoserverWMTSUrl = geoserverUrl + "/cxy/gwc/service/wmts"
const gridServiceName = "cxy:modelgrid4326"
const demoWmtsService = {
id:"dom0.2m",
id: "dom0.2m",
url: geoserverWMTSUrl,
layerName: "cxy:dom0.2m",
epsgCode: "EPSG:4326",
extent:[
extent: [
113.7574461874795,
23.213844014596848,
113.8554165916731,
23.317278851278726
]
}
export const geoserverWFSUrl = geoserverUrl+"/wfs";
export const terrainUrl = 'http://'+host+':9090/terrain/';
export const geoserverWFSUrl = geoserverUrl + "/wfs";
export const terrainUrl = 'http://' + host + ':9090/terrain/';
export const targetProj4Defined = "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs"
export const sourceEpsgCode = "EPSG:4326"
// export const tileUrlTemplate = `http://61.144.79.174:9095/data/3dtiles/%E5%A2%9E%E5%9F%8E%E5%8C%BA100%E5%B9%B3%E6%96%B9%E5%8D%83%E7%B1%B3%E6%A8%A1%E5%9E%8B/{Text}/tileset.json`
export const tileUrlTemplate = `http://${host}:9090/3dtiles/{Text}/tileset.json`
// export const tileUrlTemplate = `http://${host}:9292/3dtiles1.1/draco/{Text}/tileset.json`
export const initConfig = {
point:[113.804,23.263,20000.0]
point: [113.804, 23.263, 20000.0]
}
export const queryUrl = geoserverUrl+`/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=${gridServiceName}&outputFormat=application/json&maxFeatures=50`;
export const gridGeojsonUrl = geoserverUrl+`/cxy/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=${gridServiceName}&maxFeatures=99999&outputFormat=application/json`
export const queryUrl = geoserverUrl + `/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=${gridServiceName}&outputFormat=application/json&maxFeatures=50`;
export const gridGeojsonUrl = geoserverUrl + `/cxy/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=${gridServiceName}&maxFeatures=99999&outputFormat=application/json`
export const cesiumKey = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyNjI2ZjVjMS0zZTFjLTQ3MDAtYTZlZC02YWFjOWQwNzBjNjIiLCJpZCI6ODM1NTQsImlhdCI6MTY0NTY1NzYzM30.IPqS_sM-s_vzNnK0EAiTy6kpYP5RBYkuMgbqJtKQkPw";
export const layerTreeData = [
export const layerTreeData = [
{
label: '基础图层',
id:'baseLayer',
id: 'baseLayer',
disabled: true,
children: [
{
label: '电子地图-高德',
id:'amap-vector',
type:'xyz',
layerConfig:{
url:"http://"+host+":9090/data/wmts/amap/{z}/{x}/{y}.png",
id: 'amap-vector',
type: 'xyz',
layerConfig: {
url: "http://" + host + ":9090/data/wmts/amap/{z}/{x}/{y}.png",
show: true
}
},
{
label: '遥感影像',
id:demoWmtsService.id,
type:'xyz',
layerConfig:{
url:"http://"+host+":9090/data/wmts/grid/{z}/{x}/{y}.png",
id: demoWmtsService.id,
type: 'xyz',
layerConfig: {
url: "http://" + host + ":9090/data/wmts/grid/{z}/{x}/{y}.png",
show: true
}
},
{
label: '分幅网格',
id:gridServiceName,
id: gridServiceName,
type: "wfs",
layerConfig:{
url:gridGeojsonUrl,
layerConfig: {
url: gridGeojsonUrl,
show: true
}
},
@ -70,46 +70,138 @@ export const layerTreeData = [
},
{
label: '矢量数据',
id:'vectorLayer',
id: 'vectorLayer',
disabled: true,
children: [
{
label: '兴趣点',
id:'poi',
id: 'poi',
type: "poi",
layerConfig:{
layerConfig: {
url: '/datas/poi0317.geojson',
show: false
}
},
],
},
{
label: '规划设计模型',
id:'slope',
disabled: true,
children: [
{
label: '保利251亩地块',
id:'baoli0309',
type: "3dTilesLayer",
layerConfig:{
label: '增城251亩地块项目',
id: 'redline251',
type: "geojson",
layerConfig: {
url: '/datas/redline/251.geojson',
show: false
}
},
{
label: '荔湖旁120亩地块',
id:'LiHu120',
type: "3dTilesLayer",
layerConfig:{
id: 'redline120',
type: "geojson",
layerConfig: {
url: '/datas/redline/120.geojson',
show: false
}
},
{
label: '新城大道东侧53.464亩地块',
id: 'redline5346',
type: "geojson",
layerConfig: {
url: '/datas/redline/53_46.geojson',
show: false
}
},
],
},
{
label: '规划设计模型',
id: 'slope',
disabled: true,
children: [
// {
// label: '增城251亩项目总平面报建图',
// id:'baoli0309',
// type: "3dTilesLayer",
// layerConfig:{
// show: false
// }
// },
{
label: '增城251亩项目总平面报建图',
id: 'baoli0610',
type: "3dTilesLayer",
layerConfig: {
show: false
}
},
{
label: '荔湖旁120亩地块',
id: 'LiHu120',
type: "3dTilesLayer",
layerConfig: {
show: false
}
},
{
label: '荔湖街新城大道东侧53.464亩地块',
id: 'xinchengdadao',
type: "3dTilesLayer",
layerConfig: {
show: false
}
},
// {
// label: '0626',
// id: 'baoli0626',
// type: "3dTilesLayer",
// layerConfig: {
// show: false
// }
// },
// {
// label: '0627',
// id: 'baoli0627',
// type: "3dTilesLayer",
// layerConfig: {
// show: false
// }
// },
{
label: '广汕公路南侧22.974亩',
id: 'b0701-1',
type: "3dTilesLayer",
layerConfig: {
show: false
}
},
// {
// label: '周边参照',
// id: 'b0701-2',
// type: "3dTilesLayer",
// layerConfig: {
// show: false
// }
// },
// {
// label: '方案一',
// id: 'plan-a',
// type: "3dTilesLayer",
// layerConfig: {
// show: false
// }
// },
// {
// label: '方案二',
// id: 'plan-b',
// type: "3dTilesLayer",
// layerConfig: {
// show: false
// }
// },
]
},
{
label: '倾斜模型',
id:'3dtile',
id: '3dtile',
disabled: true,
children: [
// {

View File

@ -0,0 +1,333 @@
import * as Cesium from 'cesium';
const BoxGeometry = Cesium.BoxGeometry;
const Cartesian3 = Cesium.Cartesian3;
const defaultValue = Cesium.defaultValue;
const defined = Cesium.defined;
const destroyObject = Cesium.destroyObject;
const DeveloperError = Cesium.DeveloperError;
const GeometryPipeline = Cesium.GeometryPipeline;
const Matrix3 = Cesium.Matrix3;
const Matrix4 = Cesium.Matrix4;
const Transforms = Cesium.Transforms;
const VertexFormat = Cesium.VertexFormat;
const BufferUsage = Cesium.BufferUsage;
const CubeMap = Cesium.CubeMap;
const DrawCommand = Cesium.DrawCommand;
const loadCubeMap = Cesium.loadCubeMap;
const RenderState = Cesium.RenderState;
const VertexArray = Cesium.VertexArray;
const BlendingState = Cesium.BlendingState;
const SceneMode = Cesium.SceneMode;
const ShaderProgram = Cesium.ShaderProgram;
const ShaderSource = Cesium.ShaderSource;
//片元着色器,直接从源码复制
// const SkyBoxFS = "uniform samplerCube u_cubeMap;\n\
// \n\
// in vec3 v_texCoord;\n\
// \n\
// void main()\n\
// {\n\
// vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord));\n\
// out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\n\
// }\n\
// ";
//片元着色器
let SkyBoxFS = `uniform samplerCube u_cubeMap;
in vec3 v_texCoord;
void main()
{
vec4 color = texture(u_cubeMap, normalize(v_texCoord));
out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);
}
`;
// //顶点着色器
// const SkyBoxVS =
// `in vec3 position;
// out vec3 v_texCoord;
// uniform mat3 u_rotateMatrix;
// void main()
// {
// vec3 p = czm_viewRotation * u_rotateMatrix * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));
// gl_Position = czm_projection * vec4(p, 1.0);
// v_texCoord = position.xyz;
// }`;
// 顶点着色器,主要修改是乘了一个旋转矩阵(之前计算出来当前相机方位的旋转矩阵)
let SkyBoxVS = `
uniform mat3 u_rotateMatrix;
in vec3 position;
out vec3 v_texCoord;
void main()
{
vec3 p = czm_viewRotation * u_rotateMatrix * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));
gl_Position = czm_projection * vec4(p, 1.0);
v_texCoord = position.xyz;
}
`;
/**
* A sky box around the scene to draw stars. The sky box is defined using the True Equator Mean Equinox (TEME) axes.
* <p>
* This is only supported in 3D. The sky box is faded out when morphing to 2D or Columbus view. The size of
* the sky box must not exceed {@link Scene#maximumCubeMapSize}.
* </p>
*
* @alias SkyBox
* @constructor
*
* @param {Object} options Object with the following properties:
* @param {Object} [options.sources] The source URL or <code>Image</code> object for each of the six cube map faces. See the example below.
* @param {Boolean} [options.show=true] Determines if this primitive will be shown.
*
*
* @example
* scene.skyBox = new Cesium.SkyBox({
* sources : {
* positiveX : 'skybox_px.png',
* negativeX : 'skybox_nx.png',
* positiveY : 'skybox_py.png',
* negativeY : 'skybox_ny.png',
* positiveZ : 'skybox_pz.png',
* negativeZ : 'skybox_nz.png'
* }
* });
*
* @see Scene#skyBox
* @see Transforms.computeTemeToPseudoFixedMatrix
*/
function SkyBox(options) {
/**
* The sources used to create the cube map faces: an object
* with <code>positiveX</code>, <code>negativeX</code>, <code>positiveY</code>,
* <code>negativeY</code>, <code>positiveZ</code>, and <code>negativeZ</code> properties.
* These can be either URLs or <code>Image</code> objects.
*
* @type Object
* @default undefined
*/
this.sources = options.sources;
this._sources = undefined;
/**
* 是否开启近地模式
*/
this.nearGround = options.nearGround;
/**
* Determines if the sky box will be shown.
*
* @type {Boolean}
* @default true
*/
this.show = defaultValue(options.show, true);
this._command = new DrawCommand({
modelMatrix: Matrix4.clone(Matrix4.IDENTITY),
owner: this,
});
this._cubeMap = undefined;
this._attributeLocations = undefined;
this._useHdr = undefined;
}
/**
* Called when {@link Viewer} or {@link CesiumWidget} render the scene to
* get the draw commands needed to render this primitive.
* <p>
* Do not call this function directly. This is documented just to
* list the exceptions that may be propagated when the scene is rendered:
* </p>
*
* @exception {DeveloperError} this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.
* @exception {DeveloperError} this.sources properties must all be the same type.
*/
SkyBox.prototype.update = function (frameState, useHdr) {
const that = this;
if (!this.show) {
return undefined;
}
if (
frameState.mode !== SceneMode.SCENE3D &&
frameState.mode !== SceneMode.MORPHING
) {
return undefined;
}
// The sky box is only rendered during the render pass; it is not pickable, it doesn't cast shadows, etc.
if (!frameState.passes.render) {
return undefined;
}
const context = frameState.context;
if (this._sources !== this.sources) {
this._sources = this.sources;
const sources = this.sources;
//>>includeStart('debug', pragmas.debug);
if (
!defined(sources.positiveX) ||
!defined(sources.negativeX) ||
!defined(sources.positiveY) ||
!defined(sources.negativeY) ||
!defined(sources.positiveZ) ||
!defined(sources.negativeZ)
) {
throw new DeveloperError(
"this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties."
);
}
if (
typeof sources.positiveX !== typeof sources.negativeX ||
typeof sources.positiveX !== typeof sources.positiveY ||
typeof sources.positiveX !== typeof sources.negativeY ||
typeof sources.positiveX !== typeof sources.positiveZ ||
typeof sources.positiveX !== typeof sources.negativeZ
) {
throw new DeveloperError(
"this.sources properties must all be the same type."
);
}
//>>includeEnd('debug');
if (typeof sources.positiveX === "string") {
// Given urls for cube-map images. Load them.
loadCubeMap(context, this._sources).then(function (cubeMap) {
that._cubeMap = that._cubeMap && that._cubeMap.destroy();
that._cubeMap = cubeMap;
});
} else {
this._cubeMap = this._cubeMap && this._cubeMap.destroy();
this._cubeMap = new CubeMap({
context: context,
source: sources,
});
}
}
const command = this._command;
if (!defined(command.vertexArray)) {
//uniforms
command.modelMatrix = Transforms.eastNorthUpToFixedFrame(
frameState.camera._positionWC
);
command.uniformMap = {
u_cubeMap: function () {
return that._cubeMap;
},
u_rotateMatrix: function () {
// // return Matrix4.getRotation(command.modelMatrix, skyboxMatrix3);
return that.nearGround ? (command.modelMatrix = Transforms.eastNorthUpToFixedFrame(frameState.camera._positionWC),
Matrix4.getMatrix3(command.modelMatrix, new Matrix3)) : Matrix3.IDENTITY;
// if (!Cesium.defined(Cesium.Matrix4.getRotation)) {
// return Cesium.Matrix4.getMatrix3(command.modelMatrix, skyboxMatrix3);
// }
// return Cesium.Matrix4.getRotation(command.modelMatrix, skyboxMatrix3);
}
};
// command.uniformMap = {
// u_cubeMap: function () {
// return that._cubeMap;
// },
// u_rotateMatrix: function () {
// return that.nearGround ? (command.modelMatrix = Transforms.eastNorthUpToFixedFrame(frameState.camera._positionWC),
// Matrix4.getMatrix3(command.modelMatrix, new Matrix3)) : Matrix3.IDENTITY;
// }
// };
const geometry = BoxGeometry.createGeometry(
BoxGeometry.fromDimensions({
dimensions: new Cartesian3(2.0, 2.0, 2.0),
vertexFormat: VertexFormat.POSITION_ONLY,
})
);
const attributeLocations = (this._attributeLocations = GeometryPipeline.createAttributeLocations(
geometry
));
command.vertexArray = VertexArray.fromGeometry({
context: context,
geometry: geometry,
attributeLocations: attributeLocations,
bufferUsage: BufferUsage.STATIC_DRAW,
});
command.renderState = RenderState.fromCache({
blending: BlendingState.ALPHA_BLEND,
});
}
if (!defined(command.shaderProgram) || this._useHdr !== useHdr) {
const fs = new ShaderSource({
defines: [useHdr ? "HDR" : ""],
sources: [SkyBoxFS],
});
// command.shaderProgram = ShaderProgram.fromCache({
// context: context,
// vertexShaderSource: SkyBoxVS,
// fragmentShaderSource: fs,
// attributeLocations: this._attributeLocations,
// });
command.shaderProgram = Cesium.ShaderProgram.fromCache({
context: context,
vertexShaderSource: SkyBoxVS,
fragmentShaderSource: fs,
attributeLocations: this._attributeLocations,
});
this._useHdr = useHdr;
}
if (!defined(this._cubeMap)) {
return undefined;
}
return command;
};
/**
* Returns true if this object was destroyed; otherwise, false.
* <br /><br />
* If this object was destroyed, it should not be used; calling any function other than
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
*
* @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
*
* @see SkyBox#destroy
*/
SkyBox.prototype.isDestroyed = function () {
return false;
};
/**
* Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
* release of WebGL resources, instead of relying on the garbage collector to destroy this object.
* <br /><br />
* Once an object is destroyed, it should not be used; calling any function other than
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
* assign the return value (<code>undefined</code>) to the object as done in the example.
*
* @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
*
*
* @example
* skyBox = skyBox && skyBox.destroy();
*
* @see SkyBox#isDestroyed
*/
SkyBox.prototype.destroy = function () {
const command = this._command;
command.vertexArray = command.vertexArray && command.vertexArray.destroy();
command.shaderProgram =
command.shaderProgram && command.shaderProgram.destroy();
this._cubeMap = this._cubeMap && this._cubeMap.destroy();
return destroyObject(this);
};
export default SkyBox;

View File

@ -73,8 +73,13 @@ function debounce(func, delay) {
}, delay);
};
}
function getAssetsFile(url) {
return new URL(`../assets/${url}`, import.meta.url).href;
}
export {
getHeightByType,
cartesianToLnglat,
debounce
debounce,
getAssetsFile
}

View File

@ -52,7 +52,7 @@ const dataLoading = {
},
addGridLayer: async function (viewer, url, gridServiceName, gridDataCallBack, show) {
fetch(url).then(res => res.json()).then(async result => {
console.log("result", result)
// console.log("result", result)
// 方式1.使用图元的方式加载
const tmpPrimitives = new Cesium.PrimitiveCollection();
const labelPrimitives = new Cesium.LabelCollection({ "name": gridServiceName + "_label" });
@ -432,7 +432,7 @@ const dataLoading = {
const instance = new Cesium.GeometryInstance({
geometry: new Cesium.GroundPolylineGeometry({
positions: polylinePositions,
width: 1.0
width: 3.0
}),
id: JSON.stringify(feature.properties)
});
@ -448,11 +448,38 @@ const dataLoading = {
tmpPrimitives.show = show;
viewer.scene.primitives.add(tmpPrimitives);
if(show){
// // 获取图元的包围盒
// if (tmpPrimitives.length) {
// var polyPositions = tmpPrimitives.get(0).geometryInstances.geometry._positions;
// var boundingSphere = Cesium.BoundingSphere.fromPoints(polyPositions); //获取面的中心点
// if (boundingSphere) {
// // polyCenter.z+=2000
// // viewer.camera.flyTo({
// // destination : polyCenter,
// // orientation: {//使用欧拉角
// // heading: Cesium.Math.toRadians(0.0),//使用弧度的形式
// // pitch: Cesium.Math.toRadians(-90.0),
// // roll: 0.0
// // },
// // duration:3,//设置飞行时间,单位为秒
// // maximumHeight:1000,//最大的飞行高度
// // });
// viewer.camera.flyToBoundingSphere(boundingSphere);
// }
// }
dataLoading.focusPrimitivesCollection(tmpPrimitives);
}
},
focusPrimitivesCollection(primitives){
// 获取图元的包围盒
if (tmpPrimitives.length) {
var polyPositions = tmpPrimitives.get(0).geometryInstances.geometry._positions;
var boundingSphere = Cesium.BoundingSphere.fromPoints(polyPositions); //获取面的中心点
if (boundingSphere) {
if (primitives.length) {
// Cesium 会自动释放该 Primitive 关联的所有 GeometryInstance 的资源(如 GPU 内存、纹理等)
// 只有图元第一次加载的时候才有效
var polyPositions = primitives.get(0).geometryInstances?.geometry?._positions;
if (polyPositions) {
var boundingSphere = Cesium.BoundingSphere.fromPoints(polyPositions); //获取面的中心点
// polyCenter.z+=2000
// viewer.camera.flyTo({
// destination : polyCenter,
@ -464,16 +491,14 @@ const dataLoading = {
// duration:3,//设置飞行时间,单位为秒
// maximumHeight:1000,//最大的飞行高度
// });
viewer.camera.flyToBoundingSphere(boundingSphere);
boundingSphere&&viewer.camera.flyToBoundingSphere(boundingSphere);
}
}
},
loadTileset: async (viewer, tilesetUrl, name, isZoom = true) => {
try {
const tileset = await Cesium.Cesium3DTileset.fromUrl(tilesetUrl, {
baseScreenSpaceError: 32,//默认16定义了瓦片加载的基础屏幕空间误差。数值越大加载的瓦片精度越低、越模糊但加载速度会更快可根据场景和需求适当增大该值如设置为 1024 等
baseScreenSpaceError: 8,//32,//默认16定义了瓦片加载的基础屏幕空间误差。数值越大加载的瓦片精度越低、越模糊但加载速度会更快可根据场景和需求适当增大该值如设置为 1024 等
skipScreenSpaceErrorFactor: 64,//控制跳过的屏幕空间误差级别,值越大,跳过的级别越多,加载速度越快,但可能会导致细节丢失,可根据实际情况调整,如设置为 16 等
maximumScreenSpaceError: 120,//设置瓦片加载的最大屏幕空间误差,超过该值的瓦片将不会被加载。增大此值可以减少加载的数据量,加快加载速度,但可能会降低远处瓦片的显示质量,可将其数值加大
// maximumMemoryUsage: 128, // 内存分配变小有利于倾斜摄影数据回收,提升性能体验