checkGPS.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. <template>
  2. <div class="container">
  3. <div id="amap-container"></div>
  4. <div class="controller">
  5. <div class="in_transit_information">
  6. <span class="item_details">车牌号:</span> <el-input style="width: 100px;" class="inputStyle" v-model="carNumber"> </el-input>
  7. </div>
  8. <div class="in_transit_information2">
  9. <span class="item_details">时间段:</span>
  10. <el-date-picker
  11. class="date_picker_style"
  12. v-model="time"
  13. @change="changeTime"
  14. type="datetimerange"
  15. format="yyyy-MM-dd HH:mm:ss"
  16. range-separator="至"
  17. start-placeholder="开始日期"
  18. end-placeholder="结束日期">
  19. </el-date-picker>
  20. <el-button type="primary" class="searchstyle" @click="initData">查询</el-button>
  21. </div>
  22. <div class="driving_information">
  23. <span class="item_details2">时间:{{runRoute.gtm}}</span>
  24. <br/>
  25. <span class="item_details2" >车速:{{runRoute.spd}}千米/小时</span>
  26. <br/>
  27. </div>
  28. <div class="map-control">
  29. <!--播放暂停按钮-->
  30. 进度:
  31. <Icon v-if="!isPlay" class="play-icon play" type="ios-play" @click="isPlay=true;play();"/>
  32. <Icon v-else class="play-icon pause" type="ios-pause" @click="isPlay=false;stop();navgControl('pause')"/>
  33. <Icon class="play-icon quickly" type="ios-play" @click="addProgress()"/>
  34. <div class="mySlider"><Slider class="map-slider" v-model="sliderVal" :tip-format="hideFormat" :step="0.0001"></Slider></div>
  35. <!--速度-->
  36. <div class="mySlider2"><el-slider v-model="speedVal" show-input></el-slider></div>
  37. </div>
  38. <div class="in_transit_information3" v-if="listPath.length>0">
  39. <span class="item_details">停车时长:</span>
  40. <el-select style="width:100px" @change="changeParkingTime" v-model="parkingTime" placeholder="请选择">
  41. <el-option
  42. v-for="item in parkingOptions"
  43. :key="item.value"
  44. :label="item.label"
  45. :value="item.value">
  46. </el-option>
  47. </el-select>
  48. </div>
  49. <div class="in_transit_information3" v-if="listPath.length>0">
  50. <span class="item_details">离线时长:</span>
  51. <el-select style="width:100px" @change="changeLeaveTime" v-model="leaveTime" placeholder="请选择">
  52. <el-option
  53. v-for="item in parkingOptions"
  54. :key="item.value"
  55. :label="item.label"
  56. :value="item.value">
  57. </el-option>
  58. </el-select>
  59. </div>
  60. </div>
  61. </div>
  62. </template>
  63. <script>
  64. import { shallowRef } from '@vue/reactivity'
  65. import { lazyAMapApiLoaderInstance } from 'vue-amap';
  66. import { sjTime,stringToDate } from "@/utils/sharedJsFile";
  67. import Slider from './slider.vue'
  68. Vue.use(Slider)
  69. import Vue from 'vue';
  70. export default {
  71. name: "PathView",
  72. setup(){
  73. const map = shallowRef(null);
  74. return{
  75. map,
  76. }
  77. },
  78. watch:{
  79. speedVal:{
  80. deep: true,
  81. handler(val, oldVal) {
  82. let that=this;
  83. if(that.pathNavigator!=null){
  84. that.pathNavigator.setSpeed(100*val)
  85. }
  86. }
  87. }
  88. },
  89. data() {
  90. return {
  91. //一、 查询相关
  92. //选择时间区间
  93. time:[],
  94. //查询车牌号
  95. carNumber:"",
  96. //选择停车时长
  97. parkingTime:null,
  98. //停车时长选择区间
  99. parkingOptions: [{
  100. value: 600000,
  101. label: '10分钟'
  102. }, {
  103. value: 1200000,
  104. label: '20分钟'
  105. }, {
  106. value: 1800000,
  107. label: '30分钟'
  108. }, {
  109. value: 2400000,
  110. label: '40分钟'
  111. }, {
  112. value: 3000000,
  113. label: '50分钟'
  114. }
  115. , {
  116. value: 3600000,
  117. label: '60分钟'
  118. }
  119. ],
  120. //选择离线时长
  121. leaveTime:null,
  122. //离线时长选择区间
  123. leaveOptions: [{
  124. value: 600000,
  125. label: '10分钟'
  126. }, {
  127. value: 1200000,
  128. label: '20分钟'
  129. }, {
  130. value: 1800000,
  131. label: '30分钟'
  132. }, {
  133. value: 2400000,
  134. label: '40分钟'
  135. }, {
  136. value: 3000000,
  137. label: '50分钟'
  138. }
  139. , {
  140. value: 3600000,
  141. label: '60分钟'
  142. }
  143. ],
  144. //二、 展示相关
  145. //离线图标
  146. leaveMark:[],
  147. //停车图标
  148. parkMark:[],
  149. //开始地址
  150. startPointName:"",
  151. //结束地址
  152. endPointName:"",
  153. //小车行驶当前点所在的位置
  154. runRoute:
  155. {
  156. //正北方向夹角
  157. agl: "0",
  158. //当前的时间
  159. gtm: "0",
  160. //海拔
  161. hgt: "0",
  162. //进度
  163. lat: "0",
  164. //纬度
  165. lon: "0",
  166. //累计行驶距离(是车辆GPS安装开始到现在的距离,如果你想要查询范围内的行驶距离,用开始的累计距离和结束点累计距离相减)
  167. mil: "0",
  168. //这个时间的速度
  169. spd: "0"
  170. },
  171. //小车行驶当前点下标
  172. point:"",
  173. //三、 播放相关
  174. //是否暂停
  175. isPlay:true,
  176. //播放进度值
  177. sliderVal:0,
  178. //播放速度值
  179. speedVal:10,
  180. //四、组件相关
  181. //自定义窗体信息
  182. // ctmarkes:{
  183. // lat:"33.015888071433764",
  184. // lon : "115.96995235868168",
  185. // title:"豫SE8888",
  186. // details:"安徽省阜阳市颍东区阜阳舜岳水泥公司,西北方向,155.1米"
  187. // },
  188. //五、返回值相关
  189. //返回值集合
  190. listPath:[],
  191. //六、地图组件相关值
  192. //创建轨迹
  193. pathSimplifierIns:{},
  194. //巡回器
  195. pathNavigator:{},
  196. //初始化巡回器速度
  197. speed:1000,
  198. //地图解析
  199. geocoder:null,
  200. };
  201. },
  202. created(){
  203. },
  204. mounted() {
  205. },
  206. methods: {
  207. //停车时间改变
  208. changeParkingTime(){
  209. let that=this;
  210. //清除之前的停车点
  211. that.hideParkingMark();
  212. //计算时间的点
  213. let calculationPoint=null;
  214. that.listPath[0].runRoute.forEach(function(item,indexOf){
  215. if(indexOf+1<that.listPath[0].runRoute.length){
  216. //判断calculationPoint是否为空,如果是空的说明当前没有在计算停车时间
  217. if(calculationPoint==null&&item.spd=='0.0'){
  218. calculationPoint=item
  219. } else if(calculationPoint!=null&&item.spd!='0.0'){
  220. let beforeTime=that.stringToDate(calculationPoint.gtm)
  221. let item2=that.listPath[0].runRoute[indexOf];
  222. let afterTime=that.stringToDate(item2.gtm);
  223. let second=afterTime-beforeTime;
  224. if(second>that.parkingTime){
  225. let message='停车:'+second/60000;
  226. that.initParkingMarkes(20,35,require('@/assets/img/start.png'),calculationPoint.lon,calculationPoint.lat,message.split('.')[0]+"分钟");
  227. }
  228. calculationPoint=null;
  229. }
  230. }
  231. });
  232. },
  233. //停车所有离线图标
  234. hideParkingMark(){
  235. let that=this;
  236. that.parkMark.forEach(function(item,indexOf){
  237. item.hide();
  238. });
  239. },
  240. //离线时间改变时获得超过时间的点信息
  241. changeLeaveTime(){
  242. let that=this;
  243. //关闭所有图标
  244. that.hideLeaveMark();
  245. that.listPath[0].runRoute.forEach(function(item,indexOf){
  246. if(indexOf+1<that.listPath[0].runRoute.length){
  247. let beforeTime=that.stringToDate(item.gtm)
  248. let item2=that.listPath[0].runRoute[indexOf+1];
  249. let afterTime=that.stringToDate(item2.gtm);
  250. let second=afterTime-beforeTime;
  251. if(second>that.leaveTime){
  252. let message='离线:'+second/60000;
  253. that.initLeaveMarkes(20,35,require('@/assets/img/start.png'),item2.lon,item2.lat,message.split('.')[0]+"分钟");
  254. }
  255. }
  256. });
  257. },
  258. //关闭所有离线图标
  259. hideLeaveMark(){
  260. let that=this;
  261. that.leaveMark.forEach(function(item,indexOf){
  262. item.hide();
  263. });
  264. },
  265. //字符串转为Date
  266. stringToDate(dateString){
  267. let dateStr=dateString.replace('年','-').replace('月','-').replace('日','');
  268. return Date.parse(dateStr);
  269. },
  270. //校验查询时间
  271. changeTime(){
  272. let that=this;
  273. console.log((that.time[1]-that.time[0])-(86400000*3))
  274. if((that.time[1]-that.time[0])>86400000*3){
  275. this.$message.error('时间查询范围不能超过3天');
  276. that.time=[];
  277. }
  278. },
  279. //启动
  280. play(){
  281. let that =this;
  282. that.pathNavigator.resume();
  283. },
  284. //停止
  285. stop(){
  286. let that =this;
  287. that.pathNavigator.pause();
  288. },
  289. //添加进度
  290. addProgress(){
  291. let that =this;
  292. let increment=(that.listPath[0].runPath.length*0.1)
  293. that.pathNavigator.start(((that.point+increment)%that.listPath[0].runPath.length))
  294. },
  295. //进度监听
  296. hideFormat(value){
  297. let that=this;
  298. that.sliderVal=value;
  299. },
  300. //获得开始地址
  301. getStartPointName(lnglatXY){
  302. let that=this;
  303. console.log("start",that.geocoder)
  304. that.geocoder.getAddress(lnglatXY, function(status, result) {
  305. if (status === 'complete' && result.info === 'OK') {
  306. that.startPointName = result.regeocode.formattedAddress;
  307. }
  308. });
  309. },
  310. //获得结束地址
  311. getEndPointName(lnglatXY){
  312. let that=this;
  313. that.geocoder.getAddress(lnglatXY, function(status, result) {
  314. if (status === 'complete' && result.info === 'OK') {
  315. that.endPointName = result.regeocode.formattedAddress;
  316. that.initCustomMarkes(that.carNumber+"("+that.listPath[0].miled+")","起点:"+that.startPointName+"<br/>"+"终点:"+that.endPointName,lnglatXY[0],lnglatXY[1])
  317. }
  318. });
  319. },
  320. //初始化数据
  321. initData(){
  322. let that=this;
  323. that.listPath=[];
  324. if(that.carNumber==""){
  325. this.$message.error('车牌号不能为空!');
  326. return;
  327. }
  328. if(that.time==[]){
  329. this.$message.error('请选择时间');
  330. }
  331. that.axios.post("/api/v1/otms/fullPathVisualizationByCarNumber",{
  332. "capacityNumber":that.carNumber,
  333. "startTime":that.formatDate(that.time[0],"yyyy-MM-dd hh:mm:ss"),
  334. "endTime":that.formatDate(that.time[1],"yyyy-MM-dd hh:mm:ss"),
  335. }).then((res) => {
  336. if(res.data.startAndEndRoutes!=''){
  337. that.listPath=res.data.startAndEndRoutes;
  338. that.initMap();
  339. }else{
  340. this.$message.error('车辆没有开启GPS');
  341. }
  342. });
  343. },
  344. //初始化地图
  345. initMap(){
  346. lazyAMapApiLoaderInstance.load().then(() => {
  347. let that=this;
  348. that.map = new AMap.Map("amap-container",{ //设置地图容器id
  349. viewMode:"2D", //是否为2D地图模式
  350. zoom:10, //初始化地图级别
  351. center:[105.602725,37.076636], //初始化地图中心点位置
  352. });
  353. //初始化
  354. that.initGeocoder();
  355. //初始化巡航轨迹和巡航器
  356. that.initPathSimplifier();
  357. //初始化起点、当前点、当前点
  358. that.initThreeMarker();
  359. //初始化当前点标记
  360. //that.initCustomMarkes(that.carNumber+"("+that.listPath[0].miled+")",that.listPath[0].currentPointName,that.listPath[0].currentPoint.lon,that.listPath[0].currentPoint.lat)
  361. //that.initEndline();
  362. });
  363. },
  364. //结束点
  365. initEndline(){
  366. let that=this;
  367. that.initPolyline(that.listPath[0].estimatePath,"#FF0000");
  368. },
  369. //创建起点终点当前点
  370. initThreeMarker(){
  371. let that=this;
  372. that.listPath.forEach((element,index) => {
  373. //起点名称
  374. that.getStartPointName([element.startPoint.lon,element.startPoint.lat])
  375. //开始标记点
  376. if(element.startPoint.lon!=''&&element.startPoint.lat!=''){
  377. that.initMarkes(20,35,require('@/assets/img/start.png'),element.startPoint.lon,element.startPoint.lat,'起点');
  378. }
  379. //结束标记点
  380. if(element.endPoint!={}&&element.endPoint!=''&&element.endPoint!=null){
  381. // that.initMarkes(20,35,require('@/assets/img/end.png'),element.endPoint.lon,element.endPoint.lat,'终点');
  382. //终点名称
  383. that.getEndPointName([element.endPoint.lon,element.endPoint.lat]);
  384. }else{
  385. // that.initMarkes(20,35,require('@/assets/img/end.png'),element.runRoute[element.runRoute.length-1].lon,element.runRoute[element.runRoute.length-1].lat,'终点');
  386. //终点名称
  387. that.getEndPointName([element.runRoute[element.runRoute.length-1].lon,element.runRoute[element.runRoute.length-1].lat])
  388. }
  389. });
  390. },
  391. //初始化窗体
  392. initCustomMarkes(title,details,lon,lat){
  393. let that=this;
  394. //自定义窗体内容
  395. var content = [
  396. "<div style='top:1px;width: 180px; background-color: rgba(0, 0, 0, 1);' ><font color='white'>"+title+"</font>",
  397. "<div style='background-color:rgba(255, 255, 255, 0.5);'><font color='white'>"+details+"</font></div></div>",
  398. ];
  399. // 创建 infoWindow 实例
  400. var infoWindow = new AMap.InfoWindow({
  401. content: content.join("<br>") //传入 dom 对象,或者 html 字符串
  402. });
  403. // 打开信息窗体
  404. infoWindow.open(that.map,[lon,lat]);
  405. },
  406. //初始化预计轨迹
  407. initPolyline(path,color){
  408. let that=this;
  409. //预计轨迹
  410. var endLine = new AMap.Polyline({
  411. map:that.map,//地图组件
  412. path: path,//预计轨迹
  413. isOutline: true,
  414. outlineColor: color,//轨迹颜色
  415. borderWeight: 0,
  416. strokeColor: "#FF0000",
  417. strokeOpacity: 1,
  418. strokeWeight: 5,
  419. // 折线样式还支持 'dashed'
  420. strokeStyle: "solid",
  421. // strokeStyle是dashed时有效
  422. strokeDasharray: [10, 5],
  423. lineJoin: 'round',
  424. lineCap: 'round',
  425. zIndex: 50,
  426. })
  427. that.map.setFitView([[ endLine ]])
  428. },
  429. initParkingMarkes(weight,height,image,lon,lat,title){
  430. let that=this;
  431. //图标标记点
  432. let pointicon = new AMap.Icon({
  433. size: new AMap.Size(weight, height), // 图标尺寸
  434. image: image, // Icon的图像
  435. imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
  436. imageSize: new AMap.Size(weight, height) // 根据所设置的大小拉伸或压缩图片
  437. });
  438. // 创建一个 Marker 实例:
  439. var pointmarker = new AMap.Marker({
  440. position: new AMap.LngLat(lon, lat), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
  441. icon: pointicon,
  442. title: title
  443. });
  444. that.parkMark.push(pointmarker)
  445. // 将创建的点标记添加到已有的地图实例:
  446. that.map.add(pointmarker);
  447. },
  448. //创建离线和停车的标记
  449. initLeaveMarkes(weight,height,image,lon,lat,title){
  450. let that=this;
  451. //图标标记点
  452. let pointicon = new AMap.Icon({
  453. size: new AMap.Size(weight, height), // 图标尺寸
  454. image: image, // Icon的图像
  455. imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
  456. imageSize: new AMap.Size(weight, height) // 根据所设置的大小拉伸或压缩图片
  457. });
  458. // 创建一个 Marker 实例:
  459. var pointmarker = new AMap.Marker({
  460. position: new AMap.LngLat(lon, lat), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
  461. icon: pointicon,
  462. title: title
  463. });
  464. that.leaveMark.push(pointmarker)
  465. // 将创建的点标记添加到已有的地图实例:
  466. that.map.add(pointmarker);
  467. },
  468. //创建简单的标记
  469. initMarkes(weight,height,image,lon,lat,title){
  470. let that=this;
  471. //图标标记点
  472. let pointicon = new AMap.Icon({
  473. size: new AMap.Size(weight, height), // 图标尺寸
  474. image: image, // Icon的图像
  475. imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
  476. imageSize: new AMap.Size(weight, height) // 根据所设置的大小拉伸或压缩图片
  477. });
  478. // 创建一个 Marker 实例:
  479. var pointmarker = new AMap.Marker({
  480. position: new AMap.LngLat(lon, lat), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
  481. icon: pointicon,
  482. title: title
  483. });
  484. // 将创建的点标记添加到已有的地图实例:
  485. that.map.add(pointmarker);
  486. },
  487. //创建轨迹和巡航器
  488. initPathSimplifier() {
  489. let that=this;
  490. // ...你的操作
  491. new AMapUI.load(['ui/misc/PathSimplifier'], (PathSimplifier) => {
  492. if (!PathSimplifier.supportCanvas) {
  493. alert('当前环境不支持 Canvas!')
  494. return
  495. }
  496. //创建轨迹和巡航器
  497. // 创建组件实例
  498. that.pathSimplifierIns = new PathSimplifier({
  499. map: that.map,
  500. zIndex: 100, // 图层叠加顺序
  501. data: that.listPath, // 巡航路径
  502. // 获取巡航路径中的路径坐标数组
  503. getPath: (pathData, pathIndex) => {
  504. return pathData.runPath;
  505. },
  506. //鼠标悬浮停时显示消息
  507. getHoverTitle: function(pathData, pathIndex, pointIndex) {
  508. //返回鼠标悬停时显示的信息
  509. if (pointIndex >= 0) {
  510. if(pathData.runRoute[pointIndex].gtm!=='undefined'){
  511. //鼠标悬停在某个轨迹节点上
  512. return pathData.runRoute[pointIndex].gtm + ',速度'+ pathData.runRoute[pointIndex].spd+'千米/小时';
  513. }
  514. }
  515. },
  516. //设置轨迹样式
  517. renderOptions: {
  518. //轨迹线的样式
  519. pathLineStyle: {
  520. strokeStyle: 'black',//路径颜色
  521. lineWidth: 6,
  522. dirArrowStyle: true
  523. }
  524. }
  525. })
  526. // 创建巡航器
  527. that.pathNavigator = that.pathSimplifierIns.createPathNavigator(0, {
  528. loop: true, // 是否循环
  529. speed: that.speed ,// 速度(km/h)
  530. pathNavigatorStyle: {
  531. width: 20,//车辆图片宽度
  532. height: 40,//车辆图片高度
  533. content:PathSimplifier.Render.Canvas.getImageContent( require('@/assets/img/smallcar.png'), onload, onerror),//车辆图片
  534. strokeStyle: null,
  535. fillStyle: null
  536. }
  537. })
  538. //开启巡航
  539. that.pathNavigator.start()
  540. //开始事件监听
  541. that.pathNavigator.on("start resume", function() {
  542. });
  543. //暂停事件监听
  544. that.pathNavigator.on("stop pause", function() {
  545. });
  546. //移动事件监听
  547. that.pathNavigator.on('move', function (data,value) {
  548. that.updateLable(value)
  549. });
  550. })
  551. },
  552. //实时展示
  553. updateLable(value){
  554. let that=this;
  555. that.point=value.dataItem.pointIndex;
  556. that.runRoute=value.dataItem.pathData.runRoute[that.point];
  557. that.sliderVal=(value.dataItem.pointIndex/value.dataItem.pathData.runRoute.length)*100;
  558. },
  559. //逆解码函数
  560. initGeocoder(){
  561. let that=this;
  562. console.log("initGeocoder") ;
  563. AMap.plugin('AMap.Geocoder',function(){
  564. that.geocoder = new AMap.Geocoder({
  565. radius: 1000,
  566. extensions: "all"
  567. });
  568. console.log(that.geocoder)
  569. })
  570. },
  571. //时间格式转换
  572. formatDate (date, fmt) {
  573. if (/(y+)/.test(fmt)) {
  574. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  575. }
  576. let o = {
  577. 'M+': date.getMonth() + 1,
  578. 'd+': date.getDate(),
  579. "h+": date.getHours(),
  580. "m+": date.getMinutes(),
  581. "s+": date.getSeconds(),
  582. }
  583. for (let k in o) {
  584. if (new RegExp(`(${k})`).test(fmt)) {
  585. let str = o[k] + ''
  586. fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length))
  587. }
  588. }
  589. return fmt
  590. },
  591. }
  592. };
  593. </script>
  594. <style>
  595. .inputStyle{
  596. position: absolute;
  597. width: 200px;
  598. left: 50px;
  599. }
  600. .controller{
  601. width: 100%; height: 50px;
  602. background: white;
  603. position: absolute;z-index:99;top:0;left:0;
  604. }
  605. .in_transit_information{
  606. width: 200px;
  607. float: left;
  608. height: 40px;
  609. }
  610. .in_transit_information3{
  611. float: right;
  612. height: 40px;
  613. width: 180px;
  614. }
  615. .in_transit_information2 {
  616. height: 40px;
  617. float: left;
  618. width: 580px;
  619. }
  620. .container{
  621. width: 100%;
  622. height: 100%;
  623. }
  624. span.item_details2 {
  625. position: relative;
  626. top: 20px;
  627. }
  628. .date_picker_style{
  629. position: relative;
  630. left: 50px;
  631. }
  632. .item_details {
  633. position: relative;
  634. top: 5px;
  635. height: 0px;
  636. left: 0px;
  637. }
  638. #amap-container {
  639. position: relative;
  640. width: 100%;
  641. height: 100%;
  642. overflow: hidden;
  643. margin: 0;
  644. font-family: "微软雅黑";
  645. }
  646. /* 进度条 */
  647. .mySlider {
  648. width: 150px;
  649. height: 20px;
  650. display: inline-block;
  651. position: relative;
  652. left: 32px;
  653. }
  654. /* 进度条 */
  655. .mySlider2 {
  656. width: 400px;
  657. height: 20px;
  658. display: inline-block;
  659. position: relative;
  660. left: 32px;
  661. }
  662. .play {
  663. position: relative;
  664. left: 28px;
  665. }
  666. .quickly
  667. {
  668. float: right;
  669. position: relative;
  670. left: -20px;
  671. top: 10px;
  672. }
  673. .pause {
  674. position: relative;
  675. left: 28px;
  676. }
  677. .passed-time{
  678. position: relative;
  679. left: 5px;
  680. }
  681. .end-time{
  682. position: relative;
  683. left: 5px;
  684. }
  685. .map-times {
  686. position: relative;
  687. width: 40px;
  688. }
  689. .searchstyle{
  690. position: relative;
  691. left: 5px;
  692. }
  693. .map-control{
  694. float: left;
  695. width: 270px;
  696. }
  697. .driving_information {
  698. height: 40px;
  699. width: 240px;
  700. float: left;
  701. }
  702. </style>