Spring Boot + Vue的项目中集成百度地图API,并实现前后端数据交互,是一个常见的需求。以下是实现这一功能的详细步骤,包括前端Vue的配置、百度地图API的使用,以及后端Spring Boot的准备工作。
百度地图API可以通过在页面中直接引入脚本的方式进行使用。
如果你的Vue项目尚未搭建,可以通过以下命令创建一个新的Vue项目:
vue create map-demo
cd map-demo
在项目中安装axios,用于前后端交互:
npm install axios
在public/index.html中添加百度地图的脚本引入:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>map-demo</title>
<!-- 引入百度地图API -->
<script src="https://api.map.baidu.com/api?v=3.0&ak=你的百度地图API密钥"></script>
</head>
<body>
<noscript>
<strong
>We're sorry but map-demo doesn't work properly without JavaScript
enabled. Please enable it to continue.</strong
>
</noscript>
<div id="app"></div>
</body>
</html>
在src目录下创建一个components/Map.vue组件:
<template>
<div id="mapContainer" style="width: 100%; height: 500px;"></div>
</template>
<script>
export default {
name: 'Map',
mounted() {
this.initMap();
},
methods: {
initMap() {
// 创建地图实例
const map = new BMap.Map('mapContainer');
const point = new BMap.Point(116.404, 39.915); // 设置初始点(北京天安门)
map.centerAndZoom(point, 12); // 初始化地图,设置中心点及缩放级别
map.addControl(new BMap.NavigationControl()); // 添加放大缩小控件
map.addControl(new BMap.MapTypeControl()); // 添加地图类型控件
map.enableScrollWheelZoom(true); // 启用滚轮放大缩小
// 添加标记
const marker = new BMap.Marker(point);
map.addOverlay(marker);
// 信息窗口
const infoWindow = new BMap.InfoWindow("<p>这是北京天安门</p>");
marker.addEventListener("click", function() {
map.openInfoWindow(infoWindow, point);
});
}
}
}
</script>
<style>
#mapContainer {
width: 100%;
height: 500px;
}
</style>
在src/App.vue中引入和使用Map.vue组件:
<template>
<div id="app">
<Map />
</div>
</template>
<script>
import Map from './components/Map.vue';
export default {
name: 'App',
components: {
Map
}
}
</script>
可以使用Spring Initializr(https://start.spring.io/)或者通过IDE创建一个Spring Boot项目,选择以下依赖项:
在src/main/resources/application.properties中添加数据库配置:
spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabase
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
创建一个实体类,例如Location:
package com.example.mapdemo.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double latitude;
private double longitude;
// getters and setters
}
创建一个仓库接口:
package com.example.mapdemo.repository;
import com.example.mapdemo.entity.Location;
import org.springframework.data.jpa.repository.JpaRepository;
public interface LocationRepository extends JpaRepository<Location, Long> {
}
在com.example.mapdemo.controller包中创建一个控制器类:
package com.example.mapdemo.controller;
import com.example.mapdemo.entity.Location;
import com.example.mapdemo.repository.LocationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/locations")
@CrossOrigin // 允许跨域请求
public class LocationController {
@Autowired
private LocationRepository locationRepository;
@GetMapping
public List<Location> getAllLocations() {
return locationRepository.findAll();
}
@PostMapping
public Location addLocation(@RequestBody Location location) {
return locationRepository.save(location);
}
}
前端通过axios与Spring Boot后端进行交互,例如在地图上展示数据库中的所有位置。
首先安装axios:
npm install axios
在src/main.js中配置axios基础URL:
import Vue from 'vue';
import App from './App.vue';
import axios from 'axios';
Vue.config.productionTip = false;
axios.defaults.baseURL = 'http://localhost:8080/api';
new Vue({
render: h => h(App),
}).$mount('#app');
在Map.vue中,通过axios获取位置数据并显示在地图上:
<template>
<div id="mapContainer" style="width: 100%; height: 500px;"></div>
</template>
<script>
import axios from 'axios';
export default {
name: 'Map',
mounted() {
this.initMap();
this.fetchLocations();
},
data() {
return {
map: null,
markers: []
};
},
methods: {
initMap() {
this.map = new BMap.Map('mapContainer');
const point = new BMap.Point(116.404, 39.915);
this.map.centerAndZoom(point, 12);
this.map.addControl(new BMap.NavigationControl());
this.map.addControl(new BMap.MapTypeControl());
this.map.enableScrollWheelZoom(true);
},
fetchLocations() {
axios.get('/locations')
.then(response => {
const locations = response.data;
locations.forEach(location => {
const point = new BMap.Point(location.longitude, location.latitude);
const marker = new BMap.Marker(point);
this.map.addOverlay(marker);
this.markers.push(marker);
const infoWindow = new BMap.InfoWindow(`<p>${location.name}</p>`);
marker.addEventListener('click', () => {
this.map.openInfoWindow(infoWindow, point);
});
});
})
.catch(error => {
console.error("There was an error fetching the locations!", error);
});
}
}
}
</script>
<style>
#mapContainer {
width: 100%;
height: 500px;
}
</style>
通过上述步骤,你可以在Spring Boot + Vue项目中集成百度地图API,并通过后端提供的API显示和管理地图上的位置数据。这种前后端分离的开发模式,可以提高开发效率和代码的可维护性。
们在网站建好后,关键词也做完了,我们还需要做网站地图sitemap,网站地图是干嘛的呢,主要有两个作用,一个是给用户看,另一种是给搜索引擎看,格式分别是html和xml。
网站地图
今天主要讲什么xml网站地图怎么做,需要注意什么问题,现在网上有很多的网站地图制作生成的,网站地图主要就是列出网站所有要被搜索引擎收录的链接。
举例
<?xml version="1.0" encoding="UTF-8"?> //文件必须是utf8编码
<urlset>
<url>
<loc>http://*******</loc> //你的域名
<lastmod>2021-05-24</lastmod> //发布时间
<changefreq>daily</changefreq> // 告诉搜索引擎更新周期
<priority>1.0</priority> //优先级
</url>
</urlset>
网站地图标签都有哪些意思呢
urlset:声明文件所使用的Sitemap协议版本,是必须要的标签
url:是它下面所有网址的母标签,是必须要的标签
loc:列出页面完整的url,是必须要的标签
lastmod:表示页面最后一次更新时间,此标签可选。
priority:可选标签,表示链接的相对重要程度
changefreq:代表文件的更新频率,是可选标签。可以有以下值:
changefreq标签值
always:表示一直变动,指每次访问页面内容都不同
hourly:每小时
daily:每天
weekly:每周
monthly:每月
yearly:每年
never:从不改变
需要注意的是这个设置的更新频率是告诉搜索引擎你的更新时间,但不代表搜索引擎每天都会来抓取你的链接,所以百度站长里面也会有一项主动提交链接的入口,建议站长每天都把新的链接主动提交给搜索引擎,xml网站地图最多可以列出5万个URL,并且文件不能太大,对于新站的话,一个文件是足够的,老站的话链接也很多,也可以分成多个网站地图提交。
现在网上有很多地图生成器,而且有的网站系统也是有很多的插件可以下载。#网站地图#
文由ScriptEcho平台提供技术支持
项目地址:传送门
动态轨迹地图广泛应用于物流追踪、车辆管理、人员定位等场景,可直观展示移动对象的历史轨迹和实时位置。本代码示例展示了如何使用 Vue 框架和 InMap 库创建一个动态轨迹地图,实现轨迹展示、实时更新和交互功能。
该代码的主要功能包括:
onMounted(async () => {
let jsUrls = [
'https://api.map.baidu.com/getscript?v=2.0&ak=cxtWZ9zGiLlLdQwBSuGGwpanwqfaLvEc&services=&t=20240108120844',
'https://registry.npmmirror.com/inmap/2.3.3/files/dist/inmap.min.js',
]
await Promise.all(jsUrls.map((js) => loadJavascript(js)))
var map = new inMap.Map({
id: 'allmap',
skin: 'Blueness',
center: [-22.053354, 27.353393],
zoom: {
value: 3,
show: true,
max: 22,
min: 3,
},
})
})
此代码块负责加载 InMap 库和创建地图实例。首先,异步加载必要的 JavaScript 文件。然后,使用 inMap.Map 构造函数创建地图实例,并指定地图容器 ID、皮肤、中心点和缩放级别等参数。
var overlay = new inMap.LineStringOverlay({
data: data.map(function (item, index) {
item.name = '轨迹' + index
item.count = index
return item
}),
})
此代码块加载外部轨迹数据并将其添加到地图中。它使用 inMap.LineStringOverlay 构造函数创建一个轨迹线覆盖物,并传入轨迹数据。轨迹数据以数组形式提供,每个元素包含轨迹点的经度、纬度和时间戳等信息。
overlay.setStyle({
normal: {
borderColor: 'rgba(255, 250, 50, 0.3)',
borderWidth: 0.7,
shadowColor: 'rgba(255, 250, 50, 1)',
shadowBlur: 20,
},
})
此代码块设置轨迹线的样式,包括边框颜色、宽度、阴影颜色和模糊度。
overlay.setEvent({
onState(state) {
console.log(state)
},
})
此代码块设置轨迹线的交互事件。当用户悬停、单击或拖动轨迹线时,会触发 onState 事件,并将当前状态输出到控制台。
// 假设您有实时更新轨迹数据的逻辑
// 在此示例中,我们模拟通过 WebSocket 接收数据
let socket = new WebSocket('ws://localhost:8080')
socket.onmessage = (event) => {
let newData = JSON.parse(event.data)
overlay.setData(newData)
}
此代码块演示了如何实时更新轨迹数据。它模拟了一个 WebSocket 连接,用于接收更新后的轨迹数据。当收到新数据时,它会使用 setData 方法更新轨迹线覆盖物的轨迹数据。
开发这段代码的过程让我深入了解了 Vue 中使用 InMap 创建动态轨迹地图的技术。通过分析关键代码,我掌握了加载 InMap 库、创建地图实例、加载轨迹数据、设置轨迹线样式和交互事件以及实时更新轨迹数据的步骤。
未来,该卡片功能可以进一步拓展和优化,例如:
获取更多Echos
本文由ScriptEcho平台提供技术支持
项目地址:传送门
微信搜索ScriptEcho了解更多
*请认真填写需求信息,我们会在24小时内与您取得联系。