123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467 |
- <template>
- <el-dialog
- @closed="closedDialog"
- :visible.sync="dialog"
- append-to-body
- direction="rtl"
- :fullscreen=true
- >
- <baidu-map class="bm-view" :center="center" :zoom="zoom" @ready="init"
- v-loading="loading"
- element-loading-text="数据加载中"
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.8)"
- >
- <bm-map-type :map-types="['BMAP_NORMAL_MAP', 'BMAP_HYBRID_MAP']" anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-map-type>
- <bm-control :offset="searchControlOffset">
- <div id="searchbox">
- <div id="searchbox-container">
- <div id="sole-searchbox-content" class="searchbox-content">
- <el-date-picker
- v-model="timeRange"
- type="datetimerange"
- :picker-options="pickerOptions"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- align="right">
- </el-date-picker>
- </div>
- </div>
- <el-button type="info" id="search-button" @click="queryStudentRoute" >搜索</el-button>
- </div>
- </bm-control>
- <bm-control anchor="BMAP_ANCHOR_TOP_RIGHT" :offset="listControlOffset">
- <div id="route-container">
- <el-table
- class="ontop-route-table"
- ref="singleTable"
- :data="Routedata"
- height="480"
- highlight-current-row
- @row-click="clickStudentRow"
- @current-change="handleCurrentChange"
- style="width: 100%">
- <el-table-column
- type="index"
- width="40"
-
- align="center">
- </el-table-column>
- <el-table-column label="定位列表" >
- <template slot-scope="record">
- <div>
- {{record.row.PassTime}} <i v-if="record.row.WifiAddress" class="wifi_icon">W</i><i v-else class="gps_icon">G</i><br/>
- <div v-if="record.row.WifiAddress"> {{record.row.WifiAddress}}</div>
- <div v-else> {{record.row.Address}}</div>
- </div>
- </template>
- </el-table-column>
- </el-table>
-
- </div>
- </bm-control>
- </baidu-map>
- </el-dialog>
- </template>
- <script>
- export default {
- props: ["displayVisible","activeRfid"],
- data() {
- return {
- loading: false,
- dialog: false,
- title:'轨迹地图',
- Routedata:[
- {
- PassTime:'2022-05-25 15:11:11',
- Address:'浙江省杭州市滨江区华城和瑞科技广场',
- Latitude:30.192001,
- Longitude:120.20121,
- },
- {
- PassTime:'2022-05-25 15:11:11',
- Address:'浙江省杭州市滨江区滨安路跟江虹路交叉口',
- Latitude:30.192797,
- Longitude:120.207067,
- },
- {
- PassTime:'2022-05-24 15:11:11',
- Address:'浙江省杭州市滨江区江虹小区东门',
- Latitude:30.202219,
- Longitude:120.208827,
- },
-
- ],
- map: null,
- center: '杭州市滨江区',
- zoom: 19,
- searchControlOffset:{},
- listControlOffset:{},
- route_type:'All',
- filterTrack:false,
- markerIcons: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/smart_tool/beng.png',
- pickerOptions: {
- shortcuts: [
- {
- text: '3小时内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 3);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '6小时内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 6);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '12小时内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 12);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '24小时内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '2天内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 2);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '3天内',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
- picker.$emit('pick', [start, end]);
- }
- }]
- },
- timeRange: [new Date(new Date().toLocaleDateString()), new Date(new Date(new Date().toLocaleDateString()).getTime() + (24 * 60 * 60 * 1000)-1000)],
- trackMarkers:[],
- currentRow: null,
-
- };
- },
- mounted(){
- this.dialog = this.displayVisible;
-
- this.$nextTick(() => {
-
- // const query = { device_number: this.activeRfid}
- // this.$http.get('map/queryDeviceCurLocation',{ params: query }).then(res=>{
- // let pointInfo=res.data
- // var trackPoint = new BMap.Point(pointInfo.longitude, pointInfo.latitude);
- // let pointType = "terminus";
- // var pointIcon = new BMap.Icon(this.markerIcons[pointType], new BMap.Size(27, 32));
- // pointIcon.iconAnchor = new BMap.Point(5, 5);
- // pointIcon.shadow = "";
- // let trackMarker = new BMap.Marker(trackPoint, { icon: pointIcon });
- // this.map.addOverlay(trackMarker);
- // this.center=trackPoint
- // //this.map.centerAndZoom(trackPoint, 19);
- // this.queryStudentRoute();
- // }).catch(e => {
- // // this.loading = false;
- // });
- let topTables = document.getElementsByClassName('ontop-route-table');
- topTables.forEach(item => {
- item.onwheel = function(e) {
- e.stopPropagation();
- }
- })
- })
- },
- methods: {
- init({ BMap, map }) {
- this.map = map;
- // 初始化地图,设置中心点坐标
- // map.centerAndZoom("杭州市滨江区", 15);
- this.searchControlOffset=new BMap.Size(20, 20)
- this.listControlOffset=new BMap.Size(20, 40)
- // 添加鼠标滚动缩放
- map.enableScrollWheelZoom();
- //临时写的
- this.queryStudentRoute()
-
- },
- queryStudentRoute(){
- let that=this
- this.loading = true;
- setTimeout(function(){
- that.DrawMapLine(that.Routedata);
- that.loading = false;
- }, 2000);
-
- // const query = { active_rfid: this.activeRfid,time_range:this.timeRange,route_type:this.route_type,filter_track:this.filterTrack,}
- // this.$http.get('map/queryStudentRouteGps',{ params: query,timeout:60000}).then(res=>{
- // this.map.clearOverlays()
- // let data=[]
- // let trackLength=res.data.length
- // if(trackLength>0){
- // for (var i = 0; i < trackLength; i++){
- // let item=res.data[i]
- // // var myGeo = new BMap.Geocoder();
- // // // 根据坐标得到地址描述
- // // myGeo.getLocation(new BMap.Point(item.Longitude,item.Latitude), function(result){
- // // item['Address']=result.address
- // // });
- // // data.push(item)
- // item['index']=i
- // data[i]=item
- // }
- // this.DrawMapLine(data)
- // }
- // this.Routedata=data
-
- // this.loading = false;
-
- // })
- // .catch(e => {
- // this.loading = false;
- // });
- },
- DrawMapLine(data){
- var pointType = "node";//点类型
- var pointLogLat = new BMap.Point(data[0].Longitude, data[0].Latitude);//终点
- var trackCount=data.length
- // this.center=pointLogLat
- this.map.centerAndZoom(pointLogLat, 19);
- var onLineCoordinates = [];
- for (var i = trackCount-1; i >= 0; i--)
- {
- //线上的点
- pointLogLat = new BMap.Point(data[i].Longitude, data[i].Latitude);
- onLineCoordinates.push(pointLogLat);
- var pointMarker = this.CreatePointMarkers(data[i]);
- this.trackMarkers.push(pointMarker);
-
- }
- var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
- scale: 0.6,//图标缩放大小
- strokeColor:'#fff',//设置矢量图标的线填充颜色
- strokeWeight: '2',//设置线宽
- });
- var icons = new BMap.IconSequence(sy, '10', '30');
- //画线
- // var polyline = new BMap.Polyline(onLineCoordinates,{
- // enableEditing: false,//是否启用线编辑,默认为false
- // enableClicking: true,//是否响应点击事件,默认为true
- // icons:[icons],
- // strokeWeight:'4',//折线的宽度,以像素为单位
- // strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1
- // strokeColor:"blue" //折线颜色
- // });
- // this.map.addOverlay(polyline);
- //最佳视野
- this.map.setViewport(onLineCoordinates);
- },
- CreatePointMarkers(pointInfo)
- {
- // console.log(pType)
- var _this=this
- var trackMarker;
- var trackPoint = new BMap.Point(pointInfo.Longitude, pointInfo.Latitude);
- var pointIcon = new BMap.Icon(this.markerIcons, new BMap.Size(32, 32));
- pointIcon.setImageSize(new BMap.Size(32, 32));
- // var pointIcon = new BMap.Icon(this.markerIcons[pType], new BMap.Size(27, 32));
- //描点,创建标注
- pointIcon.iconAnchor = new BMap.Point(5, 5);
- pointIcon.shadow = "";
- trackMarker = new BMap.Marker(trackPoint, { icon: pointIcon });
-
- trackMarker.addEventListener("click", function ()
- {
- // if(pointInfo.SignalType=='WiFi'){
- var content ='<p>经过时间:' + pointInfo.PassTime + '</p><p>地址:' + pointInfo.WifiAddress + '</p>'
- var infoWindow = new BMap.InfoWindow(content); // 创建信息窗口对象
- _this.map.centerAndZoom(trackPoint, 19);
- _this.map.openInfoWindow(infoWindow,trackPoint);
- // }else{
- // var myGeo = new BMap.Geocoder();
- // // 根据坐标得到地址描述
- // myGeo.getLocation(new BMap.Point(pointInfo.Longitude,pointInfo.Latitude), function(result){
- // let index=pointInfo['index']
- // pointInfo['Address']=result.address
- // _this.Routedata[index]=pointInfo
- // var trackPoint = new BMap.Point(pointInfo.Longitude, pointInfo.Latitude);
- // var content ='<p>经过时间:' + pointInfo.PassTime + '</p><p>地址:' + pointInfo.Address + '</p>'
- // var infoWindow = new BMap.InfoWindow(content); // 创建信息窗口对象
- // _this.map.centerAndZoom(trackPoint, 19);
- // _this.map.openInfoWindow(infoWindow,trackPoint);
- // });
- // // var content ='<p>经过时间:' + pointInfo.PassTime + '</p><p>地址:' + pointInfo.Address + '</p><p>定位类型:' + pointInfo.SignalType + '</p>'
- // }
-
-
- });
- this.map.addOverlay(trackMarker);
- return trackMarker;
- },
- clickStudentRow(row, column, event){
- let that=this
- let index=row['index']
- let item=row
- // if(row['WifiAddress']){
- item['Address']=row['Address']
- that.Routedata[index]=item
- var trackPoint = new BMap.Point(row['Longitude'], row['Latitude']);
- var content ='<p>经过时间:' + item.PassTime + '</p><p>地址:' + item.Address + '</p>'
- var infoWindow = new BMap.InfoWindow(content); // 创建信息窗口对象
- that.map.centerAndZoom(trackPoint, 19);
- // that.map.panTo(trackPoint)
- that.map.openInfoWindow(infoWindow,trackPoint);
- // }else{
- // var myGeo = new BMap.Geocoder();
- // // 根据坐标得到地址描述
- // myGeo.getLocation(new BMap.Point(item.Longitude,item.Latitude), function(result){
- // item['Address']=result.address
- // that.Routedata[index]=item
- // var trackPoint = new BMap.Point(item.Longitude, item.Latitude);
- // var content ='<p>经过时间:' + item.PassTime + '</p><p>地址:' + item.Address + '</p>'
- // var infoWindow = new BMap.InfoWindow(content); // 创建信息窗口对象
- // that.map.centerAndZoom(trackPoint, 19);
- // // that.map.panTo(trackPoint)
- // that.map.openInfoWindow(infoWindow,trackPoint);
- // });
- // }
- },
- handleCurrentChange(val) {
- this.currentRow = val;
- },
- closedDialog() {
- // this.dialog = false;
- this.$emit("formCancel");
- }
- }
- };
- </script>
- <style>
- .el-select-dropdown{
- z-index:9999 !important;
- }
- </style>
- <style lang="scss" scoped>
- .el-drawer span:focus {
- outline: none;
- }
- .bm-view {
- width: 100%;
- height: calc(100vh - 40px);
- margin-top:10px;
- }
- #route-container{
- width:280px;
- height: 500px;
- background-color: #fafafa;
- }
- #searchbox {
- border-radius: 2px;
- width: 464px;
- position: relative;
- z-index: 5;
- display: flex;
- }
- #searchbox #searchbox-container {
- display: flex;
- position: relative;
- z-index: 2;
- pointer-events: auto;
- width: 400px;
- float: left;
-
- box-sizing: border-box;
-
- }
- #sole-searchbox-content {
- position: relative;
- }
- .searchbox-content {
- width: 400px;
- border-bottom:none !important;
- border-radius: 2px 0 0 2px;
- background: #fff;
- }
- #sole-searchbox-content #sole-input,
- #searchType {
- box-sizing: border-box;
- border: 0;
- padding: 9px 0;
- border-left: 10px solid transparent;
- border-right: 10px solid transparent;
- line-height: 20px;
- font-size: 14px;
- height: 38px;
- color: #333;
- position: relative;
- border-radius: 2px 0 0 2px;
- }
- #sole-input {
- width: 250px;
- }
- #sole-input:focus {
- outline: none;
- }
- #search-button{
- border-top-left-radius:0px !important;
- border-bottom-left-radius:0px !important;
- }
- .wifi_icon{
- display:inline-block;
- width:18px;
- height:18px;
- border-radius:9px;
- background:#1296db;
- color:#FFF;
- text-align:center;
- line-height:18px;
- }
- .gps_icon{
- display:inline-block;
- width:18px;
- height:18px;
- border-radius:9px;
- background:#1afa29;
- color:#FFF;
- text-align:center;
- line-height:18px;
- }
- </style>
|