构建高性能高程 API

本文转载自《构建高性能高程 API》 在彩云科技,我们始终致力于为用户提供更高时空分辨率的气象数据。在过去这些年中,我们始终面临一个挑战:由于高程数据分辨率的限制,徒步、越野等户外活动爱好者用户经常遇到彩云提供的数据与实际感受有着明显偏差,这种情况在海拔变化剧烈的山地和高原地区尤为突出。 ...

 · 4 min · 1897 words · ringsaturn

制作富士山周边高程 RGB 瓦片

TLDR 前几日查资料的时候发现了 MapTiler 制作的轨迹高程数据可视化页面,效果非常好: 这个做的是真好的啊,而且完全在浏览器实现的https://t.co/R1vQMbdYAo pic.twitter.com/IyTYy5Fxo1 — ringsaturn.me (@ringsaturn_me) January 10, 2024 在其官方的 Blog 找到了 2019 年的博文 提到了使用的技术是将高程数据编码到图片的 RGB 通道值中,然后在浏览器中解码,这样就可以在浏览器中实现高程数据的可视化了,特别是轨迹数据这种连续的数据,下载几张图片就能绘制连续的高程曲线。 ...

 · 3 min · 1408 words · ringsaturn

珠峰上的气象观测站

2023-12-08 和同事在做数据实验,想看看珠峰上有没有网上可以查阅数据的气象观测站。 之前在新闻上看到了中国科考队维护升级了珠峰 8830 米的自动气象站。 但是其观测数据并没有公开渠道可以直接访问,于是想查下有没有国外资料,毕竟珠峰南坡在尼泊尔境内。 ...

 · 1 min · 315 words · ringsaturn

Python 中批量将经纬度转换为时区名称方式对比

对比的维度有两个: 不同的 DataFrame 实现,这里用的是 Pandas 和 Polars,前者是最流行的框架,后者则是用 Rust 驱动的更节约内存的框架 不同的经纬度转时区库的实现,这里用的是 timezonefinder1 和 tzfpy2 相关代码可以在仓库中浏览 df-lng-lat-timezones-showcase ...

 · 1 min · 193 words · ringsaturn

tzf 的演进过程

tzf 及相关项目的基础开发工作基本稳定了,在之前的文章零星有些开发和设计过程的资料: 2022-05-29, 在 Go 中将经纬度转时区 2022-08-01, Python 中经纬度转时区新的选择 2022-08-27, 用 Go 编写 Python 扩展 2022-09-10, tzf 预览图制作 2022-11-24, tzfpy Rust 重写 这一篇是最终的总结,从项目的启动到逐步优化和演进的过程。 ...

 · 6 min · 2685 words · ringsaturn

彩云天气地理查询优化(2): 行政区划查询

本文转载起《彩云天气地理查询优化(2): 行政区划查询》 在彩云天气 App 和 API 里可以获取到当前经纬度的气象预警信息,比如「大风蓝色预警」。 不同国家地区的预警发布规则不一样,在中国是按照行政区划层级来发布的,其中最小到县级行政区。 所以在实现中,需要将经纬度转换成行政区划层级信息,再查找相关的预警信息。 在过去几年中,这部分模块经历了多次重构和完善,在此分享下每个版本的实现方式。 ...

 · 5 min · 2231 words · ringsaturn

彩云天气地理查询优化(1): 气象站数据查询

本文转载自《彩云天气地理查询优化: 最近的 N 个点》 我们从一个实际业务场景的谈起: 如何找到离北京市海淀区 768 创意产业园最近的 K 个国家级观测站? 最简单的思路是完整遍历所有候选站点,然后计算每个站点和 768 的距离,按照距离从小到大,选最多前 K 个。 这个代码并不难写。但是问题是慢。 ...

 · 3 min · 1447 words · ringsaturn

Protocol Buffers 生成 Python Typing

Protocol Buffers 生成的 Python 代码是一坨人类无法阅读的代码, 近日才发现 Google 增加了一个参数 --pyi_out=./xxx 就可以生成 Python 的 typing 了。 这个功能在官方文档里是一点没有提及。

 · 1 min · 63 words · ringsaturn

tzfpy Rust 重写🎉

书接上文: 在 Go 中将经纬度转时区 经过一个周末的各种折腾,终于用 Rust 实现了 tzf 的功能,代码在 ringsaturn/tzf-rs。 又用了晚上跑了多次 CI 将 Python 移植也重写出来了 ringsaturn/tzfpy。 tzfpy 只要安装 >= 0.11.0 版本的就是用纯 Rust 实现的,在这个版本号之前都是 Python+CGO 实现的。 API 参数和之前一样,没有变化,但是索引命中的时候只需要 3~4 微妙,之前 Python+Go 需要 16 微妙。 最慢的单次查询 300 多微妙,timezonefinder(用 C 实现的多边形算法版本) 最慢的时候会有 1000 多微妙。 ...

 · 1 min · 471 words · ringsaturn

tzf 预览图制作

上周花了点时间学习下 mbtiles 文件格式,顺手给 tzf 项目制作了一个 social preview media: 制作流程很简单: 安装 https://github.com/mapbox/tippecanoe 安装 https://github.com/mapbox/mbview 下载时区的 GeoJSON 文件 1 2 3 # 根据 GeoJSON 制作 .mbtiles 文件 tippecanoe -o timezone.mbtiles -l Timezons -z7 combined-with-oceans.fmt.json mbview ./timezone.mbtiles 网页里调整合适的角度,截图,调整下图片的分辨率即可。 ...

 · 1 min · 99 words · ringsaturn