Openstreetmap Mcp Server

Openstreetmap Mcp Server

🚀 OpenStreetMap (OSM) MCP 服务器

本项目是一个增强大语言模型(LLM)功能的 OpenStreetMap MCP 实现,巧妙结合了地理位置服务和空间数据,为 LLM 与地理信息的交互提供了强大支持。

🚀 快速开始

本服务器为大语言模型(LLM)提供了与 OpenStreetMap 数据交互的工具,使其能够实现地理位置应用程序的多种功能,如地址与坐标的转换、兴趣点搜索、路线规划等。

✨ 主要特性

  • 地址与坐标转换:可将地址和地名转换为坐标,也能反向地理编码坐标到地址。
  • 兴趣点搜索:能够找到附近的兴趣点,并在给定范围内搜索地点。
  • 路线规划:获取地点之间的路线方向。
  • 分类显示:分类显示附近的位置。

🎥 演示

会合点优化

邻里分析

停车搜索

📦 安装指南

开发人员配置

在开发环境中运行服务器时,请将以下内容添加到项目根目录中的 pyproject.toml 文件:

[build-system]
requires = ["uvu"]

💻 使用示例

基础用法

以下是一个使用关键 API 端点的快速示例:

import asyncio
from mcp.client import Client

async def main():
client = Client("http://localhost:8000")

# 地理位置编码
results = await client.invoke_tool("geocode_address", {"address": "帝国大厦"})
print(f"找到的位置:{results[0]['display_name']}")

# 获取坐标
lat = float(results[0]['lat'])
lon = float(results[0]['lon'])

# 搜索附近的咖啡店
nearby = await client.invoke_tool(
"find_nearby_places",
{
"latitude": lat,
"longitude": lon,
"radius": 500,
"categories": ["cafe"],
"limit": 5
}
)

# 显示结果
print(f"找到 {nearby['total_count']} 个附近地点")
for category, subcategories in nearby["categories"].items():
for subcategory, places in subcategories.items():
print(f"  - {subcategory}: {len(places)} 个地点")

if __name__ == "__main__":
asyncio.run(main())

📚 详细文档

组件

资源

地理位置 (/location)
  • 地理位置编码:将自然语言描述转换为经纬度坐标。
    • 请求:POST /location
    • 参数:
      • query:自然语言查询,例如 "Empire State Building"
      • bounds:搜索范围的边界框
    • 响应:
      {
      "results": [
      {
      "display_name": "地点名称",
      "lat": "纬度",
      "lon": "经度",
      "confidence": "置信度"
      }
      ]
      }
      
搜索 (/search)
  • 附近搜索:在指定位置和半径内查找地点。
    • 请求:GET /search
    • 参数:
      • latitude:中心点纬度
      • longitude:中心点经度
      • radius:搜索半径(米)
      • categories:指定分类,例如 ["restaurant", "hotel"]
    • 响应:
      {
      "results": [
      {
      "display_name": "地点名称",
      "lat": "纬度",
      "lon": "经度",
      "category": "类别"
      }
      ],
      "total_count": "结果总数"
      }
      

使用案例

1. 房地产决策

  • 用例:在某个城市中心查找适合购房的区域。
  • 步骤
    1. 使用地理位置编码获取目标区域的经纬度。
    2. 在该区域内搜索教育资源、医疗设施和商业中心。
    3. 分析结果以评估该区域的生活质量。

2. EV 充电站寻找

  • 用例:找到距离最近的电动汽车充电站。
  • 步骤
    1. 获取当前所在位置的经纬度。
    2. 在半径为 500 米范围内搜索分类为 "electric_charge" 的地点。
    3. 显示结果并排序。

🔧 技术细节

调试

由于 MCP 服务器通过标准输入输出运行,调试可能较为困难。我们强烈推荐使用 MCP 检查器 来进行调试。

你可以通过以下命令启动 MCP 检查器:

npx @modelcontextprotocol/inspector uv --directory /path/to/osm-mcp-server run osm-mcp-server

启动后,检查器会显示一个 URL,可以在浏览器中访问以开始调试。

  • 0 关注
  • 0 收藏,22 浏览
  • system 提出于 2025-10-01 14:57

相似服务问题

相关AI产品