GeoSpark
Verifiable geospatial tools: distances, topology, isochrones, Overture Maps, with sources.
我該用這個嗎
品質與安全性
發現項目(3)
- LOW在 calculate_distance 中
- LOW在 get_active_fires 中
- LOW在 sun_position 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"geospark": {
"url": "https://geospark.terrascout.app/mcp"
}
}
}遠端端點
https://geospark.terrascout.app/mcpstreamable-http它能做什麼
工具清單
工具(21)
🟢calculate_distance(place_a, place_b, point_a, point_b)
Exact geodesic distance between two places or geometries on the WGS84 ellipsoid. Use for any "how far" question instead of estimating. For NAMED places pass place_a and place_b; the server geocodes them, so never type coordinates for a place yourself. Use point_a/point_b only for coordinates the user gave or another tool returned. For lines and polygons the distance is between their nearest points. Returns metres and kilometres.
輸入結構描述
{
"type": "object",
"properties": {
"place_a": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)",
"title": "Place A"
},
"place_b": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)",
"title": "Place B"
},
"point_a": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned",
"title": "Point A"
},
"point_b": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned",
"title": "Point B"
}
},
"title": "calculate_distanceArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"distance_m": {
"description": "Geodesic distance in metres (WGS84 ellipsoid)",
"title": "Distance M",
"type": "number"
},
"distance_km": {
"title": "Distance Km",
"type": "number"
},
"places": {
"description": "Named places as geocoded on the server: query, display_name, coordinates [lon, lat]",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Places",
"type": "array"
}
},
"required": [
"distance_m",
"distance_km"
],
"title": "DistanceResult"
}🟢check_spatial_relationship(geometry_a, geometry_b, relationship)
Ground-truth topology: does geometry_a <relationship> geometry_b? Use instead of guessing containment, overlap or adjacency. Invalid geometries (for example self-intersecting polygons) are refused with the reason.
輸入結構描述
{
"type": "object",
"properties": {
"geometry_a": {
"additionalProperties": true,
"description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
"title": "Geometry A",
"type": "object"
},
"geometry_b": {
"additionalProperties": true,
"description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
"title": "Geometry B",
"type": "object"
},
"relationship": {
"enum": [
"contains",
"intersects",
"within",
"touches",
"crosses",
"overlaps",
"disjoint"
],
"title": "Relationship",
"type": "string"
}
},
"required": [
"geometry_a",
"geometry_b",
"relationship"
],
"title": "check_spatial_relationshipArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"relationship": {
"title": "Relationship",
"type": "string"
},
"holds": {
"description": "Whether geometry_a <relationship> geometry_b is true",
"title": "Holds",
"type": "boolean"
}
},
"required": [
"relationship",
"holds"
],
"title": "RelationshipResult"
}🟢spatial_operation(operation, geometry, radius_m)
Compute a buffer (shape-preserving, metres), geodesic area or length, centroid or convex hull. Returns the resulting geometry as GeoJSON with its measurements and units.
輸入結構描述
{
"type": "object",
"properties": {
"operation": {
"enum": [
"buffer",
"area",
"length",
"centroid",
"convex_hull"
],
"title": "Operation",
"type": "string"
},
"geometry": {
"additionalProperties": true,
"description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
"title": "Geometry",
"type": "object"
},
"radius_m": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Buffer radius in metres",
"title": "Radius M"
}
},
"required": [
"operation",
"geometry"
],
"title": "spatial_operationArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢geocode(query, limit)
Find coordinates for an address or place name (OpenStreetMap Nominatim). Check `geospark.warnings` for ambiguous names (e.g. "Springfield") and ask the user which one they mean, or add a region.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"description": "Address or place name",
"maxLength": 500,
"minLength": 1,
"title": "Query",
"type": "string"
},
"limit": {
"default": 5,
"maximum": 10,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "geocodeArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢reverse_geocode(latitude, longitude)
Find the address or place at a coordinate (OpenStreetMap Nominatim).
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"title": "reverse_geocodeArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢get_elevation(latitude, longitude)
Ground elevation in metres (Copernicus GLO-30, Open Elevation fallback), with its vertical datum and accuracy.
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"title": "get_elevationArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"latitude": {
"title": "Latitude",
"type": "number"
},
"longitude": {
"title": "Longitude",
"type": "number"
},
"elevation_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Elevation M"
},
"vertical_datum": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Vertical Datum"
},
"quality": {
"additionalProperties": true,
"description": "e.g. vertical_accuracy_le90_m",
"title": "Quality",
"type": "object"
},
"attribution": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Attribution"
}
},
"required": [
"latitude",
"longitude",
"elevation_m"
],
"title": "ElevationResult"
}🟢route(from_latitude, from_longitude, to_latitude, to_longitude)
Driving route between two points (OSRM over OpenStreetMap): line geometry, distance in metres and duration in seconds.
輸入結構描述
{
"type": "object",
"properties": {
"from_latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "From Latitude",
"type": "number"
},
"from_longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "From Longitude",
"type": "number"
},
"to_latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "To Latitude",
"type": "number"
},
"to_longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "To Longitude",
"type": "number"
}
},
"required": [
"from_latitude",
"from_longitude",
"to_latitude",
"to_longitude"
],
"title": "routeArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢get_weather(latitude, longitude, forecast_days)
Current weather and a daily forecast for a point (Open-Meteo, no key needed).
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"forecast_days": {
"default": 3,
"maximum": 16,
"minimum": 1,
"title": "Forecast Days",
"type": "integer"
}
},
"required": [
"latitude",
"longitude"
],
"title": "get_weatherArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"channel": {
"title": "Channel",
"type": "string"
},
"features": {
"description": "Records from the data source",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"total_results": {
"default": 0,
"title": "Total Results",
"type": "integer"
},
"query": {
"additionalProperties": true,
"title": "Query",
"type": "object"
}
},
"required": [
"channel",
"features"
],
"title": "DataResult"
}🟢get_air_quality(latitude, longitude)
Latest PM2.5, NO2, O3 from the nearest monitoring stations (OpenAQ; the server needs an OPENAQ_API_KEY), with each station's data licence.
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"title": "get_air_qualityArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"channel": {
"title": "Channel",
"type": "string"
},
"features": {
"description": "Records from the data source",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"total_results": {
"default": 0,
"title": "Total Results",
"type": "integer"
},
"query": {
"additionalProperties": true,
"title": "Query",
"type": "object"
}
},
"required": [
"channel",
"features"
],
"title": "DataResult"
}🟢get_active_fires(latitude, longitude, days)
Satellite active-fire detections near a point (NASA FIRMS; the server needs a FIRMS_MAP_KEY).
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"days": {
"default": 1,
"maximum": 2,
"minimum": 1,
"title": "Days",
"type": "integer"
}
},
"required": [
"latitude",
"longitude"
],
"title": "get_active_firesArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"channel": {
"title": "Channel",
"type": "string"
},
"features": {
"description": "Records from the data source",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"total_results": {
"default": 0,
"title": "Total Results",
"type": "integer"
},
"query": {
"additionalProperties": true,
"title": "Query",
"type": "object"
}
},
"required": [
"channel",
"features"
],
"title": "DataResult"
}🟢isochrone(latitude, longitude, minutes, mode)
Where can you get to from a point within N minutes on foot, by bike or by car? Returns one polygon per contour with its geodesic area (Valhalla over OpenStreetMap).
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"minutes": {
"default": [
10
],
"description": "Contour times, 1-60",
"items": {
"type": "integer"
},
"maxItems": 4,
"minItems": 1,
"title": "Minutes",
"type": "array"
},
"mode": {
"default": "walk",
"enum": [
"walk",
"bike",
"drive"
],
"title": "Mode",
"type": "string"
}
},
"required": [
"latitude",
"longitude"
],
"title": "isochroneArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢travel_time_matrix(origins, destinations, mode)
Network travel time (minutes) and distance (metres) from each origin to each destination. Note: points here are [latitude, longitude] pairs.
輸入結構描述
{
"type": "object",
"properties": {
"origins": {
"description": "[[lat, lon], ...]",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"maxItems": 5,
"minItems": 1,
"title": "Origins",
"type": "array"
},
"destinations": {
"description": "[[lat, lon], ...]",
"items": {
"maxItems": 2,
"minItems": 2,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"maxItems": 5,
"minItems": 1,
"title": "Destinations",
"type": "array"
},
"mode": {
"default": "walk",
"enum": [
"walk",
"bike",
"drive"
],
"title": "Mode",
"type": "string"
}
},
"required": [
"origins",
"destinations"
],
"title": "travel_time_matrixArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢overture_features(theme, latitude, longitude, radius_m, category, ...)
Open global map data from Overture Maps, no API key: points of interest (with categories), building footprints (height, floors, geodesic footprint area), road and path segments (geodesic length), or `divisions`, the administrative areas containing the point (country, region, city, neighbourhood). Results are nearest first, with distances in metres. Can take 5-20 s on a cold cache.
輸入結構描述
{
"type": "object",
"properties": {
"theme": {
"enum": [
"places",
"buildings",
"transportation",
"divisions"
],
"title": "Theme",
"type": "string"
},
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"radius_m": {
"default": 300,
"description": "Search radius in metres",
"exclusiveMinimum": 0,
"maximum": 2000,
"title": "Radius M",
"type": "number"
},
"category": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Places only, e.g. 'cafe'",
"title": "Category"
},
"limit": {
"anyOf": [
{
"maximum": 2000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Limit"
}
},
"required": [
"theme",
"latitude",
"longitude"
],
"title": "overture_featuresArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢transform_coordinates(source_crs, target_crs, coordinates, epoch)
Convert coordinates between CRSs as the official transformation does: GDA94 to GDA2020, MGA zones, British National Grid (OSTN15), NAD27 to NAD83 (NADCON), ITRF at an epoch, and any other EPSG pair. Uses national grids (downloaded once), refuses PROJ's ballpark approximations, and returns the operation and its stated accuracy. Use this instead of applying datum parameters yourself.
輸入結構描述
{
"type": "object",
"properties": {
"source_crs": {
"description": "CRS name or EPSG code, e.g. 'GDA94 / MGA zone 55' or EPSG:28355",
"maxLength": 100,
"title": "Source Crs",
"type": "string"
},
"target_crs": {
"description": "CRS name or EPSG code, e.g. 'GDA2020 / MGA zone 55' or EPSG:7855",
"maxLength": 100,
"title": "Target Crs",
"type": "string"
},
"coordinates": {
"description": "[x, y] or [x, y, z]: [lon, lat] or [easting, northing]",
"items": {
"items": {
"type": "number"
},
"type": "array"
},
"maxItems": 1000,
"minItems": 1,
"title": "Coordinates",
"type": "array"
},
"epoch": {
"anyOf": [
{
"maximum": 2100,
"minimum": 1900,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Decimal year, for ITRF/ATRF frames",
"title": "Epoch"
}
},
"required": [
"source_crs",
"target_crs",
"coordinates"
],
"title": "transform_coordinatesArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"coordinates": {
"description": "Transformed points, in the target CRS's x/y(/z) order",
"items": {
"items": {
"type": "number"
},
"type": "array"
},
"title": "Coordinates",
"type": "array"
},
"source_crs": {
"title": "Source Crs",
"type": "string"
},
"target_crs": {
"title": "Target Crs",
"type": "string"
},
"method": {
"description": "The EPSG operation used",
"title": "Method",
"type": "string"
},
"accuracy_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "The operation's stated accuracy; null for an exact conversion",
"title": "Accuracy M"
},
"grids": {
"description": "Official grid files the operation used",
"items": {
"type": "string"
},
"title": "Grids",
"type": "array"
},
"area_of_use": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Area Of Use"
}
},
"required": [
"coordinates",
"source_crs",
"target_crs",
"method",
"accuracy_m"
],
"title": "TransformResult"
}🟢convert_height(latitude, longitude, height_m, from_reference, to_reference)
Convert a height between the ellipsoid (GNSS, drones) and a national height datum with the official geoid model: AHD (AUSGeoid2020), ODN (OSGM15), NZVD2016 (NZGeoid2016), NAVD88 (GEOID18), or global EGM2008. Never estimate a geoid separation from memory: it is often tens of metres and varies by metres across a region.
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"height_m": {
"description": "The height to convert, in metres",
"maximum": 10000,
"minimum": -1000,
"title": "Height M",
"type": "number"
},
"from_reference": {
"description": "'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008",
"title": "From Reference",
"type": "string"
},
"to_reference": {
"description": "'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008",
"title": "To Reference",
"type": "string"
}
},
"required": [
"latitude",
"longitude",
"height_m",
"from_reference",
"to_reference"
],
"title": "convert_heightArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"height_m": {
"title": "Height M",
"type": "number"
},
"from_reference": {
"title": "From Reference",
"type": "string"
},
"to_reference": {
"title": "To Reference",
"type": "string"
},
"geoid_model": {
"title": "Geoid Model",
"type": "string"
},
"separation_m": {
"description": "Ellipsoidal height minus the datum height at this point",
"title": "Separation M",
"type": "number"
},
"method": {
"title": "Method",
"type": "string"
},
"accuracy_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Accuracy M"
},
"grids": {
"items": {
"type": "string"
},
"title": "Grids",
"type": "array"
}
},
"required": [
"height_m",
"from_reference",
"to_reference",
"geoid_model",
"separation_m",
"method",
"accuracy_m"
],
"title": "HeightResult"
}🟢sun_position(latitude, longitude, time, tz, object_height_m)
The Sun's apparent elevation and azimuth (from true north) at a place and time, and the shadow a vertical object casts on level ground (NOAA solar position, refraction included).
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"time": {
"description": "ISO 8601, with a UTC offset (2026-12-21T12:00:00+11:00) or local with tz",
"maxLength": 40,
"title": "Time",
"type": "string"
},
"tz": {
"anyOf": [
{
"maxLength": 60,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "IANA time zone for a local time, e.g. Australia/Melbourne",
"title": "Tz"
},
"object_height_m": {
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 10000,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Height of a vertical object, for its shadow",
"title": "Object Height M"
}
},
"required": [
"latitude",
"longitude",
"time"
],
"title": "sun_positionArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"time": {
"title": "Time",
"type": "string"
},
"elevation_deg": {
"description": "Apparent elevation above a flat horizon, refraction included",
"title": "Elevation Deg",
"type": "number"
},
"azimuth_deg": {
"description": "Clockwise from true north",
"title": "Azimuth Deg",
"type": "number"
},
"declination_deg": {
"title": "Declination Deg",
"type": "number"
},
"equation_of_time_min": {
"title": "Equation Of Time Min",
"type": "number"
},
"above_horizon": {
"title": "Above Horizon",
"type": "boolean"
},
"method": {
"title": "Method",
"type": "string"
},
"shadow_length_m": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "On level ground, for object_height_m",
"title": "Shadow Length M"
},
"shadow_direction_deg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Direction the shadow points, from true north",
"title": "Shadow Direction Deg"
}
},
"required": [
"time",
"elevation_deg",
"azimuth_deg",
"declination_deg",
"equation_of_time_min",
"above_horizon",
"method"
],
"title": "SunResult"
}🟢sun_times(latitude, longitude, date, tz, terrain)
Sunrise, solar noon, sunset and day length on a date for a flat horizon; with terrain=True, also the hours of direct sun once hills are taken into account.
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"date": {
"description": "Local date, YYYY-MM-DD",
"maxLength": 10,
"title": "Date",
"type": "string"
},
"tz": {
"anyOf": [
{
"maxLength": 60,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "IANA time zone, e.g. Australia/Melbourne; default UTC",
"title": "Tz"
},
"terrain": {
"default": false,
"description": "Also count hours of direct sun above the terrain horizon (reads the DEM; ~10-60 s)",
"title": "Terrain",
"type": "boolean"
}
},
"required": [
"latitude",
"longitude",
"date"
],
"title": "sun_timesArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"date": {
"title": "Date",
"type": "string"
},
"time_zone": {
"title": "Time Zone",
"type": "string"
},
"sunrise": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sunrise"
},
"solar_noon": {
"title": "Solar Noon",
"type": "string"
},
"sunset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sunset"
},
"day_length_h": {
"title": "Day Length H",
"type": "number"
},
"solar_noon_elevation_deg": {
"title": "Solar Noon Elevation Deg",
"type": "number"
},
"terrain_hours": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Hours of direct sun above the terrain horizon",
"title": "Terrain Hours"
},
"first_direct_sun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Direct Sun"
},
"last_direct_sun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Direct Sun"
},
"method": {
"title": "Method",
"type": "string"
}
},
"required": [
"date",
"time_zone",
"sunrise",
"solar_noon",
"sunset",
"day_length_h",
"solar_noon_elevation_deg",
"method"
],
"title": "SunTimesResult"
}🟢terrain_horizon(latitude, longitude, observer_height_m, max_distance_m, step_deg)
The skyline the terrain makes around a point: for each azimuth, the elevation angle of the horizon and how far away the blocking terrain is (Copernicus 30 m DEM, Earth curvature and refraction). Use for solar-panel shading, valley sunlight, or what hills hide. ~10-60 s.
輸入結構描述
{
"type": "object",
"properties": {
"latitude": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Longitude",
"type": "number"
},
"observer_height_m": {
"default": 1.5,
"description": "Eye or sensor height above ground",
"maximum": 500,
"minimum": 0,
"title": "Observer Height M",
"type": "number"
},
"max_distance_m": {
"default": 20000,
"maximum": 50000,
"minimum": 500,
"title": "Max Distance M",
"type": "number"
},
"step_deg": {
"default": 5,
"description": "Azimuth spacing; must divide 360",
"maximum": 10,
"minimum": 0.5,
"title": "Step Deg",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"title": "terrain_horizonArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"latitude": {
"title": "Latitude",
"type": "number"
},
"longitude": {
"title": "Longitude",
"type": "number"
},
"ground_elevation_m": {
"title": "Ground Elevation M",
"type": "number"
},
"observer_height_m": {
"title": "Observer Height M",
"type": "number"
},
"max_distance_m": {
"title": "Max Distance M",
"type": "number"
},
"azimuths_deg": {
"items": {
"type": "number"
},
"title": "Azimuths Deg",
"type": "array"
},
"horizon_elevation_deg": {
"description": "Skyline elevation angle at each azimuth",
"items": {
"type": "number"
},
"title": "Horizon Elevation Deg",
"type": "array"
},
"obstruction_distance_m": {
"items": {
"type": "number"
},
"title": "Obstruction Distance M",
"type": "array"
},
"highest": {
"additionalProperties": {
"type": "number"
},
"title": "Highest",
"type": "object"
},
"method": {
"title": "Method",
"type": "string"
}
},
"required": [
"latitude",
"longitude",
"ground_elevation_m",
"observer_height_m",
"max_distance_m",
"azimuths_deg",
"horizon_elevation_deg",
"obstruction_distance_m",
"highest",
"method"
],
"title": "HorizonResult"
}🟢line_of_sight(lat_a, lon_a, lat_b, lon_b, height_a_m, ...)
Whether A and B can see each other over the terrain (Copernicus 30 m DEM, curvature and refraction), the minimum clearance and where it occurs; with frequency_mhz, the first Fresnel zone clearance of a radio link (60% clear is the usual rule).
輸入結構描述
{
"type": "object",
"properties": {
"lat_a": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Lat A",
"type": "number"
},
"lon_a": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Lon A",
"type": "number"
},
"lat_b": {
"description": "Latitude in degrees (WGS84)",
"maximum": 90,
"minimum": -90,
"title": "Lat B",
"type": "number"
},
"lon_b": {
"description": "Longitude in degrees (WGS84)",
"maximum": 180,
"minimum": -180,
"title": "Lon B",
"type": "number"
},
"height_a_m": {
"default": 1.5,
"description": "Height above ground at A (e.g. a mast)",
"maximum": 1000,
"minimum": 0,
"title": "Height A M",
"type": "number"
},
"height_b_m": {
"default": 1.5,
"description": "Height above ground at B",
"maximum": 1000,
"minimum": 0,
"title": "Height B M",
"type": "number"
},
"frequency_mhz": {
"anyOf": [
{
"maximum": 300000,
"minimum": 1,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "For a radio link: report first Fresnel zone clearance",
"title": "Frequency Mhz"
}
},
"required": [
"lat_a",
"lon_a",
"lat_b",
"lon_b"
],
"title": "line_of_sightArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"default": "ok",
"enum": [
"ok",
"partial",
"cannot_answer"
],
"title": "Status",
"type": "string"
},
"units": {
"additionalProperties": {
"type": "string"
},
"description": "Unit of each numeric field",
"title": "Units",
"type": "object"
},
"warnings": {
"description": "Caveats to tell the user",
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"provenance": {
"description": "Source, licence, attribution, retrieval time and method",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Provenance",
"type": "array"
},
"visible": {
"title": "Visible",
"type": "boolean"
},
"distance_m": {
"title": "Distance M",
"type": "number"
},
"bearing_deg": {
"title": "Bearing Deg",
"type": "number"
},
"min_clearance_m": {
"description": "Smallest gap between the sight line and the terrain; negative = blocked",
"title": "Min Clearance M",
"type": "number"
},
"min_clearance_at": {
"additionalProperties": {
"type": "number"
},
"title": "Min Clearance At",
"type": "object"
},
"fresnel": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Fresnel"
},
"method": {
"title": "Method",
"type": "string"
}
},
"required": [
"visible",
"distance_m",
"bearing_deg",
"min_clearance_m",
"min_clearance_at",
"method"
],
"title": "LineOfSightResult"
}🟢location_report(location, radius_m)
A dossier for a place: address, elevation, weather, and nearby amenities with exact distances, as a GeoJSON map layer listing every data source used. Takes ~10-30 s.
輸入結構描述
{
"type": "object",
"properties": {
"location": {
"description": "Place to analyse",
"maxLength": 500,
"minLength": 1,
"title": "Location",
"type": "string"
},
"radius_m": {
"default": 1000,
"exclusiveMinimum": 0,
"maximum": 10000,
"title": "Radius M",
"type": "number"
}
},
"required": [
"location"
],
"title": "location_reportArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}🟢select_site(within, near, avoid, facility_type, radius_m)
Rank candidate sites in an area by geodesic distance to amenities you want nearby and away from ones to avoid (OpenStreetMap data). Takes ~10-30 s.
輸入結構描述
{
"type": "object",
"properties": {
"within": {
"description": "City or neighbourhood",
"maxLength": 500,
"minLength": 1,
"title": "Within",
"type": "string"
},
"near": {
"default": [],
"description": "Amenity types to be close to",
"items": {
"type": "string"
},
"maxItems": 10,
"title": "Near",
"type": "array"
},
"avoid": {
"default": [],
"description": "Amenity types to stay away from",
"items": {
"type": "string"
},
"maxItems": 10,
"title": "Avoid",
"type": "array"
},
"facility_type": {
"default": "restaurant",
"maxLength": 100,
"title": "Facility Type",
"type": "string"
},
"radius_m": {
"default": 3000,
"exclusiveMinimum": 0,
"maximum": 10000,
"title": "Radius M",
"type": "number"
}
},
"required": [
"within"
],
"title": "select_siteArguments"
}輸出結構描述
{
"type": "object",
"properties": {
"type": {
"const": "FeatureCollection",
"default": "FeatureCollection",
"title": "Type",
"type": "string"
},
"features": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Features",
"type": "array"
},
"bbox": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Bbox"
},
"geospark": {
"additionalProperties": true,
"title": "Geospark",
"type": "object"
}
},
"required": [
"features"
],
"description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance.",
"title": "FeatureCollection"
}社群
證據