# Data sources, licences and gaps

Written 12.10.2026 for the GO2DataWorks data-centre and subsea atlas. Generated from the build outputs by `pipeline/write_data_sources.py`; the numbers below are the numbers in `data/`.

**What the atlas claims:** 3,653 facilities mapped from open data (OpenStreetMap). It does not claim to show every data centre in the world. Cables: 468 subsea cable lines from OpenStreetMap, which is a partial set (see Gaps).

## 1. What is in the public build

| Layer | Source | Licence | In the public build |
|---|---|---|---|
| Data centres | OpenStreetMap, `telecom=data_center` or `building=data_center`, via Overpass | ODbL 1.0 | Yes (3,653 sites) |
| Subsea cables | OpenStreetMap undersea telecom lines, via Overpass | ODbL 1.0 | Yes (468 lines, 184 derived landing points) |
| Basemap | Natural Earth 1:50m and 1:10m admin-0 countries, 1:10m populated places (place names for nearest-city only) | Public domain | Yes |
| Globe renderer | MapLibre GL JS 5.24.0, vendored in `vendor/` | BSD-3-Clause | Yes |
| Fonts | Archivo, IBM Plex Mono (copied from the lab's `vendor/fonts`) | SIL OFL 1.1 | Yes |
| Data centres | PeeringDB `fac` | AUP: no commercial display, no marketing lists | **No.** Measured for overlap only, nothing shipped |
| Subsea cables | TeleGeography submarine cable map | See section 5 | **No.** Not used at all |

Attribution text, shown on screen in the app and in the video: **© OpenStreetMap contributors (ODbL)**. Base map: Natural Earth. Rendered with MapLibre.

The JSON files in `data/` are a derived database of OpenStreetMap data. If the atlas is published, those files must be offered under the ODbL as well (share-alike); the rendered map is a produced work and needs the attribution only. `data/LICENSE.txt` says this.

## 2. Data centres from OpenStreetMap

Query (Overpass QL, one request per region, sequential, regions overlap on purpose and are de-duplicated on object id):

```
(nwr["telecom"="data_center"](S,W,N,E); nwr["building"="data_center"](S,W,N,E);); out center tags;
```

Query date: 12.10.2026. OSM database timestamps (osm_base) of the answers: 2026-10-12T09:27:36Z, 2026-10-12T09:30:49Z, 2026-10-12T09:31:56Z, 2026-10-12T10:25:36Z, 2026-10-12T10:27:35Z, 2026-10-12T10:28:35Z, 2026-10-12T10:29:39Z, 2026-10-12T10:32:46Z (UTC). Endpoint: `overpass-api.de`.

| Region box | Elements returned |
|---|---|
| africa | 130 |
| asia_east | 478 |
| asia_south_west | 246 |
| europe | 1,834 |
| greenland_gap | 0 |
| indian_ocean | 4 |
| north_america | 1,997 |
| oceania | 175 |
| pacific_east | 0 |
| russia_north_east | 11 |
| south_america | 185 |
| sum of regions | 5,060 |
| unique after dropping overlap between boxes | 4,886 |
| cross-check: one global count of the same union | 4,889 |

Completeness check: the regional boxes returned 4,886 unique objects; a single global count of the same two tags returned 4,889 (-3). The boxes cover the data set.

Processing, in order:

1. Dropped objects tagged as not operating (`disused:*`, `abandoned:*`, `construction`, `proposed`): 39. Objects with no coordinates: 0. Kept: 4,847 (4,662 carry `telecom=data_center`, 1,286 carry `building=data_center`, 1,101 carry both).
2. Merged duplicates of one site: objects within 50 m always, within 300 m when the names are similar or the operator is the same. 375 pairs at 50 m, 818 pairs at 300 m. This also folds multi-building campuses of one operator into one site. Result: **3,654 sites**.
3. Country by point-in-polygon on Natural Earth 50m (nearest polygon within 0.35 degrees for ports and piers: 70 sites). Sites with no country polygon: 1.
4. City: the OSM `addr:*` tag where present (1,313 sites), otherwise the nearest Natural Earth place of 15,000 people or more within 40 km, shown as "nearest place" on the card (2,069 sites); 271 sites have no city.
5. Name present on 2,825 of 3,653 sites; operator (`operator` or `brand` tag) on 2,133.

**Final: 3,653 facilities mapped from open data**, in 116 countries or territories (Natural Earth admin-0 units, so dependencies such as Hong Kong or Puerto Rico count on their own).

| Continent (Natural Earth assignment) | Facilities |
|---|---|
| Europe | 1,385 |
| North America | 1,350 |
| Asia | 570 |
| South America | 152 |
| Oceania | 133 |
| Africa | 62 |
| Seven seas (open ocean) | 1 |
| total | 3,653 |

Top countries: United States of America 1,216; France 305; United Kingdom 235; Germany 208; China 125; Australia 104; Japan 104; Netherlands 98; Canada 82; India 67; Ireland 64; Russia 57; Italy 51; Singapore 49; Brazil 46.

## 3. PeeringDB: what its policy allows, and what was done

Read on 12.10.2026 at https://www.peeringdb.com/aup (page footer: PeeringDB 2.83.0, © 2004-2026). It has no licence grant for display on a commercial site. In substance:

- No part of the data may be reproduced, stored in a retrieval system or transmitted without PeeringDB's permission, except for "Internet operational purposes" that PeeringDB approves.
- Any use to "target advertising or similar activities" is forbidden. The data may not be passed on in bulk to anyone else without approval.
- Downloading the full database is for "Internet operational issues": network troubleshooting, abuse reporting, and Internet research and analysis. It states that this "would not include compiling marketing lists, demographic mapping, or any other commercial application".
- PeeringDB's Data Ownership Policy (06.04.2020, v1.0) repeats that the AUP "prevents the database being used for commercial purposes". No API rate limit is stated on the AUP page; the one anonymous API call made here was answered immediately.

**Consequence:** PeeringDB data is not allowed on a commercial website, in the video, or in the sales CSV (a marketing list) without written permission. It is not in any shipped file.

What was measured (research on coverage only; one anonymous call to `https://www.peeringdb.com/api/fac?depth=0`; the raw response was deleted once the overlap was computed, and no PeeringDB record was ever written to the atlas folder or used for the CSV; `eval_peeringdb.py` documents the method and needs a fresh call to re-run):

- PeeringDB facilities returned: **5,885** (605 without coordinates, 5,280 with).
- Of those with coordinates, 1,304 match an OSM site by the same rule as step 2 (50 m, or 300 m with a similar name or operator); 3,976 have no OSM counterpart.
- A merged set would have been about 7,629 facilities against the 3,653 shipped. That gap is the price of staying licence-clean.
- To use PeeringDB: ask support@peeringdb.com for written permission for this specific use (a public, commercial map). Until the answer is yes, leave it out.

## 4. Subsea cables from OpenStreetMap

Tags researched (OSM wiki, taginfo, 12.10.2026): current tagging for a telecom cable is `communication=line` + `location=underwater`; `man_made=submarine_cable` is deprecated but 196 objects still use it; `power=cable` + `location=underwater` is power and is excluded; `seamark:type=cable_submarine` (categories telephone, telegraph, data) comes from nautical-chart mapping and gives short coastal pieces. No tag for a cable landing station is in use (taginfo: `telecom=landing_point` 0, `man_made=cable_landing` 0), so landing points are derived.

| Overpass file | Objects |
|---|---|
| osm_cables_comm_underwater | 375 |
| osm_cables_man_made | 195 |
| osm_cables_seamark_telecom | 750 |
| osm_cables_telecom_underwater | 2 |
| unique objects | 1,314 |

Query date 12.10.2026, osm_base 2026-10-12T09:18:36Z, 2026-10-12T10:31:46Z, 2026-10-12T10:33:50Z. The `man_made` query was run on `way` only: the `nwr` version kept timing out on the busy server, so the one relation that carries the tag was not fetched.

Filters: out of service or not built: 33, power cable: 32, shorter than 500m: 603, no telecom tag type unknown may be power: 177. Any tag value mentioning TeleGeography or submarinecablemap would be dropped; none was found. Antimeridian crossings are split; lines are simplified to 0.003 degrees.

Positive telecom evidence is required (`communication=line`, `telecom=line|cable`, or a telephone / telegraph / fibre / data seamark category). That removes 177 objects that carry only the deprecated `man_made=submarine_cable` tag: the tag does not say telecom or power, and a power cable drawn as fibre would be wrong. Lines under 500 m are dropped (603, mostly chart fragments).

**Result: 468 cable lines** (128 distinct names, 291 unnamed pieces), 111,610 km in total, 30 lines of 1,000 km or more (24 named systems), 10 lines that OSM itself marks `note=Speculative route` (drawn dashed). 184 landing points derived from cable ends within about 13 km of land, merged within 9 km.

The fly-along follows **Tata Atlantic South** (OSM way 78444071, 127 nodes, about 5,512 km as mapped), New Jersey to Saunton Sands in Devon. OSM marks that route speculative and the chart source on it dates from 2010, so the video says "as mapped in OpenStreetMap, indicative, not a survey". Whether the real cable lands at that exact spot is not claimed.

## 5. TeleGeography

Not used, not downloaded, no internal layer built. Hriso's brief calls the data CC BY-NC-SA. A web search on 12.10.2026 did not confirm that wording: TeleGeography's citation page puts its published maps under CC BY-SA 4.0, and says the underlying data is available to paying subscribers through an annual licence. Either way the cable geometry is not free to put on a commercial page. Open question for TeleGeography (info@telegeography.com): a written licence for a map of a few hundred cable systems on go2data-works.com.

## 6. Basemap

Natural Earth vector data, public domain (the repository README says so), taken from the `nvkelso/natural-earth-vector` mirror (VERSION file 5.2.0-pre, master on 12.10.2026): `ne_50m_admin_0_countries` for the globe, `ne_10m_admin_0_countries` clipped to Europe and the US east coast for the zoomed detail layer, `ne_10m_populated_places_simple` only to name the nearest place. No tiles, no keys, no network calls at run time. OpenFreeMap was checked: its terms of service are silent on commercial use and attribution, so it was not used.

## 7. Overpass usage

The public Overpass instance's policy asks for under 10,000 queries and 1 GB per day, and says commercial use should use self-hosted or paid servers. This build ran 17 successful queries (11 data-centre regions, 4 cable queries, 1 count query and the first 375-object cable query), one at a time, a few MB in total, with a pause of at least 20 s between them and retries with growing back-off after 504 answers from a busy server. For a refresh, use a Geofabrik extract and `osmium` instead of Overpass.

## 8. Size

| File | Group | Raw bytes | Gzip bytes |
|---|---|---|---|
| index.html | first load | 9,419 | 3,280 |
| atlas.css | first load | 16,238 | 4,545 |
| atlas.js | first load | 35,823 | 11,105 |
| vendor/maplibre-gl.js | first load | 1,056,837 | 275,161 |
| vendor/maplibre-gl.css | first load | 70,024 | 10,078 |
| vendor/go2-mark-C1.svg | first load | 658 | 376 |
| fonts/archivo-go2.woff2 | first load | 45,704 | 45,737 |
| fonts/IBMPlexMono-400.woff2 | first load | 14,708 | 14,731 |
| fonts/IBMPlexMono-500.woff2 | first load | 14,888 | 14,911 |
| data/facilities.json | first load | 269,912 | 111,667 |
| data/countries.json | first load | 9,361 | 3,359 |
| data/basemap.json | first load | 697,850 | 218,824 |
| img/poster-tall.webp | first load, one per screen | 29,976 | 29,294 |
| img/poster-wide.webp | first load, one per screen | 25,620 | 24,226 |
| data/cables.json | lazy | 117,900 | 38,781 |
| data/basemap-detail.json | lazy | 714,772 | 214,302 |
| atlas-cinema.js | cinema only | 17,558 | 6,418 |
| **first load total** | | 2,271,398 | 743,068 |
| **everything the app can load (without cinema)** | | 3,129,690 | 1,020,377 |

## 9. Known gaps

- OpenStreetMap coverage of data centres is uneven by country and by mapper activity. Many sites have no name or operator. Some real facilities are missing and a few objects may be mistagged. This is a map of what is mapped.
- The merge rule folds campuses of one operator into one site, so counts are sites, not buildings.
- Cables: OSM has far fewer systems than exist. Long routes are often straight speculative lines; the "as mapped" geometry of a landing is the mapper's, not a survey. Coverage is best around Europe, the Caribbean and New Zealand. Landing points are derived, not recorded.
- Continents and countries follow Natural Earth units. Disputed or dependent territories follow its choices.
- Facilities with no OSM city tag show the nearest populated place (labelled as such).

## 10. Open licence questions

1. PeeringDB: written permission for public, commercial display (and, separately, for any sales list). Until then, no PeeringDB data.
2. TeleGeography: written licence if more cable coverage is wanted; confirm which licence text actually applies to the map.
3. ODbL share-alike: decide to publish `data/*.json` openly under the ODbL (needed if the atlas goes on the website) and keep the attribution line visible.
4. Overpass: use a Geofabrik extract for refreshes if the atlas becomes a recurring commercial feature.
5. Fonts and logo: Archivo and IBM Plex Mono are OFL 1.1 (self-hosted, fine); the C1 mark is GO2's own.

## 11. Reproduce

```
cd D:/kf-tools/go2-lab/atlas/pipeline && source env.sh
python fetch_osm_dc.py ; python fetch_osm_cables.py            # Overpass, sequential, resumable (raw data goes to D:/kf-tools/cache/atlas-raw)
uv run --no-project --with shapely --with numpy python build_basemap.py
uv run --no-project --with shapely --with numpy python build_facilities.py
uv run --no-project --with shapely --with numpy python build_cables.py
python eval_peeringdb.py ; python build_csv.py ; python write_data_sources.py
```
