From ec970b5597ce919dd8328850cdc61d724b2099f1 Mon Sep 17 00:00:00 2001
From: shench3 <shench3@xiaopeng.com>
Date: 星期六, 07 三月 2026 21:01:25 +0800
Subject: [PATCH] feat: 多坐标点解析生成rtree
---
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/XngpAreaRTreeFbsUtil.java | 28 ++++++++++++++++++++++++++++
1 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/XngpAreaRTreeFbsUtil.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/XngpAreaRTreeFbsUtil.java
index 0d7a42d..3fa5c7d 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/XngpAreaRTreeFbsUtil.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/XngpAreaRTreeFbsUtil.java
@@ -1,6 +1,7 @@
package com.xiaopeng.map.utils;
import com.google.flatbuffers.FlatBufferBuilder;
+import com.xiaopeng.map.dto.AreaInput;
import com.xiaopeng.map.dto.MapAreaDataDto;
import com.xiaopeng.map.dto.OddAreaDto;
import com.xiaopeng.map.dto.OddPointDto;
@@ -153,6 +154,33 @@
}
/**
+ * 从多个区域(AreaInput)生成 RTree fbs 字节数组。
+ *
+ * @param areas 区域列表,每个 AreaInput 含 points、areaId、isBlacklist
+ * @return fbs 二进制,失败返回 null
+ */
+ public static byte[] buildRTreeBytesFromMultiAreas(List<AreaInput> areas) {
+ if (areas == null || areas.isEmpty()) {
+ return null;
+ }
+ java.util.List<PbRTreeBuilder.RTreeNode> leafNodes = new java.util.ArrayList<>();
+ for (AreaInput area : areas) {
+ PbRTreeBuilder.RTreeNode leaf = buildLeafNode(
+ area.getPoints(),
+ area.getAreaId(),
+ area.isBlacklist()
+ );
+ if (leaf != null) {
+ leafNodes.add(leaf);
+ }
+ }
+ if (leafNodes.isEmpty()) {
+ return null;
+ }
+ return buildRTreeBytes(leafNodes);
+ }
+
+ /**
* 从多个区域的坐标点列表生成 RTree fbs 文件(多区域版本,与 C++ 完全对齐)。
*
* @param areaPoints 每个区域对应的坐标点列表
--
Gitblit v1.7.1