# 数据源与摄像头核实清单

核实日期：2026-10-09（Asia/Singapore）。接口状态是本次核实结果，不保证持续在线。运行时状态以网页中的获取时间、观测时间和错误提示为准。

## 可直接接入

| 来源 | 覆盖、数据性质 | 实测与频率 | 许可、配额、密钥 |
|---|---|---|---|
| [NEA PM2.5 / data.gov.sg](https://data.gov.sg/datasets/d_e1058d6974c877257e32048ab128ad83/view) | 新加坡五个区域代表读数；不是五个物理站坐标。1小时平均，µg/m³ | v2 `/pm25`、带 `date` 的历史查询均 HTTP 200；本次最新 2026-10-09 13:00 +08:00。数据页写每15分钟更新，观测为逐小时，网页每15分钟检查 | Singapore Open Data Licence，允许个人／商业复用并署名；匿名可测试，可选 x-api-key。v2实时匿名6次/10秒、开发密钥12次/10秒、生产密钥30次/10秒；服务端每2.1秒一个请求槽位 |
| [NEA PSI](https://guide.data.gov.sg/developer-guide/real-time-apis) | 新加坡五区；24h PSI（原标准），24h PM2.5、PM10、SO₂，NO₂ 1h最大、CO/O₃ 8h最大 | v2 `/psi` HTTP 200；每15分钟检查 | 同上；CO为mg/m³，其余污染物为µg/m³，PSI无量纲，不与其他国家指数合并 |
| [LTA Traffic Images](https://data.gov.sg/datasets/d_6cdb6b405b25aaaacbaf7689bcc6fae0/view) | API实际返回的道路摄像头，逐个坐标、ID、拍摄时间；周期静态图片，非实时视频 | `/v1/transport/traffic-images` HTTP 200；本次8个机位，图片拍摄13:45:52 +08:00。每5分钟检查（保守客户端策略，并非宣称供应商保证5分钟） | Singapore Open Data Licence；无需登录；直接img显示并署名、链接回来源。图片加载成功时间与拍摄时间分开显示 |
| [Open-Meteo Weather](https://open-meteo.com/en/docs) | 东南亚所有配置城市；10m风、温湿度模型。不是当地气象站观测 | HTTP 200；current间隔900秒。网页每小时检查，模型实际更新依供应商模型 | CC BY 4.0数据；免费托管API仅非商业。600/min、5000/hour、10000/day。商业使用需订阅密钥 |
| [Open-Meteo / CAMS Global](https://open-meteo.com/en/docs/air-quality-api) | 全球约0.4°/45km模型网格，原生3小时输出，API提供小时插值；PM2.5、PM10、CO、NO₂、SO₂、O₃ | HTTP 200；过去7天参数有效。模型每日两次更新，服务端缓存6小时 | 数据CC BY 4.0，署名CAMS及Open-Meteo。免费API仅非商业；模型有效时刻不是观测时间，瞬时浓度不能与NEA的1h平均直接比较 |

[data.gov.sg配额说明](https://guide.data.gov.sg/developer-guide/api-overview/api-rate-limits.md)、[API访问说明](https://guide.data.gov.sg/developer-guide/api-overview)、[Open-Meteo条款](https://open-meteo.com/en/terms)。data.gov.sg文档的认证字段标注与匿名测试说明存在差异：本次匿名实际成功，不保证生产环境未来无需密钥。

## 需要配置／仅入口

| 来源 | 核实与处理 |
|---|---|
| [OpenAQ v3](https://docs.openaq.org/api) | 无密钥实测HTTP 401；旧v1/v2已停用。免费密钥60/min、2000/hour。已实现v3站点、最新值及小时趋势适配；尚未用有效密钥验收，不能承诺各国当前站点数量。配置后根据API实际返回坐标显示；逐站保留provider和licenses署名。聚合小时浓度不转换AQI。 |
| [NASA FIRMS](https://firms.modaps.eosdis.nasa.gov/api/) | 官方文档确认免费MAP_KEY，5000事务/10分钟；较大请求计多事务。已实现VIIRS_NOAA20_NRT区域CSV适配，无密钥不开假火点，未用有效密钥实测。1小时检查，24h卫星探测窗口；云、树冠、过境频率限制检测。火点不等于确认烧芭事件。 |
| [BMKG PM2.5](https://www.bmkg.go.id/kualitas-udara/pm25) | 官方页面有印尼城市读数及信息；没有核实到明确许可和配额的公开机器接口，保留入口，不抓取内部接口。平均时长及完整日期未统一核实，不纳入跨国浓度汇总。 |
| [Malaysia DOE APIMS](https://eqms.doe.gov.my/APIMS/main) | 页面实测HTTP 200；提供马来西亚API指数。公开机器接口、历史数据复用许可未确认，保留入口，不把API当PM2.5浓度。 |
| [ASMC](https://asmc.asean.org/asmc-haze-hotspot-daily/) | 官方每日火点及烟霾信息页面可查看；没有核实可直接复用的烟霾多边形接口，网页提供官方通报入口，不绘制假烟霾范围。 |

## 逐个核实的摄像头

所有可嵌入机位只来自LTA API原始坐标，不猜测机位。初次核实结果会保存在 `verification/cameras.json`。运行时摄像头目录由API重新获取；供应商删除机位后，固定画面保留上次图片并标为目录缺失。

| ID | 坐标／区域 | 类型／提供方 | 嵌入、登录、成功验证 |
|---|---|---|---|
| 2701 | 1.447023728,103.7716543；新加坡兀兰附近 | 周期图片／LTA | 无需登录；图片HEAD 200；2026-10-09 13:50:43 SGT；原始拍摄13:45:52 SGT |
| 2702 | API原始坐标，兀兰附近 | 周期图片／LTA | 详见逐机位机器核实清单 |
| 4703 | 1.348697862,103.6350413；Tuas附近 | 周期图片／LTA | 无需登录；图片HEAD 200；2026-10-09 13:50:43 SGT；原始拍摄13:45:52 SGT |
| 4798 | 1.25999999687243,103.823611110166；南部港口附近 | 周期图片／LTA | 无需登录；图片HEAD 200；2026-10-09 13:50:43 SGT；原始拍摄13:45:52 SGT |

其他本次API返回机位也逐个核实，见机器清单；名称使用ID和大致区域，避免虚构道路名称。

### 只能跳转的候选目录（不在地图冒充具体机位）

- [DKI Jakarta官方CCTV](https://jakcctv.jakarta.go.id/publik)：官方页面含实际命名道路摄像头，宣称视频；第三方嵌入许可、精确坐标及当前帧时间未核实，只有来源链接，不标为已加载实时流。不绕过Molecool登录或付费限制。
- [吉隆坡KLCCC](https://klccc.dbkl.gov.my/)：市政官方页面提供Watch Live CCTV Feed，外部嵌入许可／具体机位坐标和帧时间未确认，仅入口。
- [吉隆坡SkylineWebcams](https://www.skylinewebcams.com/en/webcam/malasya/selangor/kuala-lumpur/kuala-lumpur.html)：页面描述城市全景实时视频；精确机位／最后帧时间未核实，免费访问可能受提供方限制。[条款](https://www.skylinewebcams.com/en/terms-of-use.html)保留内容权利，第三方复制需许可，未嵌入或提取流。
- 槟城、马六甲、沙巴、砂拉越、苏门答腊、加里曼丹：没有核实到许可明确且稳定的免费摄像头。本版明确显示覆盖缺口，绝不生成摄像头填充地图。

## 呈现规则

- 浓度图例为产品自定义数值区间：0–15、>15–35、>35–55、>55–150、>150 µg/m³。不是WHO健康限值、AQI或NEA分级；不做统一指数转换。
- 地图只显示离散区域标签、监测站和明确标注的模型采样点，不使用连续污染热力插值。
- 新加坡顶部统计为5区可用且不超过3小时的1h读数中位数、范围和有效区域数；不称为实际站点数。其他城市只有单个模型采样时标注“单点估算；0监测站”，不冒充城市均值。
- NEA过期阈值3h；OpenAQ监测3h；图片20min；模型有效时刻3h（另显示获取时间和缓存状态）。这些阈值为应用策略，不是供应商承诺。
- 气象方向为气象学来向，箭头绘制去向。风与火点不构成污染源归因，摄像头不用于推断PM2.5。
