diff --git a/entry/src/main/ets/components/FbDayEventPanel.ets b/entry/src/main/ets/components/FbDayEventPanel.ets index 158eaa6..32d84b8 100644 --- a/entry/src/main/ets/components/FbDayEventPanel.ets +++ b/entry/src/main/ets/components/FbDayEventPanel.ets @@ -196,8 +196,12 @@ export struct FbDayEventPanel { .onClick((): void => { /* 有坐标就带坐标(同名地点不会搜错城市);没有就让 FbNav 自己地理编码 */ const hasPos: boolean = ev.toLng !== '' && ev.toLat !== ''; + /* ⚠️ 格式是「地名 + 空格 + lat,lng」,**不是** `lat,lng?地名`。 + 后者会把 `?` 留在地名里(`FbNav.parseGeoOf()` 剪掉坐标后 + 剩下的就是地名,`?` 会一起留下),于是高德的目的地标题 + 显示成「?青岛北站」。详见 `FbEventSheet.navTargetOf()` 的说明。 */ const target: string = hasPos - ? (ev.toLat + ',' + ev.toLng + '?' + ev.toPlace) + ? (ev.toPlace + ' ' + ev.toLat + ',' + ev.toLng) : ev.toPlace; fbOpenNavigation(getContext(this) as common.UIAbilityContext, target, ev.toPlace); diff --git a/entry/src/main/ets/components/FbEventSheet.ets b/entry/src/main/ets/components/FbEventSheet.ets index fd1f45f..7376ee9 100644 --- a/entry/src/main/ets/components/FbEventSheet.ets +++ b/entry/src/main/ets/components/FbEventSheet.ets @@ -255,7 +255,25 @@ export struct FbEventSheet { */ private navTargetOf(place: string, lng: string, lat: string): string { if (lng !== '' && lat !== '') { - return lat + ',' + lng + '?' + place; + /* 🔴 2026-11-05(用户:「点进去导航之后,为什么目的地地址前面有个问号」): + 原来拼的是 `lat,lng?地名` —— 那个 `?` 是我照抄 `geo:` URI 的写法, + 但这个字符串**不是 URI**,它是交给 `fbOpenNavigation()` 的普通文本。 + + `FbNav.parseGeoOf()` 的动作是: + ① 正则抓出 `数字,数字` 当坐标; + ② `clean` = **把坐标从原文里剪掉之后剩下的文字**,用作地名。 + ⇒ 传 `36.168977,120.375693?青岛北站` 时,剪掉坐标后剩下 `?青岛北站` + ⇒ 地名带着问号进了高德的 `dname`,目的地标题就成了「?青岛北站」。 + + ⇒ 改成**地名在前、空格、坐标在后**: + `青岛北站 36.168977,120.375693` + 剪掉坐标剩「青岛北站」,正好就是要显示的名字。 + + ⚠️ 顺序不能反过来:地名放后面虽然坐标照样能解析, + 但 `clean` 会剩「青岛北站」(如果地名在前)—— + 放后面则剩「青岛北站」也行;不过坐标在前时 + `clean` 前面会多一个空串拼接,最稳妥还是地名在前。 */ + return place + ' ' + lat + ',' + lng; } return place; }