|
@@ -133,11 +133,11 @@ export default {
|
|
|
}
|
|
|
// 加载点位(3DTiles)
|
|
|
else if (type === 4) {
|
|
|
- app.addPositionTiles();
|
|
|
+ app.addPositionTiles(app.modelData, app.modelUrls);
|
|
|
}
|
|
|
// 加载点位(gltf/glb)
|
|
|
else if (type === 5) {
|
|
|
- app.addPositionGltf();
|
|
|
+ app.addPositionGltf(app.modelData, app.modelUrls);
|
|
|
}
|
|
|
},
|
|
|
// 加载GeoJson
|
|
@@ -151,7 +151,6 @@ export default {
|
|
|
})
|
|
|
viewer.dataSources.add(res);
|
|
|
res.then(() => {
|
|
|
- debugger
|
|
|
viewer.zoomTo(res, {heading: 2.718565, pitch: -0.415366, roll: 0.0,});
|
|
|
}).catch(() => {
|
|
|
app.$message({message: '加载失败', type: 'error'})
|
|
@@ -259,25 +258,97 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
// 添加点位(3DTiles)
|
|
|
- addPositionTiles() {
|
|
|
+ addPositionTiles(jsonUrls, urls) {
|
|
|
+ let app = this;
|
|
|
+ let pos = {}
|
|
|
+ for (let i = 0; i < urls.length; i++) {
|
|
|
+ for (let j = 0; j < jsonUrls.length; j++) {
|
|
|
+ app.renderPositionTiles(jsonUrls[j], urls[i])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let lon = (pos.east+pos.west)/2
|
|
|
+ let lat = (pos.north+pos.south)/2
|
|
|
+ viewer.camera.flyTo({
|
|
|
+ destination: SkyScenery.Cartesian3.fromDegrees(SkyScenery.Math.toDegrees(lon),SkyScenery.Math.toDegrees(lat), 300),
|
|
|
+ orientation: {
|
|
|
+ heading: SkyScenery.Math.toRadians(0),
|
|
|
+ pitch: SkyScenery.Math.toRadians(-90),
|
|
|
+ roll: 0,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ renderPositionTiles(positionsUrl, url) {
|
|
|
+ let app = this;
|
|
|
+ let tile = new Cesium.Cesium3DTileset({
|
|
|
+ url: url,
|
|
|
+ maximumScreenSpaceError: 2,
|
|
|
+ maximumNumberOfLoadedTiles: 100000,
|
|
|
+ })
|
|
|
+ tile.tileFailed.addEventListener(function (err) {
|
|
|
+ app.$message({message: '模型加载失败', type: 'error'});
|
|
|
+ app.handleClose()
|
|
|
+ })
|
|
|
+ app.$util.request.get(positionsUrl).then(res=> {
|
|
|
+ if (res && res.positions) {
|
|
|
+ for (let i = 0; i < res.positions.length; i++) {
|
|
|
+ let positions = res.positions[i]
|
|
|
+ for (let j = 0; j < positions.length; j=j+2) {
|
|
|
+ tile.readyPromise.then(function (tileset) {
|
|
|
+ console.log(111)
|
|
|
+ viewer.scene.primitives.add(tileset);
|
|
|
+ let longitude = SkyScenery.Math.toDegrees(position[j]);
|
|
|
+ let latitude = SkyScenery.Math.toDegrees(position[j+1]);
|
|
|
+ let heightOffset = 1;
|
|
|
+ let boundingSphere = tileset.boundingSphere;
|
|
|
+ let cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
|
|
|
+ let offsetValue = Cesium.Cartographic.fromDegrees(longitude, latitude, heightOffset)
|
|
|
+ let surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
|
|
|
+ let offset = Cesium.Cartesian3.fromRadians(offsetValue.longitude, offsetValue.latitude, heightOffset);
|
|
|
+ let translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
|
|
|
+ tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
|
|
|
+ viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
|
|
|
+ tile.readyPromise.then(function (tileset) {
|
|
|
+ let longitude = 113.0;
|
|
|
+ let latitude = 28.0
|
|
|
+ let heightOffset = 1;
|
|
|
+ let boundingSphere = tileset.boundingSphere;
|
|
|
+ let cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
|
|
|
+ let offsetvalue = Cesium.Cartographic.fromDegrees(longitude, latitude, heightOffset)
|
|
|
+ let surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
|
|
|
+ let offset = Cesium.Cartesian3.fromRadians(offsetvalue.longitude, offsetvalue.latitude, heightOffset);
|
|
|
+ let translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
|
|
|
+ tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
|
|
|
+ viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius *
|
|
|
+ 1.0));
|
|
|
+ });
|
|
|
},
|
|
|
// 添加点位(Gltf/glb)
|
|
|
addPositionGltf(jsonUrls, gltfUrls) {
|
|
|
+ let app = this;
|
|
|
let pos = {}
|
|
|
for (let i = 0; i < gltfUrls.length; i++) {
|
|
|
for (let j = 0; j < jsonUrls.length; j++) {
|
|
|
- SkyScenery.addTree(jsonUrls[j],gltfUrls[i]).then((treeArr) => {
|
|
|
+ SkyScenery.addTree(app.addTokenToUrl(jsonUrls[j]), app.addTokenToUrl(gltfUrls[i])).then((treeArr) => {
|
|
|
treeArr.map(function (item) {
|
|
|
viewer.scene.primitives.add(item);
|
|
|
pos.east = item.geometryInstances.geometry.rectangle.east;
|
|
|
pos.north = item.geometryInstances.geometry.rectangle.north;
|
|
|
+ pos.west = item.geometryInstances.geometry.rectangle.west;
|
|
|
+ pos.south = item.geometryInstances.geometry.rectangle.south;
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+ let lon = (pos.east+pos.west)/2
|
|
|
+ let lat = (pos.north+pos.south)/2
|
|
|
viewer.camera.flyTo({
|
|
|
- destination: SkyScenery.Cartesian3.fromDegrees(SkyScenery.Math.toDegrees(east),SkyScenery.Math.toDegrees(north), 300),
|
|
|
+ destination: SkyScenery.Cartesian3.fromDegrees(SkyScenery.Math.toDegrees(lon),SkyScenery.Math.toDegrees(lat), 300),
|
|
|
orientation: {
|
|
|
heading: SkyScenery.Math.toRadians(0),
|
|
|
pitch: SkyScenery.Math.toRadians(-90),
|