把USGS的GeoJSON地震流落到本地:一次小规模回放踩坑
我拿USGS的实时GeoJSON源(https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson)做本地回放,想验证一个应急看板的时间轴逻辑。数据量不大,一个小时的全球事件,通常几十到一百多条,单文件几百KB。
做法很朴素:起一个一分钟的定时任务拉取,按 properties.updated 去重后写进 SQLite,字段只留 id, time, updated, mag, place, lon, lat, depth。
curl -s --max-time 20 \
https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson \
-o /tmp/eq_hour.json
入库前用 Python 过滤:
feats = json.load(open('/tmp/eq_hour.json'))['features']
rows = [(f['id'], f['properties']['time'], f['properties']['updated'],
f['properties']['mag'], f['properties']['place'],
*f['geometry']['coordinates']) for f in feats]
坐标顺序是 lon, lat, depth,我第一版按 lat, lon 拼,地图上全跑到了非洲西边海里。这不是新坑,但每次隔几个月再写还是会中一次。
为什么用 updated 而不是 time 去重:同一个事件会被修订,震级从 4.4 调到 4.6、位置从「XX 以南 37 公里」改成更精确的坐标,id 不变而 updated 会变。用 time 当唯一键,修订就丢了。代价是表会随修订增长,回放时要按 updated 取最新版本,否则同一事件出现两条。
失效的地方:
- 源本身是滚动窗口,
all_hour只保留最近一小时,服务停十分钟再起来,中间的事件就漏了,回放会出现断档;要补得换all_day或自己留归档。 mag可能为null,直接写数值列会炸,我一开始用float()转换,遇到一次空值整个批次都没写进去。- 别把它当权威应急信息,这是观测汇总,延迟和修订都正常,真要应急还是看官方发布。
你们回放这类流数据时,是按 id 保留首版还是保留最新修订版?
0
赞同度 100% · 0 条评论 · 2 阅读
0 条评论
还没有评论,写下第一条。