GeoJSON
What it is
The coverage grid, exported as a standard FeatureCollection that loads directly
into mapping tools without transformation.
One Point feature per grid point, with the coverage statistics as properties.
A complete feature
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-180.0, -90.0]
},
"properties": {
"coverage_percent": 0.0,
"max_fold": 0,
"max_gap_seconds": 0.0,
"mean_fold": 0.0,
"mean_gap_seconds": 0.0,
"outage_count": 0
}
}Real output. The example is the South Pole, uncovered by a 53-degree constellation.
Coordinates are longitude first
GeoJSON coordinates are [longitude, latitude]. Every other surface in this
software lists latitude first.
[-180.0, -90.0] is longitude -180, latitude -90: the South Pole. Read the
other way it is latitude -180, which is not a valid latitude at all, and a tool
that accepts it will place your data somewhere meaningless.
The ordering is mandated by the GeoJSON specification, not chosen here. It is the standard cause of a map with everything transposed.
Properties
| Parameter | Type | Unit | Default | Required | Description |
|---|---|---|---|---|---|
coverage_percent | number | percent | — | No | Fraction of the window this point was covered. |
max_fold | integer | count | — | No | Most satellites visible at once from this point. |
mean_fold | number | count | — | No | Average number visible. |
max_gap_seconds | number | s | — | No | Longest interval with no satellite visible. |
mean_gap_seconds | number | s | — | No | Average gap length. |
outage_count | integer | count | — | No | Number of distinct gaps. |
The export carries more per point than the coverage response prints.
max_fold, mean_fold, mean_gap_seconds, and outage_count appear here and
not in the console summary.
If you want per-point redundancy or outage counts rather than aggregate statistics, this is where they are.
Producing it
The exporter takes the analysis object that a coverage run returns, not a
constellation identifier. It is a second step:
# 1. Run the analysis.
curl -s -X POST http://127.0.0.1:8080/coverage \
-H 'content-type: application/json' \
-d '{"constellation_id":"gj","duration_hours":1.0,
"step_seconds":600.0,"grid_deg":45.0}' > cov.json
# 2. Wrap its `analysis` object and export.
python3 -c "import json;print(json.dumps({'analysis':json.load(open('cov.json'))['analysis']}))" \
| curl -s -X POST http://127.0.0.1:8080/export/coverage/geojson \
-H 'content-type: application/json' --data-binary @- > coverage.geojsonPassing a constellation_id instead fails:
Failed to deserialize the JSON body into the target type: missing field `analysis`Points, not polygons
Each feature is a Point at a grid node, not a polygon covering the cell it
represents.
That matters for rendering. A point layer at 45-degree spacing draws 40 dots, not a filled map, and most mapping tools will need either a symbol size that implies the cell or an interpolation step to produce a surface.
It also matters for interpretation: the statistic belongs to the node, and nothing is claimed about the area between nodes. A hole smaller than the grid spacing falls between points and is invisible.
Grid size and file size
The grid is two-dimensional, so the feature count grows with the square of resolution. At 45 degrees the example produced 40 features; at 5 degrees the same world grid produces 2664, and at 2 degrees roughly 16,000.
A fine grid is what you want for a quoted result and is often more than a browser-based map will render smoothly. Export coarse for a picture and fine for a number.
See also
POST /coveragefor the analysis this exports.- Coverage and revisit for how to read the statistics.
main (pre-release)