How We Link
This page explains how Tenki Link sources data, verifies connections, and builds the network visualization you see on our home page. We believe transparency about methodology is essential to trust, so we document everything here. If you have questions after reading this, contact us at connect@tenkilink.com.
Data Source: Open-Meteo API
All temperature, humidity, and wind data displayed on Tenki Link comes from the Open-Meteo API, a free weather data service that provides forecasts based on numerical weather models run by meteorological agencies worldwide. We use their forecast endpoint because it requires no API key, imposes no rate limits for reasonable usage, and provides high-resolution data suitable for comparing conditions across Tokyo's 23 wards.
The specific API endpoint we call is:
https://api.open-meteo.com/v1/forecast?latitude={LAT}&longitude={LON}¤t=temperature_2m,relative_humidity_2m,apparent_temperature,wind_speed_10m,wind_direction_10m&daily=temperature_2m_max,temperature_2m_min&timezone=Asia%2FTokyo&forecast_days=3
We make six separate API calls on each page load — one for each of our network nodes. Each call uses the precise latitude and longitude of the node's location within its district. These calls happen directly from your browser to Open-Meteo's servers; our server does not proxy or intermediate the requests.
Our Six Node Locations
Each node corresponds to a specific point in space, chosen to be representative of the district's general conditions while avoiding extreme microclimates (like directly over asphalt parking lots or deep in parks). The coordinates we use are:
| Node | Latitude | Longitude | Representative Area |
|---|---|---|---|
| Shinjuku | 35.6938 | 139.7034 | Near Shinjuku Station, commercial core |
| Shinagawa | 35.6284 | 139.7388 | Near Shinagawa Station, bay proximity |
| Taito | 35.7188 | 139.7732 | Near Ueno Park, Sumida River west bank |
| Setagaya | 35.6462 | 139.6612 | Sangenjaya area, residential mid-density |
| Koto | 35.6632 | 139.8732 | Toyosu area, bay frontage |
| Nerima | 35.7375 | 139.6532 | Near Nerima Station, western edge |
On-Site Measurement and Verification
The Open-Meteo API provides forecast data based on numerical models, not direct measurements from weather stations. We verify this data through on-site measurement using calibrated handheld thermometers (Kestrel 5500 weather meters) at each node location. Our verification process involves:
- Spot checks: We visit each node location weekly and record temperature, humidity, and wind speed, then compare our readings to the API data for the same time. Typical discrepancies range from 0.3 to 1.2 degrees Celsius, which is within acceptable limits for model-based forecasting.
- Seasonal calibration: At the start of each season, we conduct a three-day measurement campaign at all six nodes, taking readings every four hours from 6am to 10pm. This seasonal check helps us identify any systematic bias in the API data for specific districts or weather conditions.
- Anomaly investigation: When the network shows an unexpectedly thick line between two nodes (indicating a large temperature difference), we try to verify it on the ground. Often these anomalies are real — they correspond to microclimate boundaries we can feel and measure. Sometimes they're API artifacts, and we note those in our Fix Log.
How Temperature Differences Are Calculated
The network visualization is built entirely in your browser using JavaScript. Here's the process:
- Your browser loads the page and executes our main.js file.
- The script makes six fetch() requests to the Open-Meteo API — one per node.
- When the responses arrive, the script extracts the current temperature_2m value from each response.
- For every pair of nodes (15 pairs total), the script calculates the absolute temperature difference: Math.abs(tempA - tempB).
- Each connecting line is rendered as an SVG element with:
— stroke-width = 2 + abs(temp difference) pixels
— stroke color = #C4B5FD if diff < 2, #F59E0B if diff 2-4, #EF4444 if diff > 4 - Node circles (radius 28px, #312E81 fill) and labels are rendered on top of the lines.
All of this happens in real time. The visualization you see reflects the API data available at the moment you loaded the page. If you refresh the page, the data updates. There is no caching layer, no server-side processing, and no database. The calculation is pure JavaScript running in your browser.
Network Model Updates
The network model itself — the six nodes and their positions — is updated on our end when we have reason to believe a change is warranted. Reasons for updating the model include:
- A new construction project significantly alters a district's thermal characteristics (for example, a major development that increases the heat island effect).
- Our on-site measurements reveal a systematic discrepancy between the API data and ground conditions at a specific node location.
- We add a new essay or analysis that would benefit from an additional node or a repositioned connection.
Model updates happen at most once per quarter, and usually less frequently. The current model has been stable since January 2025. We log all model changes in our Fix Log with dates and explanations.
Limitations and Caveats
Our network visualization has important limitations that you should understand:
- Model data, not direct measurement: The temperatures come from Open-Meteo's forecast model, not from weather stations at the node locations. The model interpolates between observation points, and the interpolated values may not match the exact temperature at our specified coordinates.
- Single point per district: Each district is represented by one point, but Tokyo's wards contain multiple microclimates. Shinjuku's temperature at our node point (near the station) may differ from Shinjuku's temperature near the Tokyo Metropolitan Government Building, 1.5 kilometers away.
- No vertical resolution: The API provides temperature at 2 meters above ground level. It does not account for vertical temperature variations in building canyons, on elevated expressways, or in high-rise districts.
- Temporal snapshot: The network shows conditions at the moment of page load. Temperature differences change throughout the day as heat flows, breezes shift, and solar loading varies.
- 15 connections only: We show lines between all pairs of our six nodes, but these 15 connections do not represent all possible climate links in Tokyo. They are the links between our chosen nodes, not a comprehensive map of the city's climate network.
Code Transparency
Our JavaScript is not minified. You can read it directly by viewing the source of our main.js file. The network rendering code, the API fetching logic, and the cookie banner are all there in plain text. We have nothing to hide because we don't track you, we don't fingerprint your browser, and we don't send your data anywhere except to the Open-Meteo API for weather information.
Corrections
When we discover errors in our data, methodology, or content, we correct them and log the change in our Fix Log. We do not silently edit published content. If a correction affects a factual claim in one of our essays, we update the essay and note the change in the log.
If you believe our network is showing an incorrect connection or our methodology has a flaw, we want to hear from you. Contact us at connect@tenkilink.com with your observation and we'll investigate.