news 2026/9/16 19:37:49

Rerun GeoPoints 地理空间点集:EPSG:4326 经纬度数据的可视化与查询指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rerun GeoPoints 地理空间点集:EPSG:4326 经纬度数据的可视化与查询指南

Rerun GeoPoints 地理空间点集:EPSG:4326 经纬度数据的可视化与查询指南

【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun

导读

GeoPoints是 Rerun 中用于表达地理空间点集(geospatial points)的核心 archetype,它用 EPSG:4326 搭配,把 GPS/UTM 轨迹、信标位置、传感器观测点直接叠加到 2D 地图底图上。读完本文,你将掌握GeoPoints的完整字段结构、Python / Rust / C++ 三种 SDK 的调用方式、底层LatLon组件与渲染管线实现,以及如何用 Blueprint 定制地图视图。

GeoPoints 是什么

根据 类型定义文档,GeoPoints的定义为:

Geospatial points with positions expressed in EPSG:4326 latitude and longitude (North/East-positive degrees), and optional colors and radii.

即:用 EPSG:4326 经纬度(北/东为正的度数)表示位置、并携带可选颜色与半径的地理空间点集合。它是 Rerun 类型体系中Geospatial(地理空间)分类下的一个 archetype,声明状态为stable,对应的内置可视化为GeoPoints,源码定义见 crates/build/re_type_definitions/rerun/archetypes/geo_points.def.rs:

#[rerun::rerun_type] #[docs(category = "Geospatial")] #[docs(view_types = "MapView")] #[rerun(state = "stable")] #[rerun(visualizer = "GeoPoints")] pub struct GeoPoints { /// The EPSG:4326 coordinates for the points (North/East-positive degrees). #[rerun(required)] pub positions: Vec<rerun::components::LatLon>, /// Optional radii for the points, effectively turning them into circles. #[rerun(recommended)] pub radii: Option<Vec<rerun::components::Radius>>, /// Optional colors for the points. #[rerun(recommended)] pub colors: Option<Vec<rerun::components::Color>>, /// Optional class Ids for the points. #[rerun(optional)] pub class_ids: Option<Vec<rerun::components::ClassId>>, }

字段与组件结构

GeoPoints共包含4 个组件(1 个必选、2 个推荐、1 个可选),生成代码中通过常量明确标注了这一点(见 crates/store/re_sdk_types/src/archetypes/geo_points.rs 中NUM_COMPONENTS: usize = 4usize):

分类字段组件类型说明
RequiredpositionsLatLonEPSG:4326 经纬度坐标(北/东为正的度数),点集的核心数据
RecommendedradiiRadius可选半径,使点变成圆;注意场景单位下的半径以为单位
RecommendedcolorsColor可选颜色,按 sRGB gamma 空间下的 RGB/RGBA 解释
Optionalclass_idsClassId可选类别 ID,未显式指定颜色时由 ClassId 提供颜色

支持在哪些视图中展示

依据文档,GeoPoints可以在以下两种视图中展示:

  • MapView:2D 地图视图,用于展示地理空间图元;
  • DataframeView:数据表格视图,用于按行/列检查组件数据。

快速上手:三种 SDK 的完整示例

原文档给出的示例名为Log a geospatial point(记录一个地理空间点),对应的三个语言版本示例代码完整保存在仓库中,可直接复制运行。

Python

源码见 docs/snippets/all/archetypes/geo_points_simple.py:

"""Log some very simple geospatial point.""" import rerun as rr rr.init("rerun_example_geo_points", spawn=True) rr.log( "rerun_hq", rr.GeoPoints( lat_lon=[59.319221, 18.075631], radii=rr.Radius.ui_points(10.0), colors=[255, 0, 0], ), )

要点说明:

  • rr.init("rerun_example_geo_points", spawn=True)初始化录制并自动拉起查看器进程;
  • lat_lon接受[lat, lon]形式的经纬度列表,也可传入多个点组成的二维列表(见下文 MapView 示例);
  • rr.Radius.ui_points(10.0)表示以UI points(与缩放无关、随界面缩放)为单位指定半径;
  • colors=[255, 0, 0]使用 0-255 整数表示 RGB 红色。

Rust

源码见 docs/snippets/all/archetypes/geo_points_simple.rs:

//! Log some very simple geospatial point. fn main() -> Result<(), Box<dyn std::error::Error>> { let rec = rerun::RecordingStreamBuilder::new("rerun_example_geo_points") .spawn()?; rec.log( "rerun_hq", &rerun::GeoPoints::from_lat_lon([(59.319221, 18.075631)]) .with_radii([rerun::Radius::new_ui_points(10.0)]) .with_colors([rerun::Color::from_rgb(255, 0, 0)]), )?; Ok(()) }

Rust 侧的关键 API:

  • GeoPoints::from_lat_lon(...)是便捷构造函数,定义在扩展文件 crates/store/re_sdk_types/src/archetypes/geo_points_ext.rs 中,直接由一组LatLon创建点集;
  • with_radii/with_colors/with_class_ids是链式 builder 方法(生成于 crates/store/re_sdk_types/src/archetypes/geo_points.rs),分别填充推荐与可选字段;
  • 此外还有clear_fields()(清空全部字段)、update_fields()(仅更新部分字段)、以及columns()/columns_of_unit_batches()用于把数据分片为列,配合RecordingStream::send_columns做列式(columnar)发送。

C++

源码见 docs/snippets/all/archetypes/geo_points_simple.cpp:

// Log some very simple geospatial point. #include <rerun.hpp> int main(int argc, char* argv[]) { const auto rec = rerun::RecordingStream("rerun_example_geo_points"); rec.spawn().exit_on_failure(); rec.log( "rerun_hq", rerun::GeoPoints::from_lat_lon({{59.319221, 18.075631}}) .with_radii(rerun::Radius::ui_points(10.0f)) .with_colors(rerun::Color(255, 0, 0)) ); }

三个示例都向同一个实体路径"rerun_hq"记录了一个位于瑞典斯德哥尔摩(北纬 59.319221°、东经 18.075631°)附近的红色圆点。

深入 LatLon 组件:经纬度如何编码

positions字段的组件类型是 LatLon,其定义在 crates/store/re_sdk_types/src/components/lat_lon.rs 中:

#[repr(transparent)] pub struct LatLon(pub crate::encodings::DVec2D);

关键实现事实:

  • Rerun 编码DVec2D,即双精度(f64)二维向量,x存纬度、y存经度;
  • Arrow 数据类型FixedSizeList(2 x non-null Float64),即两个非空 Float64 组成的定长列表,与 DVec2D 一一对应;
  • 便捷方法(见 crates/store/re_sdk_types/src/components/lat_lon_ext.rs):LatLon::new(lat, lon)构造、latitude()longitude()分别读取纬度和经度;
  • 纬度与经度均使用度数,方向约定为北为正(N+)、东为正(E+)

半径与颜色的细节语义

Radius:场景单位与 UI points

根据 Radius 组件文档:

  • 内部表示为一个Float32数值:正值表示场景单位,负值被解释为 UI points
  • UI points 与视图缩放无关,但对应用 UI 缩放敏感:100% UI 缩放下,1 UI point ≈ 1 像素;查看器默认跟随操作系统缩放(全高清屏约 100%,4K 屏约 200%);
  • GeoPoints场景中,以场景单位指定的半径被解释为米(这是.def.rsradii字段注释明确标注的注意点,见 geo_points.def.rs)。

三种 SDK 对应的构造方式:Python 用rr.Radius.ui_points(10.0),Rust 用rerun::Radius::new_ui_points(10.0),C++ 用rerun::Radius::ui_points(10.0f)

Color:sRGB gamma 空间下的 RGBA

根据 Color 组件文档:

  • 语义为带未预乘(unmultiplied/separate)alpha 的 RGBA,处于 sRGB gamma 空间,alpha 为线性;
  • 存储为 32 位整数,最高字节为 R、最低字节为 A,Arrow 数据类型为UInt32
  • Python 侧既可使用 0-1 浮点,也可使用 0-255 整数并带独立 alpha(见.def.rs中对colors的注释)。

源码级实现:从类型定义到地图渲染

GeoPoints的完整链路体现了 Rerun 代码生成驱动的架构:

  1. 类型定义:crates/build/re_type_definitions/rerun/archetypes/geo_points.def.rs 是用re_types_builder解析的权威定义,负责生成 Rust / Python / C++ 三端绑定与文档;
  2. 生成代码:crates/store/re_sdk_types/src/archetypes/geo_points.rs 中实现了Archetypetrait(required_components/recommended_components/optional_components的完整描述符列表)、Arrow 序列化/反序列化(from_arrow_components/as_serialized_batches)以及 builder 方法;
  3. 渲染可视化:crates/views/re_view_map/src/visualizers/geo_points.rs 中的GeoPointsVisualizer负责把组件数据变成地图上的点。从源码可以观察到以下实现细节:
    • 它以LatLon为唯一必选组件建立查询(VisualizerQueryInfo::single_required_component::<LatLon>),并通过query_archetype_with_history::<GeoPoints>拉取带历史的数据;
    • 通过AnnotationMapCache建立标注上下文class_ids未显式提供颜色时,用标注上下文为colors提供颜色回退(annotation_context_query()GeoPoints:class_ids指向GeoPoints:colors的标注目标);
    • 半径未提供时,通过typed_fallback_for获取回退半径,并且单实例半径缺失时复用最后一个半径值(instance clamping 语义);
    • 位置经walkers::lat_lon(lat, lon)转为地图投影坐标,再由walkers::Projector投影为 UI 二维坐标,最终用re_renderer::PointCloudBuilder以点云形式绘制(radius_to_size负责把半径换算成屏幕尺寸)。

用 Blueprint 定制 MapView 地图视图

GeoPoints的典型呈现载体是 MapView——一个 2D 地图视图(注意:文档标注该视图类型目前为unstable,未来可能发生不向后兼容的变更)。MapView 的属性包括:

  • zoom:配置地图视图的缩放级别;
  • background:配置背景底图来源。

仓库中的完整示例见 docs/snippets/all/views/map.py,同时记录了多个地理点并下发自定义蓝图:

"""Use a blueprint to customize a map view.""" import rerun as rr import rerun.blueprint as rrb rr.init("rerun_example_map_view", spawn=True) rr.log( "points", rr.GeoPoints( lat_lon=[[47.6344, 19.1397], [47.6334, 19.1399]], radii=rr.Radius.ui_points(20.0), ), ) # Create a map view to display the chart. blueprint = rrb.Blueprint( rrb.MapView( origin="points", name="MapView", zoom=16.0, background=rrb.MapProvider.OpenStreetMap, ), collapse_panels=True, ) rr.send_blueprint(blueprint)

该示例同时演示了两个实践要点:

  • lat_lon可以传入多个点组成的二维列表(这里记录了两个布达佩斯附近的点);
  • 通过rrb.MapView(origin="points", ...)让视图锚定到"points"实体,设置zoom=16.0缩放级别,并选择OpenStreetMap作为底图。

此外,MapView 文档(docs/content/reference/types/views/map_view.md)明确列出了它可视化的 archetype 列表:GeoLineStringsGeoPoints——也就是说,你可以在同一地图视图中把点集与地理折线(如行驶轨迹)叠加展示。

已知限制与后续方向

从 geo_points.def.rs 源码中的 TODO 注释可以看出,GeoPoints未来计划补充的能力包括:

  • LabelShowLabels组件(点的文本标签与标签显隐控制);
  • Altitude组件(海拔信息,用于支持三维地理语义)。

当前版本中,若需要为点附加文本信息,可以结合 Rerun 的通用标签/文本组件另行记录;地图视图类型本身处于 unstable 状态,在升级 SDK 时需要注意其 API 与数据格式可能发生变更。

小结

GeoPoints是 Rerun 地理空间可视化体系的基础 archetype:以LatLon(EPSG:4326,北/东为正的度数)为唯一必选组件,配合Radius(场景单位下以米计)与Color两个推荐组件,以及可选的ClassId(经由标注上下文提供颜色回退),即可在 MapView 或 DataframeView 中呈现地理点数据。无论你使用 Python、Rust 还是 C++ SDK,都可以通过GeoPoints::from_lat_lon/rr.GeoPoints一行构造、链式with_radii/with_colors丰富视觉表达,再结合 Blueprint 的MapView(zoom=..., background=...)精确控制地图呈现,从而把机器人、自动驾驶等场景的经纬度数据直接落到地图上进行观察与调试。

【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:36:59

深度学习分类正负样本失衡?5大实战解决方案全解析

做深度学习分类任务这么久&#xff0c;最让我头疼的不是网络结构选不出来&#xff0c;而是正负样本比例失衡。银行风控里欺诈样本往往不到1%&#xff0c;医疗影像里病灶区域可能只占几十个像素&#xff0c;工业质检中次品率长期在0.5%以下——这些场景下模型训练出来&#xff0…

作者头像 李华
网站建设 2026/9/16 19:36:28

抖音批量下载教程:3 步跑通去水印下载与主页全量抓取

抖音批量下载教程&#xff1a;3 步跑通去水印下载与主页全量抓取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

作者头像 李华
网站建设 2026/9/16 19:36:02

2026企业AI办公工具选型指南:框架、全景与落地路径

一、企业选AI办公工具&#xff0c;为什么不能只看功能列表 企业数字化负责人在筛选AI办公产品的过程中&#xff0c;很容易陷入表层对比的误区。不少选型工作会把主要精力投入统计工具的功能条目&#xff0c;或是单纯对比席位订阅成本&#xff0c;也有部分团队会直接跟随市场声量…

作者头像 李华
网站建设 2026/9/16 19:35:46

CleanRL 快速上手指南:5 分钟跑通你的第一个 PPO 强化学习实验

CleanRL 快速上手指南&#xff1a;5 分钟跑通你的第一个 PPO 强化学习实验 【免费下载链接】cleanrl High-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG) 项目地址:…

作者头像 李华
网站建设 2026/9/16 19:33:17

Arch Linux + KDE下WPS中文文件名无法找到的定位与修复

先说结论&#xff1a;这个报错十有八九不是文件真的“没了”&#xff0c;而是 WPS 在把文件路径从启动参数一路传递到文档加载模块的过程中&#xff0c;路径已经变成了空字符串。我在 Arch Linux KDE 环境下折腾 WPS 中文文件名打不开的问题&#xff0c;前后花了两天&#xff…

作者头像 李华