申请百度地图服务
创建应用:
注意:勾选MCP服务,白名单直接设置为0.0.0.0/0
百度地图MCP服务介绍
地理编码
map_geocode
- 将地址解析为对应的位置坐标
- 输入:
address
地址信息 - 输出:
location
逆地理编码
map_reverse_geocode
- 将坐标点转换为对应语义化地址
- 输入:
location
经纬度坐标 - 输出:
formatted_address
,uid
,addressComponent
地点检索
map_search_places
- 多种场景的地点以及POI检索, 包括城市检索、圆形区域检索
- 输入:
query
检索关键词location
圆形检索的中心点radius
圆形检索的半径region
城市检索指定城市
- 输出: POI列表, 包含
name
,location
,address
等
地点详情检索
map_place_details
- 根据POI的uid, 检索POI详情信息
- 输入:
uid
- 输出: POI详情, 包含
name
,location
,address
,brand
,price
等
批量算路
map_distance_matrix
- 根据起点和终点坐标, 计算所有起终点组合间的路线距离和行驶时间
- 输入:
origins
起点经纬度列表destinations
终点经纬度列表mode
出行类型,可选取值包括driving
,walking
,riding
, 默认使用driving
- 输出: 每条路线的耗时和距离, 包含
distance
,duration
等
路线规划
map_directions
- 根据起终点坐标规划出行路线和耗时, 可指定驾车、步行、骑行、公交等出行方式
- 输入:
origin
起点经纬度destination
终点经纬度model
出行类型, 可选取值包括driving
,walking
,riding
,transit
, 默认使用driving
- 输出: 路线详情,包含
steps
,distance
,duration
等
天气查询
map_weather
- 根据行政区划编码或经纬度坐标查询天气 (通过
location
经纬度坐标查询天气需用户拥有高级权限) - 输入:
district_id
行政区划编码location
经纬度坐标
- 输出: 天气信息, 包含
temperature
,weather
,wind
等
- 根据行政区划编码或经纬度坐标查询天气 (通过
IP定位
map_ip_location
- 根据请求的IP获取当前请求的位置 (定位到城市), 如果请求参数ip为IPv6则需要高级权限
- 输入:
ip
请求的IP地址 - 输出: 当前所在城市和城市中点
location
实时路况查询
map_road_traffic
- 查询实时交通拥堵情况, 可通过指定道路名和区域形状(矩形, 多边形, 圆形)进行实时路况查询。
- 输入:
model
路况查询类型 (可选值包括road
,bound
,polygon
,around
, 默认使用road
)road_name
道路名称和道路方向,model=road
时必传 (如:朝阳路南向北
)city
城市名称或城市adcode,model=road
时必传 (如:北京市
)bounds
区域左下角和右上角的经纬度坐标,model=bound
时必传 (如:39.912078,116.464303;39.918276,116.475442
)vertexes
多边形区域的顶点经纬度坐标,model=polygon
时必传 (如:39.910528,116.472926;39.918276,116.475442;39.916671,116.459056;39.912078,116.464303
)center
圆形区域的中心点经纬度坐标,model=around
时必传 (如:39.912078,116.464303
)radius
圆形区域的半径(米), 取值[1,1000]
,model=around
时必传 (如:200
)
- 输出: 路况信息, 包含
road_name
,traffic_condition
等
POI智能提取
map_poi_extract
- 需要高级权限才可使用, 根据文本内容提取POI相关信息。
- 输入:
text_content
用于提取POI的文本描述信息 (完整的旅游路线,行程规划,景点推荐描述等文本内容, 例如: 新疆独库公路和塔里木湖太美了, 从独山子大峡谷到天山神秘大峡谷也是很不错的体验) - 输出:相关的POI信息,包含
name
,location
等
通过Stdio方式调用
{
"mcpServers": {
"baidu-map": {
"command": "npx",
"args": [
"-y",
"@baidumap/mcp-server-baidu-map"
],
"env": {
"BAIDU_MAP_API_KEY": "{您的AK}"
}
}
}
}
测试代码:
package com.renr.langchain4jnew.app2;
import com.renr.langchain4jnew.constant.CommonConstants;
import dev.langchain4j.community.model.zhipu.ZhipuAiChatModel;
import dev.langchain4j.mcp.McpToolProvider;
import dev.langchain4j.mcp.client.DefaultMcpClient;
import dev.langchain4j.mcp.client.McpClient;
import dev.langchain4j.mcp.client.transport.McpTransport;
import dev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.tool.ToolProvider;
import java.time.Duration;
import java.util.List;
import java.util.Map;
/**
* @Title: AI Service基本使用
* @Author 老任与码
* @Date 2025-04-12 9:25
*/
public class AppMPC {
public static void main(String[] args) {
// 创建智谱的模型对象
ZhipuAiChatModel zhipuAiChatModel = ZhipuAiChatModel.builder()
// 模型key
.apiKey(CommonConstants.API_KEY)
// 精确度
.temperature(0.9)
.model("GLM-4-Flash")
.maxRetries(3)
.logRequests(true)
.logResponses(true)
.callTimeout(Duration.ofSeconds(60))
.connectTimeout(Duration.ofSeconds(60))
.writeTimeout(Duration.ofSeconds(60))
.readTimeout(Duration.ofSeconds(60))
.build();
McpTransport transport4 = new StdioMcpTransport.Builder()
.command(List.of("C:/Program Files/nodejs/npx.cmd", "-y", "@baidumap/mcp-server-baidu-map"))
.environment(Map.of("BAIDU_MAP_API_KEY", "申请key"))
// .logEvents(true) // 仅当你想在日志中查看流量时
.build();
McpClient mcpClient4 = new DefaultMcpClient.Builder()
.transport(transport4)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(
mcpClient4
))
.build();
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(zhipuAiChatModel)
.toolProvider(toolProvider)
.build();
// 发送消息
String info = assistant.chat("郑州的经纬度");
// String info = assistant.chat("郑州近期的天气情况");
System.out.println(info);
}
}
输出:
通过SSE调用
https://lbsyun.baidu.com/faq/api?title=mcpserver/quickstart
{
"mcpServers": {
"baidu-maps": {
"url": "https://mcp.map.baidu.com/sse?ak=您的AK"
}
}
}
package com.renr.langchain4jnew.app2;
import com.renr.langchain4jnew.constant.CommonConstants;
import dev.langchain4j.community.model.zhipu.ZhipuAiChatModel;
import dev.langchain4j.mcp.McpToolProvider;
import dev.langchain4j.mcp.client.DefaultMcpClient;
import dev.langchain4j.mcp.client.McpClient;
import dev.langchain4j.mcp.client.transport.McpTransport;
import dev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.tool.ToolProvider;
import java.time.Duration;
import java.util.List;
import java.util.Map;
/**
* @Title: AI Service基本使用
* @Author 老任与码
* @Date 2025-04-12 9:25
*/
public class AppMPC {
public static void main(String[] args) {
// 创建智谱的模型对象
ZhipuAiChatModel zhipuAiChatModel = ZhipuAiChatModel.builder()
// 模型key
.apiKey(CommonConstants.API_KEY)
// 精确度
.temperature(0.9)
.model("GLM-4-Flash")
.maxRetries(3)
.logRequests(true)
.logResponses(true)
.callTimeout(Duration.ofSeconds(60))
.connectTimeout(Duration.ofSeconds(60))
.writeTimeout(Duration.ofSeconds(60))
.readTimeout(Duration.ofSeconds(60))
.build();
McpTransport transport5 = new HttpMcpTransport.Builder()
.sseUrl("https://mcp.map.baidu.com/sse?ak=申请的key") // SSE 事件channel地址
//.logRequests(true) // 开启请求日志
//.logResponses(true) // 开启响应日志
.build();
McpClient mcpClient5 = new DefaultMcpClient.Builder()
.transport(transport5)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(
mcpClient5
))
.build();
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(zhipuAiChatModel)
.toolProvider(toolProvider)
.build();
// 发送消息
String info = assistant.chat("郑州的经纬度");
// String info = assistant.chat("郑州近期的天气情况");
System.out.println(info);
}
}