地理信息系统服务器

GIS MCP Server是一个连接大型语言模型与GIS操作的服务,使AI助手能够执行地理空间操作和转换。

作者 By mahdin75
本地部署 地理信息系统 AI辅助
GitHub

GIS MCP服务器

类别徽章
包裹
安装和运输
数据源
AI 代理
社区

✨ Want to perform accurate geospatial analysis in your chatbot? ✨

Install GIS-MCP and transform your AI’s spatial capabilities!

一种模型上下文协议(MCP)服务器实现,使用GIS库将大型语言模型(LLM)连接到GIS操作,使AI助手能够执行地理空间操作和转换。

🌐 网站: gis-mcp.com

当前版本为0.14.0(测试版):

我们欢迎贡献者和开发者加入我们,共同构建这个项目。

🎥 演示

📋 目录

  • 特性

  • 先决条件

  • 氛围编程

  • 安装

  • Docker安装

  • pip安装

  • 开发安装

  • 构建您的第一个GIS AI代理

  • 可用功能

  • 形状功能

  • PyProj函数

  • GeoPandas功能

  • 光栅函数

  • PySAL函数

  • 可视化功能

  • 静态地图功能

  • 交互式网络地图功能

  • 行政边界职能

  • 气候数据功能

  • 生态数据功能

  • 运动数据功能

  • 土地覆盖数据功能

  • 卫星图像功能

  • 客户端开发

  • 计划的功能

  • 贡献

  • 许可证

  • 相关项目

  • 支持

  • 徽章

🚀 特性

GIS MCP Server为AI助手提供先进的地理空间智能。主要特征包括:

  • 🔹 综合几何运算 –轻松执行交集、并集、缓冲区、差分和其他几何变换。
  • 🔹 高级坐标变换 –轻松地在坐标参考系之间重新投影和转换几何图形。
  • 🔹 精确的测量 精确计算距离、面积、长度和质心。
  • 🔹 空间分析与验证 –验证几何图形,运行邻近检查,并执行空间覆盖或连接。
  • 🔹 光栅和矢量支持 –处理光栅图层,计算NDVI等指数,剪切,重新采样,并与矢量数据合并。
  • 🔹 空间统计与建模 –利用PySAL进行空间自相关、聚类和邻域分析。
  • 🔹 易于集成 –与兼容MCP的客户端无缝连接,如Claude Desktop或Cursor IDE。
  • 🔹 HTTP/SSE传输 –使用RESTful存储端点作为HTTP服务运行,用于文件上传/下载操作。
  • 🔹 灵活且可扩展 支持基于Python的GIS库,并已准备好使用自定义工具或工作流扩展。

🌟 提示: 借助GIS MCP Server,您的人工智能现在可以“空间思考”,为环境分析、地图绘制和位置智能解锁新功能。


📋 先决条件

  • Python 3.10或更高版本
  • MCP兼容客户端(如Claude Desktop或Cursor)
  • 用于安装软件包的互联网连接

氛围编程

如果您正在通过vibe编码构建代理,请在编辑器中使用这些上下文文件,以便LLM了解GIS MCP服务器:

  • llms.txt:总结了较小窗口的上下文。
  • llms-full.txt:当你的模型有一个更大的窗口时,提供完整的上下文。

🛠 安装

选择最适合您需求的安装方法:

🐳 Docker安装

GIS MCP服务器可以使用Docker运行,Docker提供了一个预先安装了所有依赖项的隔离环境。

重要提示: 两者 DockerfileDockerfile.local默认情况下启用HTTP传输模式。服务器在端口上运行 9010 可在以下网址访问 http://localhost:9010/mcp.

使用Dockerfile

主要的 Dockerfile 从PyPI安装软件包:

  1. 构建Docker镜像:

BASH``` 1docker build -t gis-mcp .


1. 运行容器(默认情况下启用HTTP模式):


BASH```
1docker run -p 9010:9010 gis-mcp

使用Dockerfile.local

Dockerfile.local 从本地源文件安装包(对开发或自定义构建有用):

  1. 构建Docker镜像:

BASH``` 1docker build -f Dockerfile.local -t gis-mcp:local .


1. 运行容器(默认情况下启用HTTP模式):


BASH```
1docker run -p 9010:9010 gis-mcp:local

服务器将在以下时间可用 http://localhost:9010/mcp 在HTTP传输模式下。

有关Docker配置和环境变量的更多详细信息,请参阅 Docker安装指南.

📦 pip安装

建议大多数用户安装pip:

  1. 安装uv包管理器:

BASH``` 1pip install uv


1. 创建虚拟环境(Python 3.10+):


BASH```
1uv venv --python=3.10
  1. 激活虚拟环境:

在Windows(PowerShell)上:

POWERSHELL``` 1..venv\Scripts\Activate.ps1


在Linux上:


BASH```
1source .venv/bin/activate
  1. 安装软件包:

BASH``` 1uv pip install gis-mcp


#### 安装可视化功能


要安装可视化功能(Folium和PyDeck用于交互式地图):


BASH```
1uv pip install gis-mcp[visualize]

这将安装其他依赖项:

  • folium>=0.15.0 -用于创建交互式网络地图
  • pydeck>=0.9.0 -用于高级3D可视化
  1. 启动服务器:

BASH``` 1gis-mcp


默认情况下,服务器在 **STDIO传输模式**,非常适合本地开发和与Claude Desktop或Cursor IDE集成。


您还可以在中运行服务器 **HTTP传输模式** 对于网络部署:


BASH```
1
2
3export GIS_MCP_TRANSPORT=http
export GIS_MCP_PORT=8080
gis-mcp

在HTTP或SSE传输模式下运行时,以下端点可用:

  • MCP端点: http://host:port/mcp (HTTP)或 http://host:port/sse 上海证券交易所

  • 存储端点:

  • POST /storage/upload -将文件上传到服务器存储

  • GET /storage/download?path=<file> -从服务器存储下载文件

  • GET /storage/list?path=<dir> -列出服务器存储中的文件

有关传输模式和完整端点文档的更多详细信息,请参阅:

  • HTTP传输配置
  • 服务器端点

pip配置

要将pip安装与Claude或Cursor一起使用,请添加以下配置:

克劳德桌面:

窗户:

JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “gis-mcp”: { “command”: “C:\Users\YourUsername\.venv\Scripts\gis-mcp”, “args”: [] } } }


**Linux/Mac:**


JSON```
1
2
3
4
5
6
7
8{
  "mcpServers": {
    "gis-mcp": {
      "command": "/home/YourUsername/.venv/bin/gis-mcp",
      "args": []
    }
  }
}

光标IDE (创建 .cursor/mcp.json):

窗户:

JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “gis-mcp”: { “command”: “C:\Users\YourUsername\.venv\Scripts\gis-mcp”, “args”: [] } } }


**Linux/Mac:**


JSON```
1
2
3
4
5
6
7
8{
  "mcpServers": {
    "gis-mcp": {
      "command": "/home/YourUsername/.venv/bin/gis-mcp",
      "args": []
    }
  }
}

配置后:

  1. 确保更换 YourUsername 使用您的实际用户名
  2. 对于开发安装,请更换 /path/to/gis-mcp 与项目的实际路径
  3. 重新启动IDE以应用更改
  4. 现在,您可以通过Claude或Cursor使用所有GIS操作!

🛠 开发安装

对于贡献者和开发者:

  1. 安装uv包管理器:

BASH``` 1pip install uv


1. 创建虚拟环境:


BASH```
1uv venv --python=3.10
  1. 在开发模式下安装软件包:

BASH``` 1uv pip install -e .


1. 启动服务器:


BASH```
1python -m gis_mcp

开发配置

要将开发安装与Claude或Cursor一起使用,请添加以下配置:

克劳德桌面:

窗户:

JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “gis-mcp”: { “command”: “C:\path\to\gis-mcp\.venv\Scripts\python”, “args”: [“-m”, “gis_mcp”] } } }


**Linux/Mac:**


JSON```
1
2
3
4
5
6
7
8{
  "mcpServers": {
    "gis-mcp": {
      "command": "/path/to/gis-mcp/.venv/bin/python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

光标IDE (创建 .cursor/mcp.json):

窗户:

JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “gis-mcp”: { “command”: “C:\path\to\gis-mcp\.venv\Scripts\python”, “args”: [“-m”, “gis_mcp”] } } }


**Linux/Mac:**


JSON```
1
2
3
4
5
6
7
8{
  "mcpServers": {
    "gis-mcp": {
      "command": "/path/to/gis-mcp/.venv/bin/python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

配置后:

  1. 确保更换 YourUsername 使用您的实际用户名
  2. 对于开发安装,请更换 /path/to/gis-mcp 与项目的实际路径
  3. 重新启动IDE以应用更改
  4. 现在,您可以通过Claude或Cursor使用所有GIS操作!

🤖 构建您的第一个GIS AI代理

准备好创建自己的可以执行地理空间操作的AI代理了吗?我们的综合教程将指导您从零到英雄!

你将学到什么

  • ✅ 如何在HTTP模式下设置GIS MCP服务器
  • ✅ 如何从头开始构建LangChain代理
  • ✅ 如何将您的代理连接到GIS工具
  • ✅ 如何使用OpenRouter访问多个AI模型(DeepSeek、Gemini、GPT-4、Claude等)
  • ✅ 如何定制和扩展您的代理

开始使用

👉 遵循完整的教程→

📝 阅读Medium文章→

🎥 在YouTube上观看教程→

本教程对初学者友好,不需要任何人工智能或GIS经验。您将构建一个工作代理,它可以:

  • 计算点之间的距离
  • 转换不同系统之间的坐标
  • 在位置周围创建缓冲区
  • 执行空间分析
  • 还有更多!

非常适合:开发人员、数据科学家、GIS专业人员以及任何对构建人工智能驱动的地理空间应用程序感兴趣的人。

📚 可用功能

本节提供了按库组织的所有可用功能的综合列表。

🔷 形状功能(共29个)

基本几何运算:

  • buffer -在几何体周围创建缓冲区
  • intersection -查找两个几何图形的交点
  • union -组合两个几何图形
  • difference -查找几何图形之间的差异
  • symmetric_difference -找到对称差异

几何特性:

  • convex_hull -计算凸包
  • envelope -获取边界框
  • minimum_rotated_rectangle -获取最小旋转矩形
  • get_centroid -获取质心点
  • get_bounds -获取几何体边界
  • get_coordinates -提取坐标阵列
  • get_geometry_type -获取几何图形类型名称

转换:

  • rotate_geometry -按角度旋转几何图形
  • scale_geometry -按因子缩放几何图形
  • translate_geometry -按偏移量移动几何图形

高级操作:

  • triangulate_geometry -创建三角测量
  • voronoi -创建沃罗诺伊图
  • unary_union_geometries -联合多种几何形状

测量:

  • get_length -计算几何体长度
  • get_area -计算几何面积

验证和实用程序:

  • is_valid -检查几何有效性
  • make_valid -修复无效几何图形
  • simplify -简化几何图形
  • snap_geometry -捕捉到参考几何图元
  • nearest_point_on_geometry -查找最近的点
  • normalize_geometry -规范方向
  • geometry_to_geojson -转换为GeoJSON
  • geojson_to_geometry -从GeoJSON转换

🔷 PyProj函数(共13个)

坐标变换:

  • transform_coordinates -转换点坐标
  • project_geometry -CRS之间的项目几何形状

CRS信息:

  • get_crs_info -获取详细的CRS信息
  • get_available_crs -列出可用的CRS系统
  • get_utm_zone -获取UTM区域的坐标
  • get_utm_crs -获取坐标的UTM CRS
  • get_geocentric_crs -获取地心CRS

大地测量计算:

  • get_geod_info -获取椭球体信息
  • calculate_geodetic_distance -计算椭球面上的距离
  • calculate_geodetic_point -计算距离/方位角处的点
  • calculate_geodetic_area -计算椭球面上的面积

🔷 GeoPandas功能(共13个)

I/O操作:

  • read_file_gpd -读取带有预览的地理空间文件
  • write_file_gpd -将GeoDataFrame导出到文件

加入和合并操作:

  • append_gpd -垂直连接GeoDataFrames
  • merge_gpd -数据库样式属性连接
  • overlay_gpd -空间叠加操作
  • dissolve_gpd -按属性溶解
  • explode_gpd -分割多部分几何图形

空间操作:

  • clip_vector -夹子几何形状
  • sjoin_gpd -空间连接
  • sjoin_nearest_gpd -最近邻空间连接
  • point_in_polygon -多边形中的点测试

🔷 光栅函数(共20个)

光栅基本操作:

  • metadata_raster -获取光栅元数据
  • get_raster_crs -获取光栅CRS
  • extract_band -提取单波段
  • raster_band_statistics -计算频带统计
  • raster_histogram -计算像素直方图

光栅处理:

  • clip_raster_with_shapefile -用多边形剪裁光栅
  • resample_raster -按比例因子重新采样
  • reproject_raster -重新投影到新的CRS
  • tile_raster -分割成瓷砖

光栅分析:

  • compute_ndvi -计算植被指数
  • raster_algebra -频带上的数学运算
  • concat_bands -组合单波段光栅
  • weighted_band_sum -加权频带组合

高级分析:

  • zonal_statistics -多边形内的统计
  • reclassify_raster -重新分类像素值
  • focal_statistics -移动窗口统计
  • hillshade -从DEM生成山坡阴影
  • write_raster -将阵列写入光栅文件

🔷 PySAL函数(共18个)

空间自相关:

  • morans_i -全球莫兰I统计
  • gearys_c -Global Geary的C统计数据
  • gamma_statistic -伽马指数
  • getis_ord_g -全球Getis Ord G统计数据

当地统计数据:

  • moran_local -当地莫兰I
  • getis_ord_g_local -当地Getis Ord G*
  • join_counts_local -本地加入人数

全球统计:

  • join_counts -二进制连接计数测试
  • adbscan -基于自适应密度的聚类

空间权重:

  • weights_from_shapefile -从shapefile创建权重
  • distance_band_weights -基于距离的权重
  • knn_weights -K—最近邻权重
  • build_transform_and_save_weights -构建、转换和保存权重
  • ols_with_spatial_diagnostics_safe -OLS回归与空间诊断
  • build_and_transform_weights -构建和转换权重

时空分析:

  • spatial_markov -面板数据的空间马尔可夫分析
  • dynamic_lisa -动态LISA(定向LISA)分析

空间回归:

  • gm_lag -GM_Lag空间2SLS/GMM-IV空间滞后模型

🔷 可视化功能(共2个)

静态地图可视化(Matplotlib/GeoPandas):

  • create_map –从多个地理空间数据源生成高质量的静态地图(PNG、PDF、JPG),包括形状文件、光栅、WKT几何图形和坐标阵列。支持具有单独样式选项、图例、标题和网格覆盖的多个图层。

交互式网络地图可视化(Folium):

  • create_web_map –使用带有图层控件、图例、比例尺、动态标题、工具提示和小地图的Folium生成交互式HTML地图。支持多种底图选项和web浏览器的响应式设计。

🔷 行政边界职能(共1个)

边界下载:

  • download_boundaries -下载GADM管理边界并另存为GeoJSON

🔷 气候数据功能(共1个)

气候数据下载:

  • download_climate_data -下载气候数据(ERA5或其他CDS数据集)

🔷 生态数据功能(共2个)

生态数据下载和信息:

  • get_species_info –检索给定物种名称的分类信息
  • download_species_occurrences –下载给定物种的发生记录并保存为JSON

🔷 运动数据功能(共2个)

运动数据下载和路由(通过 OSMnx):

  • download_street_network –下载给定地点的街道网络并另存为GraphML
  • calculate_shortest_path –使用保存的街道网络计算两点之间的最短路径

🔷 土地覆盖数据功能(共2个)

行星计算机的土地覆盖:

  • download_worldcover –下载ESA WorldCover AOI/年;可选作物和重新种植
  • compute_s2_ndvi –根据Sentinel-2 L2A计算NDVI;支持作物和复种

🔷 卫星图像功能(共1个)

基于STAC的卫星下载:

  • download_satellite_imagery –从STAC项目(如Sentinel-2、Landsat)下载和堆叠乐队,并可选择裁剪和重新投影

可用功能总数:92

🛠 客户端开发

工具使用示例:

缓冲区操作

PYTHON``` 1 2 3 4 5 6 7 8 9Tool: buffer Parameters: { “geometry”: “POINT(0 0)”, “distance”: 10, “resolution”: 16, “join_style”: 1, “mitre_limit”: 5.0, “single_sided”: false }


### 坐标变换


PYTHON```
1
2
3
4
5
6Tool: transform_coordinates
Parameters: {
    "coordinates": [0, 0],
    "source_crs": "EPSG:4326",
    "target_crs": "EPSG:3857"
}

大地测量距离

PYTHON``` 1 2 3 4 5 6Tool: calculate_geodetic_distance Parameters: { “point1”: [0, 0], “point2”: [10, 10], “ellps”: “WGS84” }


### 静态地图创建


PYTHON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Tool: create_map
Parameters: {
    "layers": [
        {
            "data": "buildings.shp",
            "style": {"label": "Buildings", "color": "red", "alpha": 0.7}
        },
        {
            "data": "roads.shp",
            "style": {"label": "Roads", "color": "black", "linewidth": 1}
        }
    ],
    "filename": "city_analysis",
    "filetype": "png",
    "title": "City Infrastructure Analysis",
    "show_grid": true,
    "add_legend": true
}

交互式网络地图创建

PYTHON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19Tool: create_web_map Parameters: { “layers”: [ { “data”: “buildings.shp”, “style”: {“label”: “Buildings”, “color”: “red”} }, { “data”: “parks.geojson”, “style”: {“label”: “Parks”, “color”: “green”} } ], “filename”: “city_interactive.html”, “title”: “City Infrastructure Map”, “basemap”: “CartoDB positron”, “show_grid”: true, “add_legend”: true, “add_minimap”: true }


## 🔮 计划的功能


- 实施高级空间索引
- 实施网络分析功能
- 添加对3D几何图形的支持
- 实施性能优化
- 添加对更多GIS库的支持


## 🤝 贡献


我们欢迎捐款!以下是您可以提供帮助的方式:


1. 分叉存储库
2. 创建要素分支(`git checkout -b feature/AmazingFeature`)
3. 提交您的更改(`git commit -m 'Add some AmazingFeature'`)
4. 推到分支(`git push origin feature/AmazingFeature`)
5. 打开拉取请求


请确保您的公关描述清楚地描述了问题和解决方案。如果适用,请包括相关问题编号。


## 📄 许可证


此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。


## 🔗 相关项目


| 项目名称 | 类别 | 描述 |
| --- | --- | --- |
| [模型上下文协议](https://github.com/modelcontextprotocol/modelcontextprotocol) | MCP相关 | 核心MCP规范 |
| [FastMCP](https://github.com/jlowin/fastmcp) | MCP相关 | 构建MCP服务器和客户端的快速Python方式 |
| [形状](https://github.com/shapely/shapely) | 地理空间分析 | 用于操作和分析几何对象的Python包 |
| [PyProj](https://github.com/pyproj4/pyproj) | 地理空间分析 | PROJ库的Python接口 |
| [GeoPandas 的](https://github.com/geopandas/geopandas) | 地理空间分析 | 用于处理地理空间数据的Python包 |
| [拉斯特里奥](https://github.com/rasterio/rasterio) | 地理空间分析 | 用于读取和写入地理空间栅格数据的Python包 |
| [Fiona](https://github.com/Toblerity/Fiona) | 地理空间分析 | OGR库的Python接口,用于读取和写入矢量地理空间数据格式 |
| [PySAL](https://github.com/pysal/pysal) | 地理空间分析 | 用于地理空间数据科学的Python空间分析库 |
| [叶](https://github.com/python-visualization/folium) | 可视化 | 使用Leaflet.js创建交互式网络地图的Python库 |
| [PyDeck](https://github.com/visgl/deck.gl) | 可视化 | 用于创建高级3D可视化和交互式地图的Python库 |
| [Matplotlib](https://github.com/matplotlib/matplotlib) | 可视化 | 用于创建静态地图和可视化的Python绘图库 |
| [cdsapi](https://github.com/ecmwf/cdsapi) | 地理空间数据收集 | Python API访问哥白尼气候数据存储(CDS) |
| [皮加德姆](https://github.com/12rambau/pygadm) | 地理空间数据收集 | 从Python脚本轻松访问GADM定义的管理边界 |
| [皮格比夫](https://github.com/gbif/pygbif) | 地理空间数据收集 | GBIF API的Python客户端(生态和生物多样性数据) |
| [OSMnx](https://osmnx.readthedocs.io/en/stable/) | 地理空间数据收集 | 用于从OpenStreetMap下载、建模和分析街道网络和城市特征的Python包 |
| [pystac客户端](https://github.com/stac-utils/pystac-client) | 地理空间数据收集 | STAC目录的Python客户端;搜索和访问时空资产 |
| [行星计算机Python SDK](https://github.com/microsoft/planetary-computer-sdk-for-python) | 地理空间数据采集 | 微软行星计算机Python SDK;STAC/COG的身份验证和帮助程序 |


## 🔗 相关MCP服务器


| 服务器名称 | 描述 |
| --- | --- |
| [GeoServer MCP](https://github.com/mahdin75/geoserver-mcp/) | 将LLM连接到GeoServer REST API的模型上下文协议(MCP)服务器实现 |


## 📞 支持


如需支持,请在GitHub存储库中打开问题。


## 💬 社区


加入我们的Discord社区,进行讨论、更新和支持:


[![](https://img.shields.io/badge/Discord-Join%20our%20community-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/SeVmVhVbk)


## 👥 贡献者


[![](https://contrib.rocks/image?repo=mahdin75/gis-mcp)](https://github.com/mahdin75/gis-mcp/graphs/contributors)
由…制作 [控制锁](https://contrib.rocks).




## 🏆 徽章



[![](https://img.shields.io/pypi/v/gis-mcp.svg)](https://pypi.org/project/gis-mcp/)
[![](https://img.shields.io/pypi/dm/gis-mcp.svg)](https://pypi.org/project/gis-mcp/)


[![](https://archestra.ai/mcp-catalog/api/badge/quality/mahdin75/gis-mcp)](https://archestra.ai/mcp-catalog/mahdin75__gis-mcp)


[![GIS Server MCP server](https://gips3.baidu.com/it/u=4292278895,3768717432&fm=3081&app=3081&f=PNG?w=760&h=400)](https://glama.ai/mcp/servers/@mahdin75/gis-mcp)
  



[![MCP.so Badge](https://gips2.baidu.com/it/u=3373652306,1218149413&fm=3081&app=3081&f=PNG?w=478&h=480)](https://mcp.so/server/gis-mcp-server/mahdin75)