| | |
| | | |
| | | <template> |
| | | <div |
| | | id="mapdiv" |
| | |
| | | @click="underground" |
| | | >地下</el-button> |
| | | <el-button |
| | | size="small" |
| | | v-if="$store.state.previewLayer.type != '3dml' && |
| | | $store.state.previewLayer.type !='cpt'" |
| | | size=" |
| | | small" |
| | | @click="pickupCoords" |
| | | >拾取</el-button> |
| | | <el-button |
| | | size="small" |
| | | v-if="$store.state.previewLayer.type != '3dml' && |
| | | $store.state.previewLayer.type !='cpt'" |
| | | size=" |
| | | small" |
| | | @click="reload" |
| | | > |
| | | 重载 |
| | | </el-button> |
| | | <el-button |
| | | v-if="modelForm.modelid == null" |
| | | v-if="modelForm.modelid == null && $store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | size="small" |
| | | @click="getModeKeyId" |
| | | >模型主键</el-button> |
| | | <el-button |
| | | v-if="$store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | size="small" |
| | | @click="resave" |
| | | >保存</el-button> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="经度:"> |
| | | <el-form-item |
| | | label="经度:" |
| | | v-if="$store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | > |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.lon" |
| | |
| | | :max="135" |
| | | ></el-slider> |
| | | </el-form-item> |
| | | <el-form-item label="纬度:"> |
| | | <el-form-item |
| | | label="纬度:" |
| | | v-if="$store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | > |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.lat" |
| | |
| | | :max="54" |
| | | ></el-slider> |
| | | </el-form-item> |
| | | <el-form-item label="高度:"> |
| | | <el-form-item |
| | | label="高度:" |
| | | v-if="$store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | > |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.height" |
| | |
| | | :max="8800" |
| | | ></el-slider> |
| | | </el-form-item> |
| | | <el-form-item label="角度:"> |
| | | <el-form-item |
| | | label="角度:" |
| | | v-if="$store.state.previewLayer.type != '3dml'&& |
| | | $store.state.previewLayer.type !='cpt'" |
| | | > |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.yaw" |
| | |
| | | <undergroundModel ref="undergroundModel" /> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | <script> |
| | | import { |
| | | perms_selectLayers, |
| | |
| | | isJpg: false, |
| | | src: '' |
| | | }, |
| | | modelType: ['ifc', 'fbx', 'rvt', '3dml'], |
| | | modelType: ['ifc', 'fbx', 'rvt', '3dml', 'cpt'], |
| | | editModelFlag: false, |
| | | modelForm: { |
| | | lon: 119, |
| | |
| | | async setShowModelInfo(result) { |
| | | var modelKey = 'id'; |
| | | |
| | | if (result.tileset.pubid > 0) { |
| | | const data = await comprehensive_selectPubById({ id: result.tileset.pubid }) |
| | | if (data.code != 200) { |
| | | return |
| | | } else { |
| | | if (result.tileset) { |
| | | if (result.tileset.pubid && parseInt(result.tileset.pubid) > 0) { |
| | | const data = await comprehensive_selectPubById({ id: result.tileset.pubid }) |
| | | |
| | | modelKey = JSON.parse(data.result.json).modelid |
| | | if (data.code != 200) { |
| | | return |
| | | } else { |
| | | modelKey = JSON.parse(data.result.json).modelid |
| | | } |
| | | if (!modelKey) { |
| | | return this.$message('没有模型主键ID,无法查询数据'); |
| | | } |
| | | this.formInline.Id = result.getProperty(modelKey); |
| | | this.layerID = result.getProperty(modelKey); |
| | | |
| | | } |
| | | if (!modelKey) { |
| | | return this.$message('没有模型主键ID,无法查询数据'); |
| | | } |
| | | } else { |
| | | var id = '3dml' + result.primitive.id; |
| | | this.formInline.Id = id; |
| | | this.layerID = id; |
| | | } |
| | | |
| | | |
| | | |
| | | // this.formInline.title = result.getProperty("name") |
| | | this.formInline.Id = result.getProperty(modelKey); |
| | | this.layerID = result.getProperty(modelKey); |
| | | this.formInline.layerId = result.primitive.layerId; |
| | | this.formInline.layerName = result.primitive.id; |
| | | |
| | | // this.formInline.title = result.getProperty("name") |
| | | if (!this.formInline.Id) { |
| | | this.formInline.Id = "noAuto_" + this.formInline.layerId; |
| | | } |
| | | if (!this.layerID) { |
| | | this.layerID = "noAuto_" + this.formInline.layerId; |
| | | } |
| | | |
| | | this.startModelData(); |
| | | |
| | | this.dialogVisible = true; |
| | |
| | | if (data.code != 200) { |
| | | return; |
| | | } |
| | | |
| | | if (data.result == null) { |
| | | this.isShowModel = true; |
| | | this.formInline.name = this.formInline.title; |
| | | } else { |
| | | this.isShowModel = false; |
| | | this.formInline = data.result; |
| | | |
| | | this.formInline.title = this.formInline.name; |
| | | |
| | | } |
| | | }, |
| | | setChangeTileset(result) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | setAddLayers(res) { |
| | | if (res.serveType == "Tileset") { |
| | | setAddLayers(rs) { |
| | | |
| | | if (rs.serveType == "Tileset" || rs.serveType == "3DML") { |
| | | var url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | if (rs.url.indexOf("{host}") != -1) { |
| | | url = rs.url.replace("{host}", iisHost); |
| | | } else { |
| | | url = modelUrl + "/" + res.url |
| | | url = modelUrl + "/" + rs.url |
| | | } |
| | | |
| | | var tileset = Viewer.scene.primitives.add( |
| | | new Cesium.Cesium3DTileset({ |
| | | name: res.cnName, |
| | | name: rs.cnName, |
| | | url: url, //192.168.20.106,to4 |
| | | maximumScreenSpaceError: 64, // 最大屏幕空间错误:16 |
| | | maximumMemoryUsage: 768, // 最大内存:512 |
| | |
| | | ); |
| | | var that = this; |
| | | tileset.readyPromise.then((tileset) => { |
| | | tileset.id = res.cnName; |
| | | tileset.layerId = res.id; |
| | | tileset.pubid = res.pubid; |
| | | that.getArgsTileset(tileset, res); |
| | | tileset.id = rs.cnName; |
| | | tileset.layerId = rs.id; |
| | | tileset.pubid = rs.pubid; |
| | | if (rs.serveType != '3DML') { |
| | | that.getArgsTileset(tileset, rs); |
| | | } |
| | | |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | async getArgsTileset(tileset, res) { |
| | | async getArgsTileset(tileset, rs) { |
| | | |
| | | if (res.pubid > 0) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if (rs.pubid > 0) { |
| | | |
| | | const data = await comprehensive_selectPubById({ id: rs.pubid }) |
| | | |
| | | if (data.code != 200) { |
| | | |
| | | } else { |
| | | this.reloadTile(tileset, data.result.json) |
| | | |
| | | if (rs.serveType == '3DML') { |
| | | this.tileSet(tileset, parseFloat(rs.elev)) |
| | | } else { |
| | | this.reloadTile(tileset, data.result.json) |
| | | } |
| | | |
| | | |
| | | } |
| | | } else { |
| | | this.tileSet(tileset, parseFloat(res.elev)) |
| | | this.tileSet(tileset, parseFloat(rs.elev)) |
| | | |
| | | } |
| | | }, |
| | |
| | | var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); |
| | | //修改模型矩阵 |
| | | tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); |
| | | Viewer.flyTo(tileset); |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | reloadTile(tileset, res) { |
| | | var vm = JSON.parse(res) |
| | |
| | | // Viewer.camera.flyTo({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(110, 33, 8000000), |
| | | // }); |
| | | |
| | | if (is_production) { |
| | | Viewer.imageryLayers.removeAll(); |
| | | } |
| | | Viewer._enableInfoOrSelection = false; |
| | | //显示fps |
| | | Viewer.scene.debugShowFramesPerSecond = false; |
| | |
| | | // window.sgworld.navControl("scale", false); |
| | | //开启深度检测 |
| | | // sg.Analysis.depthTestAgainstTerrain(true) |
| | | if (is_production) { |
| | | var base_ulr = window.sceneConfig.baseUrl; |
| | | if (base_ulr.indexOf('{host}') > -1) { |
| | | base_ulr = base_ulr.replace("{host}", iisHost) |
| | | } |
| | | |
| | | window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: base_ulr, |
| | | |
| | | }) |
| | | ); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | Viewer.scene.globe.depthTestAgainstTerrain = true; |
| | | // window.elevationTool = new SmartEarth.ElevationTool(window.sg); |
| | | // elevationTool.setContourColor("#F1D487"); |
| | |
| | | requestVertexNormals: true, |
| | | }; |
| | | window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | // window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | // url: demLayer |
| | | // }); |
| | | |
| | | |
| | | // Viewer.terrainProvider = window.terrainLayer |
| | | |
| | | if (this.$store.state.previewLayer) { |
| | | var res = this.$store.state.previewLayer; |
| | | var type = res.type; |
| | | res.ulr = res.url.replace("{host}", iisHost); |
| | | if (type == 'DEM') { |
| | | window.terrainLayer.deleteObject(); |
| | | window.terrainLayer = null; |
| | | // Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); |
| | | // window.terrainLayer = null; |
| | | |
| | | window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | url: res.url |
| | | }); |
| | | Viewer.terrainProvider = window.terrainLayer |
| | | Viewer.camera.flyTo({ |
| | | /*Viewer.camera.flyTo({ |
| | | destination: Cesium.Cartesian3.fromDegrees(113.229279, 31.215949, 1000), |
| | | orientation: { |
| | | heading: 6.08434611923462, |
| | | pitch: Cesium.Math.toRadians(-45.0), |
| | | roll: 0.0 |
| | | } |
| | | });*/ |
| | | var wkt = this.$wkt.parse(res.geom); |
| | | var height = this.getHeight(wkt.coordinates[2]); |
| | | Viewer.camera.flyTo({ |
| | | destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), |
| | | }); |
| | | |
| | | } else if (res.url.indexOf('.png') != -1) { |
| | | } else if (type == 'DOM') { |
| | | var wkt = this.$wkt.parse(res.geom); |
| | | var height = this.getHeight(wkt.coordinates[2]) |
| | | window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( |
| | |
| | | Viewer.camera.flyTo({ |
| | | destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), |
| | | }); |
| | | } else if (type == '3dml' || type == 'fbx' || type == 'ifc' || type == 'rvt') { |
| | | } else if (type == '3dml' || type == 'fbx' || type == 'ifc' || type == 'rvt' || type == 'cpt') { |
| | | if (this.app.tileset) viewer.scene.primitives.remove(this.app.tileset); |
| | | |
| | | this.app.tileset = this.createTileset(res); |
| | | var that = this; |
| | | |
| | | Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) { |
| | | |
| | | that.setModleLocatin() |
| | | Viewer.flyTo(ts); |
| | | }); |
| | |
| | | if (window.pickedFeature && window.pickedFeature.getProperty) { |
| | | |
| | | this.setModeLayerID(pickedFeature); |
| | | } else { |
| | | this.modelForm.modelid = 'id3dml' |
| | | window.ModeKeyIdHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //移除事件 |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | this.$store.state.previewLayer.json = JSON.stringify(this.modelForm); |
| | | |
| | | if (this.$store.state.previewLayer.url) { |
| | | var url = this.$store.state.previewLayer.url; |
| | | this.$store.state.previewLayer.url = url.replace(iisHost, "{host}"); |
| | | } |
| | | const data = await publish_update(this.$store.state.previewLayer); |
| | | if (data.code != 200) { |
| | | this.$message.error('数据保存失败'); |
| | |
| | | }, |
| | | reload() { |
| | | var json = JSON.stringify(this.modelForm); |
| | | var url = this.$store.state.previewLayer.url; |
| | | var url = this.$store.state.previewLayer.url.replace("{host}", iisHost); |
| | | if (!url) return; |
| | | if (this.app.tileset) Viewer.scene.primitives.remove(this.app.tileset); |
| | | |
| | |
| | | var that = this; |
| | | Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) { |
| | | that.modelForm = JSON.parse(json); |
| | | |
| | | var pos = Cesium.Cartesian3.fromDegrees(parseFloat(that.modelForm.lon), parseFloat(that.modelForm.lat), parseFloat(that.modelForm.height)); |
| | | |
| | | |
| | |
| | | var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); |
| | | that.app.tileset._root.transform = matrix; |
| | | Viewer.flyTo(ts); |
| | | |
| | | that.app.isBusy = false; |
| | | }); |
| | | }, |
| | |
| | | update() { |
| | | if (!this.modelForm.lon || isNaN(this.modelForm.lon)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.lon = args.lon; |
| | | this.modelForm.lon = args.lon == null ? 0 : args.height; |
| | | return |
| | | } |
| | | if (!this.modelForm.lat || isNaN(this.modelForm.lat)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.lat = args.lat; |
| | | this.modelForm.lat = args.lat == null ? 0 : args.height; |
| | | return |
| | | } |
| | | if (!this.modelForm.height || isNaN(this.modelForm.height)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.height = args.height; |
| | | this.modelForm.height = args.height == null ? 0 : args.height; |
| | | return |
| | | } |
| | | if (!this.modelForm.yaw || isNaN(this.modelForm.yaw)) { |
| | |
| | | Viewer.flyTo(this.app.tileset); |
| | | }, |
| | | createTileset(res) { |
| | | res.url = res.url.replace('{host}', iisHost) |
| | | return new Cesium.Cesium3DTileset({ |
| | | url: res.url, |
| | | name: 'tsTest', |
| | |
| | | } else { |
| | | this.getTilesetArgs(); |
| | | } |
| | | |
| | | }, |
| | | setModleLocatin() { |
| | | var res = this.$store.state.previewLayer; |
| | | var type = res.type; |
| | | |
| | | if (this.modelType.indexOf(type) != -1) { |
| | | this.setEditModelLayer(res) |
| | | if (type != '3dml') { |
| | | this.setEditModelLayer(res) |
| | | } else { |
| | | this.editModelFlag = true; |
| | | } |
| | | |
| | | } |
| | | |
| | | }, |
| | |
| | | }, |
| | | getEditTilesetArgs() { |
| | | this.app.isBusy = true; |
| | | var std = { |
| | | lon: 0, |
| | | lat: 0, |
| | | height: 0, |
| | | } |
| | | |
| | | if (!this.app.tileset._root) return std; |
| | | var cm = this.app.tileset._root.transform; |
| | | var cartesian = new Cesium.Cartesian3(cm[12], cm[13], cm[14]); |
| | | var carto = Cesium.Cartographic.fromCartesian(cartesian); |
| | | var std = { |
| | | lon: null, |
| | | lat: null, |
| | | height: null, |
| | | } |
| | | |
| | | |
| | | if (carto) { |
| | | std.lon = Cesium.Math.toDegrees(carto.longitude).toFixed(7); |
| | |
| | | if (str.url != null && str.type == 2 && str.serveType == 'Tileset') { |
| | | val.push(str); |
| | | } |
| | | if (str.url != null && str.type == 2 && str.serveType == '3DML') { |
| | | val.push(str); |
| | | } |
| | | }); |
| | | |
| | | var res = this.setTreeData(val); |
| | |
| | | pickedFeature = sgworld.Viewer.scene.pick(event.position); |
| | | if (Cesium.defined(pickedFeature)) { |
| | | if (pickedFeature.primitive instanceof Cesium.Cesium3DTileset) { |
| | | if (pickedFeature && pickedFeature.getProperty) { |
| | | |
| | | if (pickedFeature) { |
| | | pickedColor = pickedFeature.color |
| | | pickedFeature.color = Cesium.Color.RED.withAlpha(0.3); |
| | | |
| | |
| | | |
| | | } |
| | | </script> |
| | | |
| | | |
| | | <style lang="less" scoped> |
| | | .previewBox { |
| | | width: 100%; |
| | |
| | | visibility: hidden; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |