| | |
| | | </div> |
| | | <div class="content"> |
| | | <div> |
| | | <div> |
| | | <el-input v-model="getToName" |
| | | <div id="ToNameContainer"> |
| | | <el-input v-model="toNameText" |
| | | @input="toNameChange" |
| | | placeholder="起点……"> |
| | | <template slot="prepend"><i class="el-icon-location" |
| | | style="color: green;"></i></template> |
| | | </el-input> |
| | | <div v-show="toNameShow" |
| | | class="toname-value-box"> |
| | | <ul> |
| | | <li v-for="(item, index) in toNameList" |
| | | :key="index" |
| | | @click="loadPopup(item)"> |
| | | {{item.name}} |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-input v-model="comeName" |
| | | <div id="ComeNameContainer"> |
| | | <el-input v-model="comeNameText" |
| | | @input="comeNameChange" |
| | | placeholder="终点……"> |
| | | <template slot="prepend"><i class="el-icon-location" |
| | | style="color: red;"></i></template> |
| | | </el-input> |
| | | <div v-show="comeNameShow" |
| | | class="comename-value-box"> |
| | | <ul> |
| | | <li v-for="(item, index) in comeNameList" |
| | | :key="index" |
| | | @click="loadPopup(item)"> |
| | | {{item.name}} |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | |
| | | |
| | | <script> |
| | | import { mapGetters } from 'vuex' |
| | | import { getSearchList } from '@/api/pc/public/search' |
| | | import axios from 'axios' |
| | | export default { |
| | | name: 'campusNav', |
| | |
| | | tabTwoFlag: false, |
| | | DC: null, |
| | | navigationWay: '步行', |
| | | routeLayer: null |
| | | routeLayer: null, |
| | | toNameText: '', |
| | | comeNameText: '', |
| | | toNameList: [], |
| | | comeNameList: [], |
| | | toNameShow: false, |
| | | comeNameShow: false |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters([ |
| | | 'viewer', |
| | | 'twoOrThree', |
| | | // 起点 |
| | | 'startingPoint', |
| | | // 终点 |
| | |
| | | // 到达名称 |
| | | 'comeName' |
| | | ]) |
| | | }, |
| | | watch: { |
| | | getToName: { |
| | | immediate: true, |
| | | handler (newCode, oldCode) { |
| | | this.toNameText = newCode |
| | | } |
| | | }, |
| | | comeName: { |
| | | immediate: true, |
| | | handler (newCode, oldCode) { |
| | | this.comeNameText = newCode |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.DC = global.DC |
| | |
| | | this.$router.push('/pcLayout/default') |
| | | } |
| | | |
| | | this.toNameText = '' |
| | | this.toNameList = [] |
| | | this.toNameShow = false |
| | | this.comeNameText = '' |
| | | this.comeNameList = [] |
| | | this.comeNameShow = false |
| | | if (this.routeLayer != null) { |
| | | this.routeLayer.clear() |
| | | } |
| | | this.$store.commit('SET_COMENAME', '') |
| | | this.$store.commit('SET_TERMINUS', null) |
| | | this.$store.commit('SET_GETTONAME', '') |
| | |
| | | |
| | | var routes = '' |
| | | |
| | | var startLog = Number(this.startingPoint[0]).toFixed(6) |
| | | var startLat = Number(this.startingPoint[1]).toFixed(6) |
| | | var endLog = Number(this.terminus[0]).toFixed(6) |
| | | var endLat = Number(this.terminus[1]).toFixed(6) |
| | | |
| | | var origin = this.DC.CoordTransform.WGS84ToGCJ02(startLog, startLat) |
| | | var destination = this.DC.CoordTransform.WGS84ToGCJ02(endLog, endLat) |
| | | |
| | | if (this.navigationWay == '步行') { |
| | | axios.get('https://restapi.amap.com/v3/direction/walking', { |
| | | params: { |
| | | origin: `${Number(this.startingPoint[0]).toFixed(6)},${Number(this.startingPoint[1]).toFixed(6)}`, |
| | | destination: `${Number(this.terminus[0]).toFixed(6)},${Number(this.terminus[1]).toFixed(6)}`, |
| | | origin: `${origin[0].toFixed(6) + ',' + origin[1].toFixed(6)}`, |
| | | destination: `${destination[0].toFixed(6) + ',' + destination[1].toFixed(6)}`, |
| | | key: '4b3e1db3211054ce5b466407cbb9d221', |
| | | output: 'json' |
| | | } |
| | | }).then(res => { |
| | | res.data.route.paths[0].steps.forEach(item => { |
| | | item.polyline += ';' |
| | | routes += item.polyline |
| | | item.polyline = item.polyline.split(';') |
| | | |
| | | var lineArr = [] |
| | | |
| | | item.polyline.forEach(it => { |
| | | it = it.split(',') |
| | | lineArr.push(this.DC.CoordTransform.GCJ02ToWGS84(it[0], it[1]).join(',')) |
| | | }) |
| | | |
| | | lineArr = lineArr.join(';') |
| | | |
| | | lineArr += ';' |
| | | |
| | | routes += lineArr |
| | | }) |
| | | |
| | | console.log(routes, 123) |
| | | |
| | | routes = routes.substr(0, routes.length - 1) |
| | | |
| | |
| | | clampToGround: true |
| | | }) |
| | | this.routeLayer.addOverlay(polyline) |
| | | this.viewer.flyTo(this.routeLayer) |
| | | if (this.twoOrThree == '3 维') { |
| | | this.viewer.flyTo(this.routeLayer) |
| | | } else { |
| | | var longitude = null |
| | | var latitude = null |
| | | startLog = Number(startLog) |
| | | endLog = Number(endLog) |
| | | if (startLog > endLog) { |
| | | longitude = (startLog - endLog) / 2 + endLog |
| | | } else { |
| | | longitude = (endLog - startLog) / 2 + startLog |
| | | } |
| | | startLat = Number(startLat) |
| | | endLat = Number(endLat) |
| | | if (startLat > endLat) { |
| | | latitude = (startLat - endLat) / 2 + endLat |
| | | } else { |
| | | latitude = (endLat - startLat) / 2 + startLat |
| | | } |
| | | |
| | | this.viewer.camera.setView({ |
| | | // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州 |
| | | // fromDegrees()方法,将经纬度和高程转换为世界坐标 |
| | | destination: this.DC.Namespace.Cesium.Cartesian3.fromDegrees(longitude, latitude, 300), |
| | | orientation: { |
| | | // 指向 |
| | | heading: this.DC.Namespace.Cesium.Math.toRadians(0, 0), |
| | | // 视角 |
| | | pitch: this.DC.Namespace.Cesium.Math.toRadians(-90), |
| | | roll: 0.0 |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } else { |
| | | axios.get('https://restapi.amap.com/v3/direction/driving', { |
| | | params: { |
| | | origin: `${Number(this.startingPoint[0]).toFixed(6)},${Number(this.startingPoint[1]).toFixed(6)}`, |
| | | destination: `${Number(this.terminus[0]).toFixed(6)},${Number(this.terminus[1]).toFixed(6)}`, |
| | | origin: `${startLog + ',' + startLat}`, |
| | | destination: `${endLog + ',' + endLat}`, |
| | | key: '4b3e1db3211054ce5b466407cbb9d221', |
| | | strategy: 2, |
| | | extensions: 'all', |
| | |
| | | clampToGround: true |
| | | }) |
| | | this.routeLayer.addOverlay(polyline) |
| | | this.viewer.flyTo(this.routeLayer) |
| | | |
| | | if (this.twoOrThree == '3 维') { |
| | | this.viewer.flyTo(this.routeLayer) |
| | | } else { |
| | | var longitude = null |
| | | var latitude = null |
| | | startLog = Number(startLog) |
| | | endLog = Number(endLog) |
| | | if (startLog > endLog) { |
| | | longitude = (startLog - endLog) / 2 + endLog |
| | | } else { |
| | | longitude = (endLog - startLog) / 2 + startLog |
| | | } |
| | | startLat = Number(startLat) |
| | | endLat = Number(endLat) |
| | | if (startLat > endLat) { |
| | | latitude = (startLat - endLat) / 2 + endLat |
| | | } else { |
| | | latitude = (endLat - startLat) / 2 + startLat |
| | | } |
| | | |
| | | this.viewer.camera.setView({ |
| | | // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州 |
| | | // fromDegrees()方法,将经纬度和高程转换为世界坐标 |
| | | destination: this.DC.Namespace.Cesium.Cartesian3.fromDegrees(longitude, latitude, 300), |
| | | orientation: { |
| | | // 指向 |
| | | heading: this.DC.Namespace.Cesium.Math.toRadians(0, 0), |
| | | // 视角 |
| | | pitch: this.DC.Namespace.Cesium.Math.toRadians(-90), |
| | | roll: 0.0 |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | |
| | | clearLayer () { |
| | | if (this.routeLayer != null) { |
| | | this.routeLayer.clear() |
| | | } |
| | | }, |
| | | |
| | | toNameChange () { |
| | | if (this.toNameText == '') { |
| | | this.toNameList = [] |
| | | this.toNameShow = false |
| | | return |
| | | } |
| | | getSearchList({ mechanismName: this.toNameText }).then(res => { |
| | | if (res.data.data.length > 0) { |
| | | this.toNameList = res.data.data |
| | | this.toNameShow = true |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | comeNameChange () { |
| | | if (this.comeNameText == '') { |
| | | this.comeNameList = [] |
| | | this.comeNameShow = false |
| | | return |
| | | } |
| | | getSearchList({ mechanismName: this.comeNameText }).then(res => { |
| | | if (res.data.data.length > 0) { |
| | | this.comeNameList = res.data.data |
| | | this.comeNameShow = true |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | shortcutShow (event) { |
| | | var toBox = document.getElementById('ToNameContainer') |
| | | |
| | | if (toBox) { |
| | | if (!toBox.contains(event.target)) { // 这句是说如果我们点击到了id为myPanel以外的区域 |
| | | this.toNameShow = false |
| | | } |
| | | } |
| | | |
| | | var comeBox = document.getElementById('ComeNameContainer') |
| | | |
| | | if (comeBox) { |
| | | if (!comeBox.contains(event.target)) { // 这句是说如果我们点击到了id为myPanel以外的区域 |
| | | this.comeNameShow = false |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | .content { |
| | | position: relative; |
| | | padding: 0 10px; |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | width: 100px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .toname-value-box, |
| | | .comename-value-box { |
| | | position: absolute; |
| | | top: 48px; |
| | | left: 65px; |
| | | width: auto; |
| | | min-width: 160px; |
| | | max-height: 520px; |
| | | color: #2c3e50; |
| | | background: #fff; |
| | | overflow-y: auto; |
| | | box-shadow: 0 0 14px 2px rgb(221, 221, 221); |
| | | border-radius: 5px; |
| | | z-index: 11; |
| | | |
| | | ul { |
| | | li { |
| | | padding-left: 20px; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | li:hover { |
| | | background: #f5f5f5; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .comename-value-box { |
| | | top: 100px; |
| | | } |
| | | } |
| | | } |
| | | } |