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

embedded/2024/11/15 1:41:40/

要使用 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"><Markersmarkers={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 {@Autowiredprivate LocationMapper locationMapper;@GetMapping("/locations")public List<Location> getRecentLocations() {return locationMapper.getRecentLocations();}
    }
    

3. 模拟实时位置数据

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

  • 随机生成位置

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

    @Service
    public class LocationService {@Autowiredprivate 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 模拟并提供位置数据。


http://www.ppmy.cn/embedded/114480.html

相关文章

Go进阶概览 -【第6章 Go程序的性能优化与调优】

第6章 Go程序的性能优化与调优 在之前的学习中&#xff0c;其实我们已经基本将性能相关的内容讲的差不多了。所以在本章中&#xff0c;我们更多的是做一个总结&#xff0c;我们将探讨如何通过各种手段优化Go程序的性能。 我们将介绍性能分析工具&#xff0c;讨论内存管理与CP…

Vue自定义指令以及项目中封装过的自定义指令

自定义指令 Vue 自定义指令是 Vue.js 框架中一个非常强大的功能&#xff0c;它允许你注册一些全局或局部的自定义 DOM 操作指令&#xff0c;以便在模板中复用。自定义指令通过 Vue.directive() 方法进行全局注册&#xff0c;或者在组件的 directives 选项中局部注册。 自定义…

uniapp中使用echarts 完整步骤,包括报错以及解决方案

在我们日常可能会有小程序中要使用echarts&#xff0c;我今天总结了一下整个引入的步骤 首先echarts - DCloud 插件市场在插件市场里面导入进项目&#xff0c;我这边用的是vue3的以及主要开发小程序&#xff0c;就直接放我的案例了 按照上面的步骤&#xff0c;在样式部分这样…

炫酷HTML蜘蛛侠登录页面

全篇使用HTML、CSS、JavaScript&#xff0c;建议有过基础的进行阅读。 一、预览图 二、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

《粮油与饲料科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《粮油与饲料科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定 学术期刊。 问&#xff1a;《粮油与饲料科技》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;中文天地出版传媒集团股份有限公司…

高质量的翻译:应用程序可用性和成功的关键

在日益全球化的应用市场中&#xff0c;开发一款优秀的产品只是成功的一半。另一半&#xff1f;确保你的用户&#xff0c;无论他们在哪里或说什么语言&#xff0c;都能无缝理解和使用它。这就是高质量翻译的用武之地——不是事后的想法&#xff0c;而是应用程序可用性和最终成功…

【系统架构设计师-2012年真题】案例分析-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【材料1】【问题 1】(11 分)【问题 2】(8 分)【问题 3】(6 分)【材料2】【问题 1】(6 分)【问题 2】(9 分)【问题 3】(10 分)【材料3】【问题 1】(共 9 分)【问题 2】(共 16 分)【材料4】【问题 1】(共 10 分)【问题 …

Android Manifest权限清单

Android权限部分可分为安装权限、运行时权限、特殊权限。 其中安装权限分普通权限和签名权限&#xff1a;普通权限安装后就有&#xff0c;无需重新授权&#xff1b;签名权限则需要系统签名才有的权限&#xff1b; 特殊权限则需要打开指定的系统页面进行授权&#xff0c;当然使用…