Skip to main content
Glama

Turf-MCP

by es3154
MIT License
  • Apple
  • Linux
feature_conversion.py13.8 kB
# 特征转换函数 from fastmcp import FastMCP from turf_mcp.utils import call_js_script feature_conversion_mcp = FastMCP("feature_conversion") @feature_conversion_mcp.tool async def combine(feature_collection: str) -> str: """ 将特征集合合并为复合几何图形。 此功能将点、线或多边形特征集合分别合并为多点、多线或多边形复合几何图形。 Args: feature_collection: GeoJSON 特征集合 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 必须符合 GeoJSON FeatureCollection 规范 - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [19.026432, 47.49134]}}, {"type": "Feature", "geometry": {"type": "Point", "coordinates": [19.074497, 47.509548]}}]}' Returns: str: JSON 字符串格式的合并后 GeoJSON 特征集合 - 类型: GeoJSON FeatureCollection with MultiPoint, MultiLineString or MultiPolygon features - 格式: {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "...", "coordinates": [...]}}]} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> fc = '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [19.026432, 47.49134]}}, {"type": "Feature", "geometry": {"type": "Point", "coordinates": [19.074497, 47.509548]}}]}' >>> result = asyncio.run(combine(fc)) >>> print(result) '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "MultiPoint", "coordinates": [[19.026432, 47.49134], [19.074497, 47.509548]]}}]}' Notes: - 输入参数 feature_collection 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 点特征会合并为多点,线特征会合并为多线,多边形特征会合并为多多边形 - 依赖于 Turf.js 库和 Node.js 环境 """ js_script = f""" const turf = require('@turf/turf'); const featureCollection = JSON.parse('{feature_collection}'); const result = turf.combine(featureCollection); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}") @feature_conversion_mcp.tool async def explode(geojson: str) -> str: """ 将几何图形分解为单独的点特征。 此功能将给定的 GeoJSON 特征分解为所有顶点坐标的单独点特征集合。 Args: geojson: GeoJSON 对象 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 任何有效的 GeoJSON 对象 - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "Polygon", "coordinates": [[[-81, 41], [-88, 36], [-84, 31], [-80, 33], [-77, 39], [-81, 41]]]}' Returns: str: JSON 字符串格式的点特征集合 - 类型: GeoJSON FeatureCollection with Point features - 格式: {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [lng, lat]}}, ...]} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> polygon = '{"type": "Polygon", "coordinates": [[[-81, 41], [-88, 36], [-84, 31], [-80, 33], [-77, 39], [-81, 41]]]}' >>> result = asyncio.run(explode(polygon)) >>> print(result) '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [-81, 41]}}, ...]}' Notes: - 输入参数 geojson 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 返回所有几何图形顶点的点特征集合 - 依赖于 Turf.js 库和 Node.js 环境 """ js_script = f""" const turf = require('@turf/turf'); const geojson = JSON.parse('{geojson}'); const result = turf.explode(geojson); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}") @feature_conversion_mcp.tool async def flatten(geojson: str) -> str: """ 将复合几何图形展平为简单几何图形。 此功能将多几何图形(如多点、多线、多多边形)展平为对应的简单几何图形特征集合。 Args: geojson: GeoJSON 对象 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 任何有效的 GeoJSON 对象 - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "MultiPolygon", "coordinates": [[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]], [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]]}' Returns: str: JSON 字符串格式的展平后特征集合 - 类型: GeoJSON FeatureCollection with simple geometry features - 格式: {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "...", "coordinates": [...]}}, ...]} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> multi_polygon = '{"type": "MultiPolygon", "coordinates": [[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]], [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]]}' >>> result = asyncio.run(flatten(multi_polygon)) >>> print(result) '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]]}}, ...]}' Notes: - 输入参数 geojson 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 多几何图形会被展平为对应的简单几何图形集合 - 依赖于 Turf.js 库和 Node.js 环境 """ js_script = f""" const turf = require('@turf/turf'); const geojson = JSON.parse('{geojson}'); const result = turf.flatten(geojson); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}") @feature_conversion_mcp.tool async def line_to_polygon(line: str, options: str = None) -> str: """ 将线转换为多边形。 此功能将线几何图形转换为多边形几何图形,自动闭合线段的起点和终点。 Args: line: GeoJSON 线特征或几何图形 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 必须符合 GeoJSON LineString 或 MultiLineString 规范 - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "LineString", "coordinates": [[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]}' options: 可选参数配置 - 类型: str (JSON 字符串) 或 None - 可选字段: - properties: 传递给多边形的属性对象 - autoComplete: 是否自动完成线段闭合 - orderCoords: 是否重新排序坐标 - mutate: 是否修改原始线特征 - 示例: '{"properties": {"name": "converted polygon"}}' Returns: str: JSON 字符串格式的 GeoJSON Polygon 或 MultiPolygon 特征 - 类型: GeoJSON Feature with Polygon or MultiPolygon geometry - 格式: {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [...]}} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> line = '{"type": "LineString", "coordinates": [[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]}' >>> options = '{"properties": {"name": "converted polygon"}}' >>> result = asyncio.run(line_to_polygon(line, options)) >>> print(result) '{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]}}' Notes: - 输入参数 line 和 options 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 线会自动闭合形成多边形边界 - 依赖于 Turf.js 库和 Node.js 环境 """ options_param = options if options else '{}' js_script = f""" const turf = require('@turf/turf'); const line = JSON.parse('{line}'); const options = JSON.parse('{options_param}'); const result = turf.lineToPolygon(line, options); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}") @feature_conversion_mcp.tool async def polygonize(geojson: str) -> str: """ 将线几何图形转换为多边形。 此功能将线或多线几何图形转换为多边形几何图形集合,基于线的闭合区域创建多边形。 Args: geojson: GeoJSON 对象 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 必须符合 GeoJSON FeatureCollection, Geometry 或 Feature 规范,包含 LineString 或 MultiLineString - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]}}]}' Returns: str: JSON 字符串格式的多边形特征集合 - 类型: GeoJSON FeatureCollection with Polygon features - 格式: {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [...]}}, ...]} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> geojson = '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]}}]}' >>> result = asyncio.run(polygonize(geojson)) >>> print(result) '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]}}]}' Notes: - 输入参数 geojson 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 基于线的闭合区域创建多边形 - 依赖于 Turf.js 库和 Node.js 环境 """ js_script = f""" const turf = require('@turf/turf'); const geojson = JSON.parse('{geojson}'); const result = turf.polygonize(geojson); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}") @feature_conversion_mcp.tool async def polygon_to_line(polygon: str) -> str: """ 将多边形转换为线几何图形。 此功能将多边形或多边形几何图形转换为线或多线几何图形,提取多边形的边界。 Args: polygon: GeoJSON 多边形特征或几何图形 - 类型: str (JSON 字符串格式的 GeoJSON) - 格式: 必须符合 GeoJSON Polygon 或 MultiPolygon 规范 - 坐标系: WGS84 (经度在前,纬度在后) - 示例: '{"type": "Polygon", "coordinates": [[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]}' Returns: str: JSON 字符串格式的 GeoJSON LineString 或 MultiLineString 特征 - 类型: GeoJSON Feature with LineString or MultiLineString geometry - 格式: {"type": "Feature", "geometry": {"type": "LineString", "coordinates": [...]}} Raises: Exception: 当 JavaScript 执行失败、超时或输入数据格式错误时抛出异常 Example: >>> import asyncio >>> polygon = '{"type": "Polygon", "coordinates": [[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]}' >>> result = asyncio.run(polygon_to_line(polygon)) >>> print(result) '{"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]}}' Notes: - 输入参数 polygon 必须是有效的 JSON 字符串 - 坐标顺序为 [经度, 纬度] (WGS84 坐标系) - 提取多边形的边界作为线几何图形 - 依赖于 Turf.js 库和 Node.js 环境 """ js_script = f""" const turf = require('@turf/turf'); const polygon = JSON.parse('{polygon}'); const result = turf.polygonToLine(polygon); console.log(JSON.stringify(result)); """ try: return await call_js_script(js_script) except Exception as e: raise Exception(f"执行异常: {str(e)}")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/es3154/turf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server