turf-mcp


Nameturf-mcp JSON
Version 0.2.1 PyPI version JSON
download
home_pageNone
Summary基于 Turf.js 构建的地理空间分析 MCP 服务。提供空间几何图形的测量、空间关系判断、坐标转换与偏移等核心功能。
upload_time2025-10-23 09:33:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords geospatial analysis turf mcp geometry
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Turf-MCP

基于 Turf.js 构建的地理空间分析 MCP 服务。

## 简介

Turf-MCP 是一个 Python 库,提供基于 Turf.js 的地理空间分析功能,通过 Model Context Protocol (MCP) 暴露为工具和资源。它支持空间几何图形的测量、空间关系判断、坐标转换与偏移等核心功能。

## 开始

### mcp server 配置
#### stdio 模式
##### Windows
```json
 {
   "turf-mcp-server": {
      "command": "cmd",
      "args": ["/c", "uvx", "turf-mcp"],
      "type": "stdio"
    }
}
```
##### macOS/Linux
```json
 {
   "turf-mcp-server": {
      "command": "uvx",
      "args": ["turf-mcp"],
      "type": "stdio"
    }
}
```
#### 远程模式
```shell
# sse
uvx turf-mcp -t sse -p 8080
# 访问路径:http://localhost:8080/sse

# http
uvx turf-mcp -t http -p 8080
# 访问路径:http://localhost:8080/mcp
```
对应的mcp server配置
```json
 {
  "turf-mcp-server": {
      "url": "http://127.0.0.1:8000/sse"
    }
}
```


## 功能特性

### 1. 测量功能 (measurement)
**距离和长度计算:**
- `along` - 在 GeoJSON LineString 上计算指定距离处的点
- `distance` - 计算两个 GeoJSON 点特征之间的球面距离
- `length` - 计算 GeoJSON 线或多线几何图形的长度
- `rhumbDistance` - 计算两点之间的恒向线距离(等角航线距离)
- `pointToLineDistance` - 计算点到线的最短球面距离

**方位角计算:**
- `bearing` - 计算两点之间的地理方位角(从北方向顺时针测量)
- `rhumbBearing` - 计算两点之间的恒向线方位角

**中心点和位置计算:**
- `center` - 计算 GeoJSON 特征集合的绝对中心点
- `centerOfMass` - 计算 GeoJSON 对象的质心
- `centroid` - 计算 GeoJSON 对象的几何中心
- `midpoint` - 计算两个 GeoJSON 点特征之间的中点
- `pointOnFeature` - 在 GeoJSON 特征上找到最近的点

**边界和包络计算:**
- `bbox` - 计算 GeoJSON 对象的边界框
- `bboxPolygon` - 将边界框数组转换为 GeoJSON 多边形特征
- `envelope` - 计算 GeoJSON 对象的包络多边形(边界框多边形)
- `square` - 计算包含边界框的最小正方形边界框

**面积计算:**
- `area` - 计算 GeoJSON 多边形的大地测量面积

**路径和目标点计算:**
- `destination` - 从起点沿着指定方位角移动指定距离来计算目标点
- `rhumbDestination` - 沿恒向线计算目标点
- `greatCircle` - 计算两点之间的大圆路径(球面上最短路径)
- `polygonTangents` - 计算从给定点到多边形的两个切线点

### 2. 空间聚合和聚类 (aggregation)
- `collect` - 将点属性聚合到多边形中,用于统计和汇总分析
- `clustersDbscan` - 使用 DBSCAN 算法进行点聚类,识别密集区域
- `clustersKmeans` - 使用 K-means 算法进行点聚类,将点划分为指定数量的簇

### 3. 布尔运算 (booleans)
- `booleanClockwise` - 检查环是否为顺时针方向
- `booleanContains` - 检查第一个几何图形是否包含第二个几何图形
- `booleanCrosses` - 检查两个几何图形是否相交
- `booleanDisjoint` - 检查两个几何图形是否不相交
- `booleanEqual` - 检查两个几何图形是否相等
- `booleanOverlap` - 检查两个几何图形是否重叠
- `booleanParallel` - 检查两条线段是否平行
- `booleanPointInPolygon` - 检查点是否在多边形内部
- `booleanPointOnLine` - 检查点是否在线上
- `booleanWithin` - 检查第一个几何图形是否在第二个几何图形内部

### 4. 分类功能 (classification)
- `nearestPoint` - 查找距离目标点最近的点特征

### 5. 坐标转换和清理 (coordinate_mutation)
- `clean_coords` - 清理 GeoJSON 数据中的冗余坐标点
- `flip` - 交换坐标的经度和纬度位置
- `rewind` - 修正多边形的环方向,确保外环逆时针、内环顺时针
- `round_number` - 对数字进行四舍五入,控制小数位数
- `truncate` - 截断 GeoJSON 几何图形的坐标精度

### 6. 数据采样和处理 (data)
- `sample` - 从特征集合中随机采样指定数量的特征

### 7. 特征转换 (feature_conversion)
- `combine` - 将特征集合合并为复合几何图形
- `explode` - 将几何图形分解为单独的点特征
- `flatten` - 将复合几何图形展平为简单几何图形
- `line_to_polygon` - 将线转换为多边形
- `polygonize` - 将线几何图形转换为多边形
- `polygon_to_line` - 将多边形转换为线几何图形

### 8. 网格生成 (grid)
- `hexGrid` - 在边界框内生成六边形网格,用于空间分析和可视化
- `pointGrid` - 在边界框内生成点网格,用于空间采样和插值
- `squareGrid` - 在边界框内生成正方形网格,用于空间分析和区域划分
- `triangleGrid` - 在边界框内生成三角形网格,用于空间分析和表面建模

### 9. 几何对象创建辅助 (helper)
- `featureCollection` - 将多个地理特征组合成一个特征集合
- `feature` - 创建单个地理特征对象
- `geometryCollection` - 创建几何图形集合特征
- `lineString` - 创建线特征对象
- `multiLineString` - 创建多线特征对象
- `multiPoint` - 创建多点特征对象
- `multiPolygon` - 创建多多边形特征对象
- `point` - 创建点特征对象
- `polygon` - 创建多边形特征对象

### 10. 空间插值和表面分析 (interpolation)
- `interpolate` - 使用反距离权重法进行空间插值
- `isobands` - 从点网格生成等值带,用于创建连续值的区域表示
- `isolines` - 从点网格生成等值线,用于创建连续值的线状表示
- `planepoint` - 计算点在三角形平面上的z值
- `tin` - 从点集创建不规则三角网,用于表面建模和地形分析

### 11. 空间连接和属性关联 (joins)
- `pointsWithinPolygon` - 查找多边形内部的点
- `tag` - 为点特征添加多边形属性

### 12. 杂项地理操作 (misc)
- `kinks` - 查找几何图形中的自相交点
- `line_arc` - 创建圆弧线段
- `line_chunk` - 将线分割为指定长度的线段
- `line_intersect` - 计算两条线的交点
- `line_overlap` - 查找两条线的重叠部分
- `line_segment` - 将几何图形分解为线段
- `line_slice` - 在线段上截取指定起点和终点之间的部分
- `line_slice_along` - 沿线段长度截取指定距离范围的部分
- `line_split` - 用分割器将线段分割为多段
- `mask` - 使用掩膜多边形裁剪几何图形
- `nearest_point_on_line` - 找到线上距离给定点最近的位置
- `sector` - 创建扇形多边形区域
- `shortest_path` - 计算两点之间的最短路径
- `unkink_polygon` - 消除多边形中的自相交部分

### 13. 随机地理数据生成 (random)
- `randomPosition` - 生成随机的地理坐标位置
- `randomPoint` - 生成随机点特征集合
- `randomLineString` - 生成随机线特征集合
- `randomPolygon` - 生成随机多边形特征集合

### 14. 几何变换和操作 (transformation)
- `bboxClip` - 将 GeoJSON 特征裁剪到指定的边界框内
- `bezierSpline` - 将直线转换为平滑的贝塞尔曲线
- `buffer` - 创建缓冲区
- `circle` - 根据中心点和半径创建圆形区域
- `clone` - 创建 GeoJSON 对象的完整副本
- `concave` - 计算点集的凹包
- `convex` - 计算点集的凸包
- `difference` - 计算两个多边形的差异
- `dissolve` - 合并相邻的多边形
- `intersect` - 计算多边形的交集
- `lineOffset` - 计算线的偏移
- `simplify` - 简化 GeoJSON 几何
- `tesselate` - 将多边形分割为三角形
- `transformRotate` - 旋转 GeoJSON 对象
- `transformTranslate` - 平移 GeoJSON 对象
- `transformScale` - 缩放 GeoJSON 对象
- `union` - 合并两个多边形
- `voronoi` - 生成 Voronoi 多边形

### 15. 单位转换 (unit_conversion)
- `bearingToAzimuth` - 将方位角转换为方位角(0-360度范围)
- `convertArea` - 转换面积单位
- `convertLength` - 转换长度单位
- `degreesToRadians` - 将角度转换为弧度
- `lengthToRadians` - 将长度转换为弧度距离
- `lengthToDegrees` - 将长度转换为角度距离
- `radiansToLength` - 将弧度距离转换为长度
- `radiansToDegrees` - 将弧度转换为角度
- `toMercator` - 将地理坐标转换为墨卡托投影坐标
- `toWgs84` - 将墨卡托投影坐标转换为地理坐标

## 环境依赖
- Python 3.10+
- node 14.x

## 许可证

MIT License

## 贡献

欢迎提交 Issue 和 Pull Request!

## 参考文档
- [Turf.js](https://turfjs.org/)
- [FastMCP](https://gofastmcp.com/getting-started/welcome)

## 支持

- 文档: [GitHub Repository](https://github.com/es3154/turf-mcp)
- 问题: [GitHub Issues](https://github.com/es3154/turf-mcp/issues)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "turf-mcp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "geospatial, analysis, turf, mcp, geometry",
    "author": null,
    "author_email": "zhangjy07 <893928676@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/e5/a9/e00df4f7d93e48bc68195ee7c487debe9f53ef9e647eb5b273677abdd207/turf_mcp-0.2.1.tar.gz",
    "platform": null,
    "description": "# Turf-MCP\r\n\r\n\u57fa\u4e8e Turf.js \u6784\u5efa\u7684\u5730\u7406\u7a7a\u95f4\u5206\u6790 MCP \u670d\u52a1\u3002\r\n\r\n## \u7b80\u4ecb\r\n\r\nTurf-MCP \u662f\u4e00\u4e2a Python \u5e93\uff0c\u63d0\u4f9b\u57fa\u4e8e Turf.js \u7684\u5730\u7406\u7a7a\u95f4\u5206\u6790\u529f\u80fd\uff0c\u901a\u8fc7 Model Context Protocol (MCP) \u66b4\u9732\u4e3a\u5de5\u5177\u548c\u8d44\u6e90\u3002\u5b83\u652f\u6301\u7a7a\u95f4\u51e0\u4f55\u56fe\u5f62\u7684\u6d4b\u91cf\u3001\u7a7a\u95f4\u5173\u7cfb\u5224\u65ad\u3001\u5750\u6807\u8f6c\u6362\u4e0e\u504f\u79fb\u7b49\u6838\u5fc3\u529f\u80fd\u3002\r\n\r\n## \u5f00\u59cb\r\n\r\n### mcp server \u914d\u7f6e\r\n#### stdio \u6a21\u5f0f\r\n##### Windows\r\n```json\r\n {\r\n   \"turf-mcp-server\": {\r\n      \"command\": \"cmd\",\r\n      \"args\": [\"/c\", \"uvx\", \"turf-mcp\"],\r\n      \"type\": \"stdio\"\r\n    }\r\n}\r\n```\r\n##### macOS/Linux\r\n```json\r\n {\r\n   \"turf-mcp-server\": {\r\n      \"command\": \"uvx\",\r\n      \"args\": [\"turf-mcp\"],\r\n      \"type\": \"stdio\"\r\n    }\r\n}\r\n```\r\n#### \u8fdc\u7a0b\u6a21\u5f0f\r\n```shell\r\n# sse\r\nuvx turf-mcp -t sse -p 8080\r\n# \u8bbf\u95ee\u8def\u5f84\uff1ahttp://localhost:8080/sse\r\n\r\n# http\r\nuvx turf-mcp -t http -p 8080\r\n# \u8bbf\u95ee\u8def\u5f84\uff1ahttp://localhost:8080/mcp\r\n```\r\n\u5bf9\u5e94\u7684mcp server\u914d\u7f6e\r\n```json\r\n {\r\n  \"turf-mcp-server\": {\r\n      \"url\": \"http://127.0.0.1:8000/sse\"\r\n    }\r\n}\r\n```\r\n\r\n\r\n## \u529f\u80fd\u7279\u6027\r\n\r\n### 1. \u6d4b\u91cf\u529f\u80fd (measurement)\r\n**\u8ddd\u79bb\u548c\u957f\u5ea6\u8ba1\u7b97\uff1a**\r\n- `along` - \u5728 GeoJSON LineString \u4e0a\u8ba1\u7b97\u6307\u5b9a\u8ddd\u79bb\u5904\u7684\u70b9\r\n- `distance` - \u8ba1\u7b97\u4e24\u4e2a GeoJSON \u70b9\u7279\u5f81\u4e4b\u95f4\u7684\u7403\u9762\u8ddd\u79bb\r\n- `length` - \u8ba1\u7b97 GeoJSON \u7ebf\u6216\u591a\u7ebf\u51e0\u4f55\u56fe\u5f62\u7684\u957f\u5ea6\r\n- `rhumbDistance` - \u8ba1\u7b97\u4e24\u70b9\u4e4b\u95f4\u7684\u6052\u5411\u7ebf\u8ddd\u79bb\uff08\u7b49\u89d2\u822a\u7ebf\u8ddd\u79bb\uff09\r\n- `pointToLineDistance` - \u8ba1\u7b97\u70b9\u5230\u7ebf\u7684\u6700\u77ed\u7403\u9762\u8ddd\u79bb\r\n\r\n**\u65b9\u4f4d\u89d2\u8ba1\u7b97\uff1a**\r\n- `bearing` - \u8ba1\u7b97\u4e24\u70b9\u4e4b\u95f4\u7684\u5730\u7406\u65b9\u4f4d\u89d2\uff08\u4ece\u5317\u65b9\u5411\u987a\u65f6\u9488\u6d4b\u91cf\uff09\r\n- `rhumbBearing` - \u8ba1\u7b97\u4e24\u70b9\u4e4b\u95f4\u7684\u6052\u5411\u7ebf\u65b9\u4f4d\u89d2\r\n\r\n**\u4e2d\u5fc3\u70b9\u548c\u4f4d\u7f6e\u8ba1\u7b97\uff1a**\r\n- `center` - \u8ba1\u7b97 GeoJSON \u7279\u5f81\u96c6\u5408\u7684\u7edd\u5bf9\u4e2d\u5fc3\u70b9\r\n- `centerOfMass` - \u8ba1\u7b97 GeoJSON \u5bf9\u8c61\u7684\u8d28\u5fc3\r\n- `centroid` - \u8ba1\u7b97 GeoJSON \u5bf9\u8c61\u7684\u51e0\u4f55\u4e2d\u5fc3\r\n- `midpoint` - \u8ba1\u7b97\u4e24\u4e2a GeoJSON \u70b9\u7279\u5f81\u4e4b\u95f4\u7684\u4e2d\u70b9\r\n- `pointOnFeature` - \u5728 GeoJSON \u7279\u5f81\u4e0a\u627e\u5230\u6700\u8fd1\u7684\u70b9\r\n\r\n**\u8fb9\u754c\u548c\u5305\u7edc\u8ba1\u7b97\uff1a**\r\n- `bbox` - \u8ba1\u7b97 GeoJSON \u5bf9\u8c61\u7684\u8fb9\u754c\u6846\r\n- `bboxPolygon` - \u5c06\u8fb9\u754c\u6846\u6570\u7ec4\u8f6c\u6362\u4e3a GeoJSON \u591a\u8fb9\u5f62\u7279\u5f81\r\n- `envelope` - \u8ba1\u7b97 GeoJSON \u5bf9\u8c61\u7684\u5305\u7edc\u591a\u8fb9\u5f62\uff08\u8fb9\u754c\u6846\u591a\u8fb9\u5f62\uff09\r\n- `square` - \u8ba1\u7b97\u5305\u542b\u8fb9\u754c\u6846\u7684\u6700\u5c0f\u6b63\u65b9\u5f62\u8fb9\u754c\u6846\r\n\r\n**\u9762\u79ef\u8ba1\u7b97\uff1a**\r\n- `area` - \u8ba1\u7b97 GeoJSON \u591a\u8fb9\u5f62\u7684\u5927\u5730\u6d4b\u91cf\u9762\u79ef\r\n\r\n**\u8def\u5f84\u548c\u76ee\u6807\u70b9\u8ba1\u7b97\uff1a**\r\n- `destination` - \u4ece\u8d77\u70b9\u6cbf\u7740\u6307\u5b9a\u65b9\u4f4d\u89d2\u79fb\u52a8\u6307\u5b9a\u8ddd\u79bb\u6765\u8ba1\u7b97\u76ee\u6807\u70b9\r\n- `rhumbDestination` - \u6cbf\u6052\u5411\u7ebf\u8ba1\u7b97\u76ee\u6807\u70b9\r\n- `greatCircle` - \u8ba1\u7b97\u4e24\u70b9\u4e4b\u95f4\u7684\u5927\u5706\u8def\u5f84\uff08\u7403\u9762\u4e0a\u6700\u77ed\u8def\u5f84\uff09\r\n- `polygonTangents` - \u8ba1\u7b97\u4ece\u7ed9\u5b9a\u70b9\u5230\u591a\u8fb9\u5f62\u7684\u4e24\u4e2a\u5207\u7ebf\u70b9\r\n\r\n### 2. \u7a7a\u95f4\u805a\u5408\u548c\u805a\u7c7b (aggregation)\r\n- `collect` - \u5c06\u70b9\u5c5e\u6027\u805a\u5408\u5230\u591a\u8fb9\u5f62\u4e2d\uff0c\u7528\u4e8e\u7edf\u8ba1\u548c\u6c47\u603b\u5206\u6790\r\n- `clustersDbscan` - \u4f7f\u7528 DBSCAN \u7b97\u6cd5\u8fdb\u884c\u70b9\u805a\u7c7b\uff0c\u8bc6\u522b\u5bc6\u96c6\u533a\u57df\r\n- `clustersKmeans` - \u4f7f\u7528 K-means \u7b97\u6cd5\u8fdb\u884c\u70b9\u805a\u7c7b\uff0c\u5c06\u70b9\u5212\u5206\u4e3a\u6307\u5b9a\u6570\u91cf\u7684\u7c07\r\n\r\n### 3. \u5e03\u5c14\u8fd0\u7b97 (booleans)\r\n- `booleanClockwise` - \u68c0\u67e5\u73af\u662f\u5426\u4e3a\u987a\u65f6\u9488\u65b9\u5411\r\n- `booleanContains` - \u68c0\u67e5\u7b2c\u4e00\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u5305\u542b\u7b2c\u4e8c\u4e2a\u51e0\u4f55\u56fe\u5f62\r\n- `booleanCrosses` - \u68c0\u67e5\u4e24\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u76f8\u4ea4\r\n- `booleanDisjoint` - \u68c0\u67e5\u4e24\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u4e0d\u76f8\u4ea4\r\n- `booleanEqual` - \u68c0\u67e5\u4e24\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u76f8\u7b49\r\n- `booleanOverlap` - \u68c0\u67e5\u4e24\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u91cd\u53e0\r\n- `booleanParallel` - \u68c0\u67e5\u4e24\u6761\u7ebf\u6bb5\u662f\u5426\u5e73\u884c\r\n- `booleanPointInPolygon` - \u68c0\u67e5\u70b9\u662f\u5426\u5728\u591a\u8fb9\u5f62\u5185\u90e8\r\n- `booleanPointOnLine` - \u68c0\u67e5\u70b9\u662f\u5426\u5728\u7ebf\u4e0a\r\n- `booleanWithin` - \u68c0\u67e5\u7b2c\u4e00\u4e2a\u51e0\u4f55\u56fe\u5f62\u662f\u5426\u5728\u7b2c\u4e8c\u4e2a\u51e0\u4f55\u56fe\u5f62\u5185\u90e8\r\n\r\n### 4. \u5206\u7c7b\u529f\u80fd (classification)\r\n- `nearestPoint` - \u67e5\u627e\u8ddd\u79bb\u76ee\u6807\u70b9\u6700\u8fd1\u7684\u70b9\u7279\u5f81\r\n\r\n### 5. \u5750\u6807\u8f6c\u6362\u548c\u6e05\u7406 (coordinate_mutation)\r\n- `clean_coords` - \u6e05\u7406 GeoJSON \u6570\u636e\u4e2d\u7684\u5197\u4f59\u5750\u6807\u70b9\r\n- `flip` - \u4ea4\u6362\u5750\u6807\u7684\u7ecf\u5ea6\u548c\u7eac\u5ea6\u4f4d\u7f6e\r\n- `rewind` - \u4fee\u6b63\u591a\u8fb9\u5f62\u7684\u73af\u65b9\u5411\uff0c\u786e\u4fdd\u5916\u73af\u9006\u65f6\u9488\u3001\u5185\u73af\u987a\u65f6\u9488\r\n- `round_number` - \u5bf9\u6570\u5b57\u8fdb\u884c\u56db\u820d\u4e94\u5165\uff0c\u63a7\u5236\u5c0f\u6570\u4f4d\u6570\r\n- `truncate` - \u622a\u65ad GeoJSON \u51e0\u4f55\u56fe\u5f62\u7684\u5750\u6807\u7cbe\u5ea6\r\n\r\n### 6. \u6570\u636e\u91c7\u6837\u548c\u5904\u7406 (data)\r\n- `sample` - \u4ece\u7279\u5f81\u96c6\u5408\u4e2d\u968f\u673a\u91c7\u6837\u6307\u5b9a\u6570\u91cf\u7684\u7279\u5f81\r\n\r\n### 7. \u7279\u5f81\u8f6c\u6362 (feature_conversion)\r\n- `combine` - \u5c06\u7279\u5f81\u96c6\u5408\u5408\u5e76\u4e3a\u590d\u5408\u51e0\u4f55\u56fe\u5f62\r\n- `explode` - \u5c06\u51e0\u4f55\u56fe\u5f62\u5206\u89e3\u4e3a\u5355\u72ec\u7684\u70b9\u7279\u5f81\r\n- `flatten` - \u5c06\u590d\u5408\u51e0\u4f55\u56fe\u5f62\u5c55\u5e73\u4e3a\u7b80\u5355\u51e0\u4f55\u56fe\u5f62\r\n- `line_to_polygon` - \u5c06\u7ebf\u8f6c\u6362\u4e3a\u591a\u8fb9\u5f62\r\n- `polygonize` - \u5c06\u7ebf\u51e0\u4f55\u56fe\u5f62\u8f6c\u6362\u4e3a\u591a\u8fb9\u5f62\r\n- `polygon_to_line` - \u5c06\u591a\u8fb9\u5f62\u8f6c\u6362\u4e3a\u7ebf\u51e0\u4f55\u56fe\u5f62\r\n\r\n### 8. \u7f51\u683c\u751f\u6210 (grid)\r\n- `hexGrid` - \u5728\u8fb9\u754c\u6846\u5185\u751f\u6210\u516d\u8fb9\u5f62\u7f51\u683c\uff0c\u7528\u4e8e\u7a7a\u95f4\u5206\u6790\u548c\u53ef\u89c6\u5316\r\n- `pointGrid` - \u5728\u8fb9\u754c\u6846\u5185\u751f\u6210\u70b9\u7f51\u683c\uff0c\u7528\u4e8e\u7a7a\u95f4\u91c7\u6837\u548c\u63d2\u503c\r\n- `squareGrid` - \u5728\u8fb9\u754c\u6846\u5185\u751f\u6210\u6b63\u65b9\u5f62\u7f51\u683c\uff0c\u7528\u4e8e\u7a7a\u95f4\u5206\u6790\u548c\u533a\u57df\u5212\u5206\r\n- `triangleGrid` - \u5728\u8fb9\u754c\u6846\u5185\u751f\u6210\u4e09\u89d2\u5f62\u7f51\u683c\uff0c\u7528\u4e8e\u7a7a\u95f4\u5206\u6790\u548c\u8868\u9762\u5efa\u6a21\r\n\r\n### 9. \u51e0\u4f55\u5bf9\u8c61\u521b\u5efa\u8f85\u52a9 (helper)\r\n- `featureCollection` - \u5c06\u591a\u4e2a\u5730\u7406\u7279\u5f81\u7ec4\u5408\u6210\u4e00\u4e2a\u7279\u5f81\u96c6\u5408\r\n- `feature` - \u521b\u5efa\u5355\u4e2a\u5730\u7406\u7279\u5f81\u5bf9\u8c61\r\n- `geometryCollection` - \u521b\u5efa\u51e0\u4f55\u56fe\u5f62\u96c6\u5408\u7279\u5f81\r\n- `lineString` - \u521b\u5efa\u7ebf\u7279\u5f81\u5bf9\u8c61\r\n- `multiLineString` - \u521b\u5efa\u591a\u7ebf\u7279\u5f81\u5bf9\u8c61\r\n- `multiPoint` - \u521b\u5efa\u591a\u70b9\u7279\u5f81\u5bf9\u8c61\r\n- `multiPolygon` - \u521b\u5efa\u591a\u591a\u8fb9\u5f62\u7279\u5f81\u5bf9\u8c61\r\n- `point` - \u521b\u5efa\u70b9\u7279\u5f81\u5bf9\u8c61\r\n- `polygon` - \u521b\u5efa\u591a\u8fb9\u5f62\u7279\u5f81\u5bf9\u8c61\r\n\r\n### 10. \u7a7a\u95f4\u63d2\u503c\u548c\u8868\u9762\u5206\u6790 (interpolation)\r\n- `interpolate` - \u4f7f\u7528\u53cd\u8ddd\u79bb\u6743\u91cd\u6cd5\u8fdb\u884c\u7a7a\u95f4\u63d2\u503c\r\n- `isobands` - \u4ece\u70b9\u7f51\u683c\u751f\u6210\u7b49\u503c\u5e26\uff0c\u7528\u4e8e\u521b\u5efa\u8fde\u7eed\u503c\u7684\u533a\u57df\u8868\u793a\r\n- `isolines` - \u4ece\u70b9\u7f51\u683c\u751f\u6210\u7b49\u503c\u7ebf\uff0c\u7528\u4e8e\u521b\u5efa\u8fde\u7eed\u503c\u7684\u7ebf\u72b6\u8868\u793a\r\n- `planepoint` - \u8ba1\u7b97\u70b9\u5728\u4e09\u89d2\u5f62\u5e73\u9762\u4e0a\u7684z\u503c\r\n- `tin` - \u4ece\u70b9\u96c6\u521b\u5efa\u4e0d\u89c4\u5219\u4e09\u89d2\u7f51\uff0c\u7528\u4e8e\u8868\u9762\u5efa\u6a21\u548c\u5730\u5f62\u5206\u6790\r\n\r\n### 11. \u7a7a\u95f4\u8fde\u63a5\u548c\u5c5e\u6027\u5173\u8054 (joins)\r\n- `pointsWithinPolygon` - \u67e5\u627e\u591a\u8fb9\u5f62\u5185\u90e8\u7684\u70b9\r\n- `tag` - \u4e3a\u70b9\u7279\u5f81\u6dfb\u52a0\u591a\u8fb9\u5f62\u5c5e\u6027\r\n\r\n### 12. \u6742\u9879\u5730\u7406\u64cd\u4f5c (misc)\r\n- `kinks` - \u67e5\u627e\u51e0\u4f55\u56fe\u5f62\u4e2d\u7684\u81ea\u76f8\u4ea4\u70b9\r\n- `line_arc` - \u521b\u5efa\u5706\u5f27\u7ebf\u6bb5\r\n- `line_chunk` - \u5c06\u7ebf\u5206\u5272\u4e3a\u6307\u5b9a\u957f\u5ea6\u7684\u7ebf\u6bb5\r\n- `line_intersect` - \u8ba1\u7b97\u4e24\u6761\u7ebf\u7684\u4ea4\u70b9\r\n- `line_overlap` - \u67e5\u627e\u4e24\u6761\u7ebf\u7684\u91cd\u53e0\u90e8\u5206\r\n- `line_segment` - \u5c06\u51e0\u4f55\u56fe\u5f62\u5206\u89e3\u4e3a\u7ebf\u6bb5\r\n- `line_slice` - \u5728\u7ebf\u6bb5\u4e0a\u622a\u53d6\u6307\u5b9a\u8d77\u70b9\u548c\u7ec8\u70b9\u4e4b\u95f4\u7684\u90e8\u5206\r\n- `line_slice_along` - \u6cbf\u7ebf\u6bb5\u957f\u5ea6\u622a\u53d6\u6307\u5b9a\u8ddd\u79bb\u8303\u56f4\u7684\u90e8\u5206\r\n- `line_split` - \u7528\u5206\u5272\u5668\u5c06\u7ebf\u6bb5\u5206\u5272\u4e3a\u591a\u6bb5\r\n- `mask` - \u4f7f\u7528\u63a9\u819c\u591a\u8fb9\u5f62\u88c1\u526a\u51e0\u4f55\u56fe\u5f62\r\n- `nearest_point_on_line` - \u627e\u5230\u7ebf\u4e0a\u8ddd\u79bb\u7ed9\u5b9a\u70b9\u6700\u8fd1\u7684\u4f4d\u7f6e\r\n- `sector` - \u521b\u5efa\u6247\u5f62\u591a\u8fb9\u5f62\u533a\u57df\r\n- `shortest_path` - \u8ba1\u7b97\u4e24\u70b9\u4e4b\u95f4\u7684\u6700\u77ed\u8def\u5f84\r\n- `unkink_polygon` - \u6d88\u9664\u591a\u8fb9\u5f62\u4e2d\u7684\u81ea\u76f8\u4ea4\u90e8\u5206\r\n\r\n### 13. \u968f\u673a\u5730\u7406\u6570\u636e\u751f\u6210 (random)\r\n- `randomPosition` - \u751f\u6210\u968f\u673a\u7684\u5730\u7406\u5750\u6807\u4f4d\u7f6e\r\n- `randomPoint` - \u751f\u6210\u968f\u673a\u70b9\u7279\u5f81\u96c6\u5408\r\n- `randomLineString` - \u751f\u6210\u968f\u673a\u7ebf\u7279\u5f81\u96c6\u5408\r\n- `randomPolygon` - \u751f\u6210\u968f\u673a\u591a\u8fb9\u5f62\u7279\u5f81\u96c6\u5408\r\n\r\n### 14. \u51e0\u4f55\u53d8\u6362\u548c\u64cd\u4f5c (transformation)\r\n- `bboxClip` - \u5c06 GeoJSON \u7279\u5f81\u88c1\u526a\u5230\u6307\u5b9a\u7684\u8fb9\u754c\u6846\u5185\r\n- `bezierSpline` - \u5c06\u76f4\u7ebf\u8f6c\u6362\u4e3a\u5e73\u6ed1\u7684\u8d1d\u585e\u5c14\u66f2\u7ebf\r\n- `buffer` - \u521b\u5efa\u7f13\u51b2\u533a\r\n- `circle` - \u6839\u636e\u4e2d\u5fc3\u70b9\u548c\u534a\u5f84\u521b\u5efa\u5706\u5f62\u533a\u57df\r\n- `clone` - \u521b\u5efa GeoJSON \u5bf9\u8c61\u7684\u5b8c\u6574\u526f\u672c\r\n- `concave` - \u8ba1\u7b97\u70b9\u96c6\u7684\u51f9\u5305\r\n- `convex` - \u8ba1\u7b97\u70b9\u96c6\u7684\u51f8\u5305\r\n- `difference` - \u8ba1\u7b97\u4e24\u4e2a\u591a\u8fb9\u5f62\u7684\u5dee\u5f02\r\n- `dissolve` - \u5408\u5e76\u76f8\u90bb\u7684\u591a\u8fb9\u5f62\r\n- `intersect` - \u8ba1\u7b97\u591a\u8fb9\u5f62\u7684\u4ea4\u96c6\r\n- `lineOffset` - \u8ba1\u7b97\u7ebf\u7684\u504f\u79fb\r\n- `simplify` - \u7b80\u5316 GeoJSON \u51e0\u4f55\r\n- `tesselate` - \u5c06\u591a\u8fb9\u5f62\u5206\u5272\u4e3a\u4e09\u89d2\u5f62\r\n- `transformRotate` - \u65cb\u8f6c GeoJSON \u5bf9\u8c61\r\n- `transformTranslate` - \u5e73\u79fb GeoJSON \u5bf9\u8c61\r\n- `transformScale` - \u7f29\u653e GeoJSON \u5bf9\u8c61\r\n- `union` - \u5408\u5e76\u4e24\u4e2a\u591a\u8fb9\u5f62\r\n- `voronoi` - \u751f\u6210 Voronoi \u591a\u8fb9\u5f62\r\n\r\n### 15. \u5355\u4f4d\u8f6c\u6362 (unit_conversion)\r\n- `bearingToAzimuth` - \u5c06\u65b9\u4f4d\u89d2\u8f6c\u6362\u4e3a\u65b9\u4f4d\u89d2\uff080-360\u5ea6\u8303\u56f4\uff09\r\n- `convertArea` - \u8f6c\u6362\u9762\u79ef\u5355\u4f4d\r\n- `convertLength` - \u8f6c\u6362\u957f\u5ea6\u5355\u4f4d\r\n- `degreesToRadians` - \u5c06\u89d2\u5ea6\u8f6c\u6362\u4e3a\u5f27\u5ea6\r\n- `lengthToRadians` - \u5c06\u957f\u5ea6\u8f6c\u6362\u4e3a\u5f27\u5ea6\u8ddd\u79bb\r\n- `lengthToDegrees` - \u5c06\u957f\u5ea6\u8f6c\u6362\u4e3a\u89d2\u5ea6\u8ddd\u79bb\r\n- `radiansToLength` - \u5c06\u5f27\u5ea6\u8ddd\u79bb\u8f6c\u6362\u4e3a\u957f\u5ea6\r\n- `radiansToDegrees` - \u5c06\u5f27\u5ea6\u8f6c\u6362\u4e3a\u89d2\u5ea6\r\n- `toMercator` - \u5c06\u5730\u7406\u5750\u6807\u8f6c\u6362\u4e3a\u58a8\u5361\u6258\u6295\u5f71\u5750\u6807\r\n- `toWgs84` - \u5c06\u58a8\u5361\u6258\u6295\u5f71\u5750\u6807\u8f6c\u6362\u4e3a\u5730\u7406\u5750\u6807\r\n\r\n## \u73af\u5883\u4f9d\u8d56\r\n- Python 3.10+\r\n- node 14.x\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT License\r\n\r\n## \u8d21\u732e\r\n\r\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\r\n\r\n## \u53c2\u8003\u6587\u6863\r\n- [Turf.js](https://turfjs.org/)\r\n- [FastMCP](https://gofastmcp.com/getting-started/welcome)\r\n\r\n## \u652f\u6301\r\n\r\n- \u6587\u6863: [GitHub Repository](https://github.com/es3154/turf-mcp)\r\n- \u95ee\u9898: [GitHub Issues](https://github.com/es3154/turf-mcp/issues)\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u57fa\u4e8e Turf.js \u6784\u5efa\u7684\u5730\u7406\u7a7a\u95f4\u5206\u6790 MCP \u670d\u52a1\u3002\u63d0\u4f9b\u7a7a\u95f4\u51e0\u4f55\u56fe\u5f62\u7684\u6d4b\u91cf\u3001\u7a7a\u95f4\u5173\u7cfb\u5224\u65ad\u3001\u5750\u6807\u8f6c\u6362\u4e0e\u504f\u79fb\u7b49\u6838\u5fc3\u529f\u80fd\u3002",
    "version": "0.2.1",
    "project_urls": {
        "Documentation": "https://github.com/zhangjy07/turf-mcp#readme",
        "Homepage": "https://github.com/zhangjy07/turf-mcp",
        "Repository": "https://github.com/zhangjy07/turf-mcp"
    },
    "split_keywords": [
        "geospatial",
        " analysis",
        " turf",
        " mcp",
        " geometry"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3762433bb7b40377654d9eb736f0b0061ba5924d1aa20af9a42469741ec76ace",
                "md5": "babd08fc9b5fe08997fc1af86bacdafb",
                "sha256": "b7f3b9c629ee520a40ba857c77853e51deb704855369546df83146f3a2bc83d7"
            },
            "downloads": -1,
            "filename": "turf_mcp-0.2.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "babd08fc9b5fe08997fc1af86bacdafb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 55694,
            "upload_time": "2025-10-23T09:33:52",
            "upload_time_iso_8601": "2025-10-23T09:33:52.873417Z",
            "url": "https://files.pythonhosted.org/packages/37/62/433bb7b40377654d9eb736f0b0061ba5924d1aa20af9a42469741ec76ace/turf_mcp-0.2.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e5a9e00df4f7d93e48bc68195ee7c487debe9f53ef9e647eb5b273677abdd207",
                "md5": "0d3cdfb24da205a5b757a3e5d37927da",
                "sha256": "10d151ab99c832694cef19119c6050e461e04f98fcb7232fabc445b061735fe8"
            },
            "downloads": -1,
            "filename": "turf_mcp-0.2.1.tar.gz",
            "has_sig": false,
            "md5_digest": "0d3cdfb24da205a5b757a3e5d37927da",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 41199,
            "upload_time": "2025-10-23T09:33:54",
            "upload_time_iso_8601": "2025-10-23T09:33:54.270621Z",
            "url": "https://files.pythonhosted.org/packages/e5/a9/e00df4f7d93e48bc68195ee7c487debe9f53ef9e647eb5b273677abdd207/turf_mcp-0.2.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-23 09:33:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zhangjy07",
    "github_project": "turf-mcp#readme",
    "github_not_found": true,
    "lcname": "turf-mcp"
}
        
Elapsed time: 0.58514s