自学内容网 自学内容网

使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息

要使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息,你可以按以下步骤来实现:

目录

1. 前端 (React + Material-UI)

2. 后端 (Spring Boot + MyBatis + MySQL)

3. 模拟实时位置数据

4. 前后端联调


1. 前端 (React + Material-UI)

前端将负责展示实时位置信息,并使用 Material-UI 提供 UI 组件。

  • 安装依赖: 使用以下命令安装 React 和 Material-UI 相关依赖:

    npx create-react-app location-tracker
    cd location-tracker
    npm install @mui/material @emotion/react @emotion/styled axios
    
  • 创建高德地图显示位置

    • 你可以使用 react-amap 来与高德地图 API 进行集成。

      npm install react-amap
    • App.js 中使用高德地图组件:

      import React, { useState, useEffect } from 'react';
      import { Map, Markers } from 'react-amap';
      import axios from 'axios';
      
      const App = () => {
        const [positions, setPositions] = useState([]);
      
        useEffect(() => {
          const interval = setInterval(() => {
            // 从后端获取实时位置数据
            axios.get('/api/locations')
              .then(response => {
                setPositions(response.data);
              })
              .catch(error => console.error('Error fetching locations:', error));
          }, 5000); // 每5秒获取一次
      
          return () => clearInterval(interval);
        }, []);
      
        return (
          <div style={{ width: '100%', height: '100vh' }}>
            <Map amapkey="YOUR_AMAP_KEY">
              <Markers
                markers={positions.map(pos => ({
                  position: { longitude: pos.lng, latitude: pos.lat }
                }))}
              />
            </Map>
          </div>
        );
      };
      
      export default App;
      

2. 后端 (Spring Boot + MyBatis + MySQL)

后端将负责生成和提供模拟的位置信息。

  • 创建 Spring Boot 项目: 创建一个 Spring Boot 项目,包含 MyBatis 和 MySQL 依赖。

    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
      </dependency>
    </dependencies>
    
  • 配置数据库 (application.properties):

    spring.datasource.url=jdbc:mysql://localhost:3306/location_db?useSSL=false&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=password
    mybatis.mapper-locations=classpath:mapper/*.xml
    
  • 创建数据库表

    创建一个 locations 表用于存储位置信息。

    CREATE TABLE locations (
      id BIGINT AUTO_INCREMENT PRIMARY KEY,
      lat DECIMAL(9,6) NOT NULL,
      lng DECIMAL(9,6) NOT NULL,
      timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
  • 创建 MyBatis Mapper: 定义 Mapper 接口和 XML 来从数据库查询位置信息。

    Mapper 接口 (LocationMapper.java):

    @Mapper
    public interface LocationMapper {
        @Select("SELECT * FROM locations ORDER BY timestamp DESC LIMIT 10")
        List<Location> getRecentLocations();
    }
    

    Mapper XML (LocationMapper.xml):

    <mapper namespace="com.example.mapper.LocationMapper">
      <select id="getRecentLocations" resultType="com.example.model.Location">
        SELECT * FROM locations ORDER BY timestamp DESC LIMIT 10
      </select>
    </mapper>
    
  • Location 实体类

    public class Location {
        private Long id;
        private BigDecimal lat;
        private BigDecimal lng;
        private Timestamp timestamp;
    
        // Getters and setters
    }
    
  • 编写控制器 (Controller): 创建一个 REST API 来提供实时位置信息。

    @RestController
    @RequestMapping("/api")
    public class LocationController {
        
        @Autowired
        private LocationMapper locationMapper;
    
        @GetMapping("/locations")
        public List<Location> getRecentLocations() {
            return locationMapper.getRecentLocations();
        }
    }
    

3. 模拟实时位置数据

在实际应用中,位置信息可能来自 GPS 或者设备。你可以使用定时任务生成和插入随机的位置信息到数据库。

  • 随机生成位置

    你可以使用高德 API 提供的周边搜索来随机生成一些位置信息,或者手动生成一些经纬度数据。

    @Service
    public class LocationService {
    
        @Autowired
        private LocationMapper locationMapper;
    
        private Random random = new Random();
    
        @Scheduled(fixedRate = 5000)
        public void generateRandomLocation() {
            BigDecimal lat = BigDecimal.valueOf(30 + random.nextDouble());
            BigDecimal lng = BigDecimal.valueOf(120 + random.nextDouble());
    
            locationMapper.insertLocation(new Location(lat, lng, new Timestamp(System.currentTimeMillis())));
        }
    }
    

    LocationMapper 中添加 insertLocation 方法:

    @Insert("INSERT INTO locations (lat, lng, timestamp) VALUES (#{lat}, #{lng}, #{timestamp})")
    void insertLocation(Location location);
    

4. 前后端联调

确保前端通过 Axios 向后端请求位置数据,并能够在高德地图上显示最新的位置。


通过这种方式,你可以使用 React 显示 Material-UI 风格的实时位置更新,并通过 Spring Boot、MyBatis 和高德 API 模拟并提供位置数据。


原文地址:https://blog.csdn.net/nndsb/article/details/142380013

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!