vue3+element plus 实现百度地图显示路径

在这里插入图片描述

添加依赖

<!-- index.html -->
    <script type="text/javascript" src="//api.map.baidu.com/getscript?v=3.0&ak=yI6kBeC9G4LntEWXklE2iNHwRUrmFEQc"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/LuShu/1.2/src/LuShu_min.js"></script>

实现代码

注意:查询条件使用的自定义组件,不能直接复制使用。点聚合数量多时,页面会卡顿

// BaiduMap.vue
<template>
  <div class="content">
    <div id="mapContainer" class="map-container"></div>
    <div class="search-content">
      <div class="header-content" title="点我,点我,点我" @click="handleOpenDrawer">
        <div class="header-image"><Icon icon="ant-design:search-outlined" /></div>
        <!-- <el-image class="header-content-image" :src="openUrl" fit="fill"></el-image> -->
        <div class="header-control">检索</div>
      </div>
    </div>
    <!-- <div class="drawer-content">
        </div> -->
    <el-drawer v-model="drawer" title="详细信息" size="20%" @close="closeDrawer">
      <h-search-form
        :formModel="searchForm.searchModel"
        :formItems="searchForm.searchItems"
        @search="handleSearch"
      />
      <el-divider content-position="left"
        ><h3>{{ personName }}详细行程</h3></el-divider
      >

      <el-timeline>
        <template v-for="(item, index) in timelineData" :key="index">
          <el-timeline-item :timestamp="item.time" placement="top" :color="item.color">
            <el-card>
              <div v-html="item.content" @click="detailed(item.id)" class="point-list"></div>
            </el-card>
          </el-timeline-item>
        </template>
      </el-timeline>
    </el-drawer>
  </div>
</template>

<script setup>
import { onMounted } from 'vue'
import { reactive, toRefs, nextTick } from 'vue'
import request from '@/config/axios'
import { data } from '@/views/Test/map.json'
import hSearchForm from '@/h-components/Form/search-form.vue'
import { HSoft } from '@/utils/hsoft'
import { ElDrawer, ElDivider, ElTimeline, ElTimelineItem, ElCard } from 'element-plus'

const state = reactive({
  ak: 'xxxxxxxxxxxxxxxxxxxx',
  openUrl: new URL('@/assets/imgs/road.png', import.meta.url).href,
  drawer: false,
  searchForm: {
    searchModel: {},
    searchItems: [
      {
        type: 'h-person',
        // label:'人员',
        placeholder: '请输入姓名或工号',
        name: 'senderName',
        defaultValue: '',
        span: 3
      },
      {
        type: 'h-date',
        // label:'创建日期',
        //   placeholder:'请选择日期',
        name: 'createTime',
        valueType: 'daterange',
        defaultValue: '[new Date(2010, 9, 1), new Date(2010, 10, 1)]',
        clearable: true,
        disabled: false,
        startPlaceholder: '开始日期',
        endPlaceholder: '结束日期',
        style: { width: '20%' }
      }
    ]
  },
  map: null,
  timelineData: [],
  personName: '',
  lushu: null,
  polyline: null,
  path: [
    {
      lng: '113.408984',
      lat: '23.174023',
      html: '地点一',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.406639',
      lat: '23.174023',
      html: '地点二',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.403944',
      lat: '23.173566',
      html: '地点三',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.400827',
      lat: '23.17394',
      html: '地点四',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.397468',
      lat: '23.174496',
      html: '地点五',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.391494',
      lat: '23.174513',
      html: '地点六',
      pauseTime: 4,
      name: '叶晨晨'
    },
    {
      lng: '113.389032',
      lat: '23.174588',
      html: '地点七',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.388736',
      lat: '23.173217',
      html: '地点八',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388511',
      lat: '23.171888',
      html: '地点九',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388592',
      lat: '23.170501',
      html: '地点十',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.38861',
      lat: '23.170219',
      html: '地点十一',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.38861',
      lat: '23.168342',
      html: '地点十二',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388574',
      lat: '23.165218',
      html: '地点十三',
      pauseTime: 2,
      name: '叶晨晨'
    }
  ]
})

const { searchForm, openUrl, drawer, timelineData, personName } = toRefs(state)

function init() {
  state.map = new BMap.Map('mapContainer')
  const point = new BMap.Point(116.404, 39.915)
  state.map.centerAndZoom(point, 10) //初始化地图,设置中心点坐标和地图级别
  state.map.enableScrollWheelZoom(true) //开启鼠标滚轮缩放
  state.map.addControl(new BMap.NavigationControl())
  state.map.addControl(new BMap.ScaleControl())
  state.map.addControl(new BMap.OverviewMapControl())
  makePolyPoints(state.map, data)

  // request({
  //     url:'@/views/test/map.json',
  //     method:'get'
  // }).then(res =>{
  //     console.log(res);
  //     state.data = res;

  // })
}

function makePolyPoints(map, data) {
  const MAPMarkers = []
  map.clearOverlays()

  data.forEach((point) => {
    const markerPoint = new BMap.Point(point.lng, point.lat)
    const MAPMarker = new BMap.Marker(markerPoint)
    MAPMarker.setTitle(point.name)
    // if (point.type == 'ip') {
    //   // 指定Marker的icon属性为Symbol
    //   const markerIcon = new BMap.Symbol(BMap_Symbol_SHAPE_POINT, {
    //     scale: 1, //图标缩放大小
    //     fillColor: '#f97d1c', //填充颜色
    //     fillOpacity: 0.8 //填充透明度
    //   })
    //   MAPMarker.setIcon(markerIcon)
    // }
    if (point.type == 'ip') {
      // 指定Marker的icon属性为Symbol
      const markerIcon = new BMap.Icon(
      new URL('@/assets/imgs/desktop4.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 16), imageSize: new BMap.Size(32, 32) }
      )
      MAPMarker.setIcon(markerIcon)
    }else{
      const markerIcon = new BMap.Icon(
      new URL('@/assets/imgs/laptop2.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 16), imageSize: new BMap.Size(32, 32) }
      )
      MAPMarker.setIcon(markerIcon)
    }
    //设置marker图标为水滴{

    MAPMarkers.push(MAPMarker)
    // 可以在点对象上添加属性,点击的监听能获取该属性
    // MAPMarker.zbbm = 'xxxxx';
    //信息窗体
    const opts = {
      width: 200,
      height: 120,
      title: point.name + '的位置',
      enableMessage: true
    }
    const sContent =
      '<p>所在位置:' +
      point.lng +
      ', ' +
      point.lat +
      '</p><div class=item-btn οnclick="recentTrips(' +
      point.id +
      ')">最近行程</div>'
    const infoWindow = new BMap.InfoWindow(sContent, opts)
    MAPMarker.addEventListener('click', function (e) {
      map.openInfoWindow(infoWindow, markerPoint)
    })
  })
  if (map.markerClusterer) {
    map.markerClusterer.clearMarkers()
  }
  // 使用点聚合
  map.markerClusterer = new BMapLib.MarkerClusterer(map, {
    markers: MAPMarkers
  })
}

function handleSearch() {
  //  state.drawer = false;
  // var myP1 = new BMap.Point(113.54958146244581,23.131467363279828);    //起点
  // var myP2 = new BMap.Point(116.424374,39.914668);    //终点
  // var myIcon = new BMap.Icon("../assets/icons/car.png", new BMap.Size(32, 70), {    //小车图片
  // 	//offset: new BMap.Size(0, -5),    //相当于CSS精灵
  // 	imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。
  // });
  // var driving2 = new BMap.DrivingRoute(state.map, {renderOptions:{map: state.map, autoViewport: true}});    //驾车实例
  // driving2.search(myP1, myP2);    //显示一条公交线路

  state.timelineData = [
    {
      time: '2018/4/12',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/12 20:46</p>',
      color: '#0bbd87',
      id: 30
    },
    {
      time: '2018/4/3',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/3 20:46</p>',
      color: '#cf4813',
      id: 31
    },
    {
      time: '2018/4/2',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/2 20:46</p>',
      color: '#f0d695',
      id: 32
    }
  ]

  state.personName = '乔蓦然'

  // // 创建polyline对象
  makePolyPoints(state.map, state.path)
  const centerPoint = new BMap.Point(state.path[0].lng, state.path[0].lat)
  state.map.centerAndZoom(centerPoint, 17) //初始化地图,设置中心点坐标和地图级别
  makePolyline(state.path)
  makeLushu(HSoft.deepClone(state.path))
}

function makePolyline(path) {
  let point = []
  path.forEach((item) => {
    point.push(new BMap.Point(item.lng, item.lat))
  })
  //轨迹显示样式
  const sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
    scale: 0.6, //图标缩放大小
    strokeColor: '#fff', //设置矢量图标的线填充颜色
    strokeWeight: '2' //设置线宽
  })
  const icons = new BMap.IconSequence(sy, '10', '30')

  state.polyline = new BMap.Polyline(point, {
    enableEditing: false, //是否启用线编辑,默认为false
    enableClicking: true, //是否响应点击事件,默认为true
    strokeColor: '#18a45b', //折线颜色
    strokeWeight: 8, //折线的宽度,以像素为单位
    strokeOpacity: 0.5, //折线的透明度,取值范围0 - 1
    icons: [icons]
  }) //创建折线
  state.map.addOverlay(state.polyline) //增加折线
}

function makeLushu(path) {
  let point = []
  path.forEach((item) => {
    point.push(new BMap.Point(item.lng, item.lat))
  })
  state.lushu = new BMapLib.LuShu(state.map, point, {
    defaultContent: '坐车车', //默认显示
    autoView: true, //是否开启自动视野调整,如果开启那么路书在运动过程中会根据视野自动调整
    icon: new BMap.Icon(
      new URL('@/assets/imgs/map-user.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 32), imageSize: new BMap.Size(32, 32) }
    ),
    speed: 4500,
    enableRotation: false, //是否设置marker随着道路的走向进行旋转
    landmarkPois: path
  })

  state.lushu.start()
}

function handleOpenDrawer() {
  state.drawer = true
}

const recentTrips = (id) => {
  console.log('近期行程')
  handleOpenDrawer()
  state.map.closeInfoWindow()
  handleSearch()
}

function closeDrawer() {
  console.log('关闭')
  makePolyPoints(state.map, data)
  state.personName = ''
  state.timelineData = []
}

function detailed(point) {
  let points = []
  switch (point) {
    case 30:
      points.push({ lng: '113.388511', lat: '23.171888', id: 30, name: '叶晨晨' })
      break
    case 31:
      points.push({ lng: '113.38861', lat: '23.168342', id: 30, name: '叶晨晨' })
      break
    case 32:
      points.push({ lng: '113.400827', lat: '23.17394', id: 30, name: '叶晨晨' })
      break
  }
  makePolyPoints(state.map, points)
  const centerPoint = new BMap.Point(points[0].lng, points[0].lat)
  state.map.centerAndZoom(centerPoint, 17) //初始化地图,设置中心点坐标和地图级别
  makePolyline(state.path)
}

onMounted(() => {
  nextTick(() => {
    init()
  })
  window.recentTrips = recentTrips
})
</script>

<style lang="less" scoped>
.map-container {
  height: calc(100vh - 84px - 40px);
}

:deep(.el-overlay) {
  width: 20%;
  position: unset;
}
.search-content {
  position: absolute;
  top: 22px;
  right: 22px;

  .header-content {
    cursor: pointer;
    background: #fff;
    padding-right: 12px;
    padding-left: 12px;
    display: flex;
    align-items: center;
    .header-image {
      width: 25px;
    }

    .header-control {
      font-size: 12px;
      line-height: 34px;
    }
  }
}
:deep(img) {
  max-width: inherit;
}
:deep(.item-btn) {
  cursor: pointer;
  color: #409eff;
}
:deep(.el-timeline) {
  padding-left: 0px;
}

:deep(.BMap_bubble_content) {
  overflow: auto;
  height: 90px;
}

.point-list {
  cursor: pointer;
}
</style>

坐标数据

// map.json
{
    "data":[{
        "id":1,
        "lng":"116.404",
        "lat":"39.925",
        "type":"ip",
        "name":"乔乔"
    },{
        "id":2,
        "lng":"116.404",
        "lat":"39.915",
        "type":"ip",
        "name":"孙悟空"
    },{
        "id":3,
        "lng":"116.395",
        "lat":"39.935",
        "name":"唐僧"
    },{
        "id":4,
        "lng":"116.415",
        "lat":"39.931",
        "type":"ip",
        "name":"观音菩萨"
    },{
        "id":5,
        "lng":"111.404",
        "lat":"38.925",
        "name":"土地公公"
    },{
        "id":6,
        "lng":"110.404",
        "lat":"31.925",
        "type":"ip",
        "name":"白龙马"
    },{
        "id":7,
        "lng":"113.384",
        "lat":"24.925",
        "name":"猪八戒"
    },{
        "id":8,
        "lng":"113.404",
        "lat":"23.925",
        "name":"太白金星"
    },{
        "id":9,
        "lng":"112.434",
        "lat":"39.925",
        "name":"沙悟净"
    },{
        "id":10,
        "lng":"116.414",
        "lat":"38.915",
        "name":"哪吒"
    },{
        "id":11,
        "lng":"116.404",
        "lat":"37.925",
        "name":"金毛吼"
    },{
        "id":12,
        "lng":"117.404",
        "lat":"39.925",
        "name":"嫦娥"
    },{
        "id":13,
        "lng":"116.404",
        "lat":"38.925",
        "name":"太上老君"
    },{
        "id":14,
        "lng":"114.404",
        "lat":"38.925",
        "name":"铁扇公主"
    },{
        "id":15,
        "lng":"111.404",
        "lat":"30.925",
        "name":"牛魔王"
    },{
        "id":16,
        "lng":"115.404",
        "lat":"39.915",
        "name":"红孩儿"
    },{
        "id":17,
        "lng":"115.404",
        "lat":"30.925",
        "name":"清风"
    },{
        "id":18,
        "lng":"118.404",
        "lat":"31.925",
        "name":"明月"
    },{
        "id":19,
        "lng":"117.404",
        "lat":"32.925",
        "name":"女儿国王"
    },{
        "id":20,
        "lng":"116.304",
        "lat":"39.825",
        "name":"白骨精"
    },{
        "id":21,
        "lng":"116.404",
        "lat":"39.725",
        "name":"蜘蛛精"
    },{
        "id":22,
        "lng":"116.504",
        "lat":"39.925",
        "name":"孔雀公主"
    },{
        "id":23,
        "lng":"116.414",
        "lat":"39.914",
        "name":"大鹏鸟"
    },{
        "id":24,
        "lng":"116.400",
        "lat":"39.920",
        "name":"老龟"
    }]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/437933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python基础学习11课_异常机制】

一、异常 1、异常的定义 异常&#xff1a;程序无法继续执行异常会中断程序执行异常处理&#xff0c;是为了不中断程序执行。而不是避免错误。有些代码是报错就是要暴露出来有了异常机制&#xff0c;错误的代码报错后抛出异常&#xff0c;代码从上到下&#xff0c;报错代码后面…

【PCIe】初识PCIe

&#x1f525;博客主页&#xff1a;[PannLZ] &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 PCIe简介PCIe速度 PCIe简介 计算机内部有很多电子元器件&#xff0c;他们之间会有数据沟通和传输的需求。如果A元件想给B元件传输数据&am…

Axure RP 10:让原型设计更快、更直观、更智能 mac版

Axure RP 10是一款强大的原型设计工具&#xff0c;它能够帮助设计师快速创建高保真、交互式的原型&#xff0c;从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能&#xff0c;已经成为了许多设计师的首 选工具。 Axure RP 10 for Mac版软件获取 首先&a…

使用Matlab计算IGRAv2探空站的Tm和PWV

1. 探空站IGRAv2数据 探空站的Tm常作为真值&#xff0c;去检验Tm线性公式或者ERA5 Tm等的精度 。 探空站PWV常作为真值&#xff0c;去检验GNSS PWV等的精度 2. Tm 的计算方法 Tm 的计算方法有两种在前面的文章有讲&#xff0c;这里用 使用水汽压和温度计算Tm。 ei和 Ti 表示…

Day15:技术架构、Maven、Spring Initializer、Spring全家桶、Spring IoC

侧重于服务端&#xff08;后端&#xff09;&#xff0c;不在意前端&#xff0c;了解一些前端即可&#xff09; 技术架构 &#xff08;把Spring设计的更简单好用了就是Spring Boot&#xff09; 开发环境&#xff08;Maven&#xff09; Maven maven通过brew安装的目录为&#x…

学习网络安全越早知道越好的事

网络安全专业最应该知道的血泪建议&#xff0c;希望大一就有人告诉你。 如果你是网络安全行业&#xff0c;那么大学四年千万不能就在宿舍打游戏度过&#xff0c; 大一你应该学习掌握基础的编程语言&#xff0c;比如Python&#xff0c;PHP&#xff0c;web前端&#xff0c;知道…

基于深度学习的交通标志检测识别系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

[动态规划][蓝桥杯 2022 省 B] 李白打酒加强版 -- 代码注释含详解

P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷) 洛谷题目链接 李白打酒很快活&#xff0c;而我打了一晚上代码才把这题弄懂&#x1f972; P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示\***\*\*\*\*\***\*\*\**…

谷粒商城【成神路】-【9】——商城页面

目录 &#x1f9c8;1.项目服务部署架构 &#x1f95e;2.Thymealf &#x1f37f;3.请求接口 &#x1f32d;4.使用nginx转发 &#x1f956;5.nginx动静分离 &#x1fad3;6.优化 1.项目服务部署架构 使用nginx动静分离&#xff0c;使图片、js等静态资源和服务器请求分开…

基于51单片机的公交ic卡系统设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案选择 3 1.2 硬件选择 3 1.3 系统工作原理 4 1.4 总体方案确定 5 2 系统硬件电路设计 6 2.1 主控模块电路设计 6 2.2 电源电路设计 8 2.3 显示电路模块设计 8 2.4 报警模块电路设计 10 2.5 RC522刷卡模块 10 2.6 独…

[网络安全] PKI

一、PKI 概述 名称; 公钥基础设施 (Public Key Facility) 作用: 通过加密技术和数字签名保证信息安全 组成: 公钥机密技术、数字证书、CA、RA 二、信息安全三要素 机密性&#xff1a;确保仅信息发收双方 能看懂信息 完整性&#xff1a; 确保信息发收完整&#xff0c;不被破坏 …

MUMU模拟器12连logcat的方法

大家好&#xff0c;我是阿赵。   在开发手机游戏的时候&#xff0c;在真机上会出现各种问题&#xff0c;在查询问题的时候&#xff0c;安卓手机需要用adb连接来连接手机看logcat输出分析问题。但由于连接手机比较麻烦&#xff0c;所以我都习惯在电脑用安卓模拟器来测试。   …

Chrome安装Axure插件

打开原型目录/resources/chrome&#xff0c;重命名axure-chrome-extension.crx&#xff0c;修改后缀为rar&#xff0c;axure-chrome-extension.rar 解压到axure-chrome-extension目录打开Chrome&#xff0c;更多工具->扩展程序&#xff0c;打开开发者模式&#xff0c;选择加…

Java 8

欢迎阅读这篇Java 8 教程。本教程旨在深入探讨Java 8的新特性&#xff0c;包括Lambda表达式、流API、新的日期时间API和更多内容。通过具体的示例和详细的解释&#xff0c;你将能够理解这些特性的用法&#xff0c;并将其应用到你的日常编程中。让我们开始吧。 一、默认方法和静…

KOA优化最近邻分类预测(matlab代码)

KOA-最近邻分类预测matlab代码 开普勒优化算法&#xff08;Kepler Optimization Algorithm&#xff0c;KOA&#xff09;是一种元启发式算法&#xff0c;灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度&#xff0c;每个行星代表一个候选解&#xff0c;…

【Python】新手入门(9):数值和序列

&#x1f40d;【Python】新手入门&#xff08;9&#xff09;&#xff1a;数值和序列 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

今日份实验,剪了个头发,克隆了无数个自己,还是不断push

这个是今天用editor编辑器跑出来的数据&#xff0c;以下是用git跑出来的数据 下面是通过Xftp建立的会话。 用来跑一下以前的源代码 不过&#xff0c;noonxin.com, yuanjianchufang.com,网站好像不能访问&#xff0c;可能是域名出现问题&#xff0c;登录和注册也是存在问题的…

python爬虫(2)

继上节 查看数组维数 可以使用数组的ndim属性 代码示例如下&#xff1a; import numpy as np c np.random.randint(1,9,5) print(c.ndim) 结果如下&#xff1a; 当然这些也可以结合前面的各种用法来使用 1、选取数组元素 &#xff08;1&#xff09;一维数组的元素…

Ubuntu整系统迁移到另一个硬盘中

以ubuntu20.04为例&#xff0c;之前使用的是1T的移动硬盘&#xff0c;每次进入后性能不太稳定&#xff0c;所以最近买了块1T的固态硬盘给我的笔记本装上了&#xff0c;但是如果重新进行各种软件安装及环境配置就太麻烦了&#xff0c;所以采用了系统迁移 1.首先制作一个Ubuntu系…

基于springboot精品在线试题库系统论文

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的精品在线试题库系…