使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息
要使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息,你可以按以下步骤来实现:
目录
2. 后端 (Spring Boot + MyBatis + MySQL)
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)!