
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: Vecrerun::components::LatLon, /// Optional radii for the points, effectively turning them into circles. #[rerun(recommended)] pub radii: OptionVecrerun::components::Radius, /// Optional colors for the points. #[rerun(recommended)] pub colors: OptionVecrerun::components::Color, /// Optional class Ids for the points. #[rerun(optional)] pub class_ids: OptionVecrerun::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可以在以下两种视图中展示MapView2D 地图视图用于展示地理空间图元DataframeView数据表格视图用于按行/列检查组件数据。快速上手三种 SDK 的完整示例原文档给出的示例名为Log a geospatial point记录一个地理空间点对应的三个语言版本示例代码完整保存在仓库中可直接复制运行。Python源码见 docs/snippets/all/archetypes/geo_points_simple.pyLog some very simple geospatial point. import rerun as rr rr.init(rerun_example_geo_points, spawnTrue) rr.log( rerun_hq, rr.GeoPoints( lat_lon[59.319221, 18.075631], radiirr.Radius.ui_points(10.0), colors[255, 0, 0], ), )要点说明rr.init(rerun_example_geo_points, spawnTrue)初始化录制并自动拉起查看器进程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(), Boxdyn 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 侧的关键 APIGeoPoints::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.rsLatLon::new(lat, lon)构造、latitude()与longitude()分别读取纬度和经度纬度与经度均使用度数方向约定为北为正N、东为正E。半径与颜色的细节语义Radius场景单位与 UI points根据 Radius 组件文档内部表示为一个Float32数值正值表示场景单位负值被解释为 UI pointsUI points 与视图缩放无关但对应用 UI 缩放敏感100% UI 缩放下1 UI point ≈ 1 像素查看器默认跟随操作系统缩放全高清屏约 100%4K 屏约 200%在GeoPoints场景中以场景单位指定的半径被解释为米这是.def.rs中radii字段注释明确标注的注意点见 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)。ColorsRGB gamma 空间下的 RGBA根据 Color 组件文档语义为带未预乘unmultiplied/separatealpha 的 RGBA处于 sRGB gamma 空间alpha 为线性存储为 32 位整数最高字节为 R、最低字节为 AArrow 数据类型为UInt32Python 侧既可使用 0-1 浮点也可使用 0-255 整数并带独立 alpha见.def.rs中对colors的注释。源码级实现从类型定义到地图渲染GeoPoints的完整链路体现了 Rerun 代码生成驱动的架构类型定义crates/build/re_type_definitions/rerun/archetypes/geo_points.def.rs 是用re_types_builder解析的权威定义负责生成 Rust / Python / C 三端绑定与文档生成代码crates/store/re_sdk_types/src/archetypes/geo_points.rs 中实现了Archetypetraitrequired_components/recommended_components/optional_components的完整描述符列表、Arrow 序列化/反序列化from_arrow_components/as_serialized_batches以及 builder 方法渲染可视化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, spawnTrue) rr.log( points, rr.GeoPoints( lat_lon[[47.6344, 19.1397], [47.6334, 19.1399]], radiirr.Radius.ui_points(20.0), ), ) # Create a map view to display the chart. blueprint rrb.Blueprint( rrb.MapView( originpoints, nameMapView, zoom16.0, backgroundrrb.MapProvider.OpenStreetMap, ), collapse_panelsTrue, ) rr.send_blueprint(blueprint)该示例同时演示了两个实践要点lat_lon可以传入多个点组成的二维列表这里记录了两个布达佩斯附近的点通过rrb.MapView(originpoints, ...)让视图锚定到points实体设置zoom16.0缩放级别并选择OpenStreetMap作为底图。此外MapView 文档docs/content/reference/types/views/map_view.md明确列出了它可视化的 archetype 列表GeoLineStrings与GeoPoints——也就是说你可以在同一地图视图中把点集与地理折线如行驶轨迹叠加展示。已知限制与后续方向从 geo_points.def.rs 源码中的 TODO 注释可以看出GeoPoints未来计划补充的能力包括Label与ShowLabels组件点的文本标签与标签显隐控制Altitude组件海拔信息用于支持三维地理语义。当前版本中若需要为点附加文本信息可以结合 Rerun 的通用标签/文本组件另行记录地图视图类型本身处于 unstable 状态在升级 SDK 时需要注意其 API 与数据格式可能发生变更。小结GeoPoints是 Rerun 地理空间可视化体系的基础 archetype以LatLonEPSG: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),仅供参考