123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- <template>
- <div id="cesiumContainer2" class="ViewerSplitScreen" style="display: none; border-right: 5rem solid #fff"></div>
- <div id="cesiumContainer" class="jt-map" ref="cesiumContainer"></div>
- </template>
- <script>
- import {
- Store
- } from '@/store/index'
- let store = Store();
- import map_xzqh_zj from '@/assets/dataFile/map_xzqh_zj.json';
- let jt3d = undefined;
- export default {
- /* 数据 */
- data() {
- return {
- LocateId: 'locate_ID_remove', //标记定位所用ID
- entity: ''
- }
- },
- /* 方法 */
- methods: {
- //定位方法
- startLocation() {
- let that = this
- plusGPSListenerOn(function(lat, lon) {
- console.log('位置坐标', lat, lon)
- let terrainProvider = jt3d._viewer.terrainProvider;
- //异步函数
- return new Promise((resolve, reject) => {
- lon = Number(lon)
- lat = Number(lat)
- let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, [Cesium
- .Cartographic.fromDegrees(lon, lat)
- ]);
- promise.then(function(updatedPositions) {
- if (that.entity) {
- jt3d._viewer.entities.remove(that.entity)
- }
- // if that.entity && jt3d._viewer.entities.remove(that.entity)
- console.log('高度', updatedPositions[0].height)
- let height = updatedPositions[0].height
- that.entity = new Cesium.Entity({
- name: "add billboard",
- //位置
- position: Cesium.Cartesian3.fromDegrees(lon, lat, height),
- //图片标签
- billboard: {
- image: 'jt3dSDK/imgs/point/point.png',
- horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平
- verticalOrigin: Cesium.VerticalOrigin.BOTTOM, //垂直位置
- // scale: billboard.scale, //尺寸
- // pixelOffset: new Cesium.Cartesian2(0, billboard.pixelOffset),
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- scale: 1,
- scaleByDistance: new Cesium.NearFarScalar(1.5e2, 1, 2400, 0) //按距离缩放,即距离大于180米时,图标不显示 Cesium.NearFarScalar(near, nearValue, far, farValue)相机范围的下界。相机范围下界的值。相机范围的上限。该值位于摄像机范围的上界。
- }
- });
- jt3d._viewer.entities.add(that.entity, {
- range: 1000
- });
- // let LocateNowTime = jt3d.PointObject.addBillboard([lon, lat,height], {
- // // id: that.LocateId
- // })
- // LocateNowTime.then(entity => {
- // that.entity = entity
- // })
- resolve(updatedPositions);
- });
- })
- // let getHeight = new that.jt3dSDK.common.getHeigthByPointsMostDetailed(jt3d._viewer,[[lon,lat]])
- // getHeight.then(height=>{
- // // if that.entity && jt3d._viewer.entities.remove(that.entity)
- // console.log('高度',height)
- // let LocateNowTime = jt3d.PointObject.addBillboard([lon,lat,height],{
- // id:that.LocateId
- // })
- // LocateNowTime.then(entity=>{
- // that.entity = entity
- // })
- // })
- });
- },
- /**
- * 初始化
- */
- init(el) {
- //初始化大球
- this.initMap3d(el);
- //设置默认视图
- this.setView(jt3d);
- // 初始化项目区域范围视角
- this.fullMap(jt3d);
- //加载天空盒子
- this.addSkybox(jt3d);
- //调用父组件的方法,onload是在父组件的的动态组件component上面的方法,并将jt3d传过去
- this.$emit("onload", jt3d);
- // console.log(this.$parent)
- this.$parent.jtMap3DOnload(jt3d);
- //单击事件
- this.clickEntity(jt3d);
- //添加镇街边界线——精灵线
- this.addBoundaryLine(jt3d);
- },
- /**
- * 添加镇街边界线——精灵线
- */
- addBoundaryLine(jt3d) {
- // jt3d.PolylineObject.drawPolylineByGeoJson(map_xzqh_zj, {
- // width: 5,
- // color: '#04FFFF',
- // isImageAlpha: true, //用图片自带颜色
- // duration: 3000,
- // imgUrl: "jt3dSDK/imgs/polylinematerial/spriteline1.png"
- // });
- },
- /**
- * 单击事件
- */
- clickEntity(jt3d) {
- let _self = this;
- if (jt3d.handlerLeftClick) {
- jt3d.handlerLeftClick.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //移除事件
- }
- jt3d.handlerLeftClick = new Cesium.ScreenSpaceEventHandler(
- jt3d._viewer.scene.canvas
- );
- //注册大球单机事件
- jt3d.handlerLeftClick.setInputAction(function(e) {
- var pick = jt3d._viewer.scene.pick(e.position); //拾取当前的entity对象
- var cartesian = jt3d._viewer.scene.pickPosition(e.position); //获取当前点坐标
- if (Cesium.defined(cartesian)) {
- //将笛卡尔坐标转换为地理坐标
- let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
- //将弧度转为度的十进制度表示
- let lng = Cesium.Math.toDegrees(cartographic.longitude);
- let lat = Cesium.Math.toDegrees(cartographic.latitude);
- let alt = cartographic.height; //高度
- _self.$parent.$refs._refQueryGraphics.initQuery({
- spatialType: '点',
- coordinate: lng + " " + lat,
- buffer: ''
- });
- }
- }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- },
- /**
- * 创建大球
- */
- initMap3d(el) {
- jt3d = new this.jt3dSDK.jtMap3d({
- container: el,
- });
- jt3d.statusBar.show = true;
- jt3d.layer = new this.jt3dSDK.layer(jt3d._viewer);
- jt3d.CommonTools = new this.jt3dSDK.CommonTools(jt3d._viewer, {
- isClear: false,
- isDrawPoint: true,
- isRetainDrawPoint: false,
- iconType: 'blue',
- });
- jt3d.SketchViewModel = new this.jt3dSDK.SketchViewModel(jt3d._viewer, {
- isClear: true,
- isDrawPoint: false,
- isRetainDrawPoint: false,
- iconType: 'blue',
- });
- jt3d.DrawTools = new this.jt3dSDK.DrawTools(jt3d._viewer, {
- isDrawPoint: true, //是否标记参考点
- isRetainDrawPoint: false, //绘制完成是否保留绘制点
- iconType: 'blue',
- });
- jt3d.DrawToolsEdit = new this.jt3dSDK.DrawTools(jt3d._viewer, {
- isDrawPoint: true, //是否标记参考点
- isRetainDrawPoint: true, //绘制完成是否保留绘制点
- iconType: 'blue',
- });
- jt3d.DrawMilitaryPlot = new this.jt3dSDK.DrawMilitaryPlot(jt3d._viewer);
- jt3d.LocateUtil = new this.jt3dSDK.LocateUtil(jt3d._viewer);
- // jt3d.getHeigthByLngLat = new this.jt3dSDK.getHeigthByLngLat(jt3d._viewer) //获取高度
- jt3d.SpatialAnalysis = {};
- jt3d.SpatialAnalysis.SightLine = new this.jt3dSDK.SpatialAnalysis.SightLine(jt3d._viewer);
- jt3d.SpatialAnalysis.ViewShed = new this.jt3dSDK.SpatialAnalysis.ViewShed(jt3d._viewer);
- jt3d.SpatialAnalysis.SunshineShadow = new this.jt3dSDK.SpatialAnalysis.SunshineShadow(jt3d._viewer);
- jt3d.SpatialAnalysis.Profile = new this.jt3dSDK.SpatialAnalysis.Profile(jt3d._viewer);
- jt3d.SpatialAnalysis.CutFill = new this.jt3dSDK.SpatialAnalysis.CutFill(jt3d._viewer);
- jt3d.SpatialAnalysis.HeightLimit = new this.jt3dSDK.SpatialAnalysis.HeightLimit(jt3d._viewer);
- jt3d.SpatialAnalysis.Cutting = new this.jt3dSDK.SpatialAnalysis.Cutting(jt3d._viewer);
- jt3d.SpatialAnalysis.GeologyClipPlan = new this.jt3dSDK.SpatialAnalysis.GeologyClipPlan(jt3d._viewer);
- jt3d.TerrainAnalysis = {};
- jt3d.TerrainAnalysis.TerrainExcavation = new this.jt3dSDK.TerrainAnalysis.TerrainExcavation(jt3d._viewer);
- jt3d.TerrainAnalysis.SlopeAspect = new this.jt3dSDK.TerrainAnalysis.SlopeAspect(jt3d._viewer);
- jt3d.SceneEffects = {};
- jt3d.SceneEffects.Weather = new this.jt3dSDK.SceneEffects.Weather(jt3d._viewer);
- jt3d.SceneEffects.SkyBox = new this.jt3dSDK.SceneEffects.SkyBox(jt3d._viewer);
- jt3d.SceneEffects.ParticleSystem = new this.jt3dSDK.SceneEffects.ParticleSystem(jt3d._viewer);
- jt3d.TrackRoam = new this.jt3dSDK.TrackRoam(jt3d._viewer);
- jt3d.PolylineObject = new this.jt3dSDK.PolylineObject(jt3d._viewer);
- jt3d.PointObject = new this.jt3dSDK.PointObject(jt3d._viewer);
- jt3d.PolygonObject = new this.jt3dSDK.PolygonObject(jt3d._viewer);
- window["viewer"] = jt3d._viewer;
- window["viewer"].scene.terrainExaggeration = 100;
- //显示帧率
- window["viewer"].scene.debugShowFramesPerSecond = true;
- },
- /**
- * 设置默认视图-初始化中国区域范围视角
- */
- setView(jt3d) {
- // jt3d.flytoChina();
- //初始化中国区域范围视角
- jt3d.setViewChina();
- // jt3d.setView({
- // longitude: 103.84, //经度
- // latitude: 31.15, // 维度
- // height: 24000000, // 高度
- // heading: 0, // 偏航
- // pitch: -90, // 俯仰,人如果在赤道上空,俯仰角为0可见地球。如果在北纬,俯仰角为负才能见地球
- // roll: 0.0 // 翻滚
- // });
- },
- /**
- * 全图-飞行到项目区域范围视角
- */
- fullMap(jt3d) {
- // 初始化项目区域范围视角
- let optionsS = {
- west: 121.563298,
- south: 37.284514,
- east: 121.565298,
- north: 37.286514,
- isRemove: false, //定位完成后是否删除
- duration: 3, //飞行时间
- heading: 0,
- pitch: -90,
- range: 115000
- };
-
- let optionsE = {
- west: 121.563298,
- south: 37.284514,
- east: 121.565298,
- north: 37.286514,
- isRemove: true, //定位完成后是否删除
- duration: 3, //飞行时间
- heading: 0,
- pitch: -60,
- range: 115000
- };
- var fullMapPromise = jt3d.fullMap(optionsS);
- fullMapPromise.then(function(flyPromise) {
- jt3d.fullMap(optionsE);
- });
- },
- /**
- * 设置天空盒子
- */
- addSkybox(jt3d) {
- //设置天空盒子,默认蓝天
- jt3d.SceneEffects.SkyBox.setGroundSkyBox();
- },
- },
- mounted() {
- this.init("cesiumContainer");
- // if (store.userport == 'APP') {
- // setTimeout(res => {
- // this.startLocation()
- // }, 100)
- // setTimeout(res => {
- // jt3d.LocateUtil.flyToEntity(this.entity)
- // }, 10000)
- // }
- }
- };
- </script>
- <style lang="scss" scoped>
- .lk-status-bar {
- font-size: 16rem !important;
- }
- .jt-map {
- // width: calc(100% - 0rem);
- // height: calc(100vh - 70rem);
- height: 100vh;
- margin: 0;
- padding: 0;
- overflow: hidden;
- background-color: blue;
- border: 0rem solid red;
- }
- //分屏样式
- .ViewerSplitScreen {
- float: left;
- width: calc(50% - 2.5rem);
- // height: calc(100vh - 70rem);
- height: 100vh;
- margin: 0;
- .lk-status-bar {
- width: calc(50% - 0rem) !important;
- }
- }
- </style>
|