Skip to content

Commit 2065ea1

Browse files
RicterZclaude
andcommitted
fix: 修复跳转 Apple Maps 坐标偏移问题
Apple Maps 中国大陆底图使用 GCJ-02 坐标系,直接传入数据库存储的 WGS-84 坐标会被错误解析,导致约 300+ 米的位置漂移。 生成导航 URL 前先调用 wgs84ToGcj02() 转换坐标,境外标记不受影响。 Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
1 parent e463f84 commit 2065ea1

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

src/components/map/map-popup.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Popup } from 'react-map-gl/maplibre'
66
import { MarkerCoordinates } from '@/types/marker'
77
import { useMapStore } from '@/store/map-store'
88
import { cn } from '@/utils/cn'
9+
import { wgs84ToGcj02 } from '@/lib/coord-transform'
910

1011
interface MapPopupProps {
1112
coordinates: MarkerCoordinates
@@ -153,7 +154,7 @@ export const MapPopup = ({
153154
{isSidebarShowingThisMarker ? '收起' : '查看'}
154155
</button>
155156
<a
156-
href={`https://maps.apple.com/?ll=${selectedMarker.coordinates.latitude},${selectedMarker.coordinates.longitude}&q=${encodeURIComponent(selectedMarker.content.title || '标记位置')}`}
157+
href={(() => { const gcj = wgs84ToGcj02(selectedMarker.coordinates.longitude, selectedMarker.coordinates.latitude); return `https://maps.apple.com/?ll=${gcj.latitude},${gcj.longitude}&q=${encodeURIComponent(selectedMarker.content.title || '标记位置')}` })()}
157158
target="_blank"
158159
rel="noopener noreferrer"
159160
className="flex-1 px-2 py-1.5 text-xs font-medium rounded-lg bg-green-50 text-green-600 hover:bg-green-100 transition-colors flex items-center justify-center gap-1"

src/components/sidebar/sidebar.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useRef, useCallback, useState, useEffect } from 'react'
44
import { useMapStore } from '@/store/map-store'
55
import { cn } from '@/utils/cn'
66
import { toast } from 'sonner'
7+
import { wgs84ToGcj02 } from '@/lib/coord-transform'
78

89
interface SidebarProps {
910
onClose?: () => void
@@ -285,7 +286,7 @@ export const Sidebar = ({ onClose }: SidebarProps) => {
285286

286287
{selectedMarker && (
287288
<a
288-
href={`https://maps.apple.com/?ll=${selectedMarker.coordinates.latitude},${selectedMarker.coordinates.longitude}&q=${encodeURIComponent(selectedMarker.content.title || '标记位置')}`}
289+
href={(() => { const gcj = wgs84ToGcj02(selectedMarker.coordinates.longitude, selectedMarker.coordinates.latitude); return `https://maps.apple.com/?ll=${gcj.latitude},${gcj.longitude}&q=${encodeURIComponent(selectedMarker.content.title || '标记位置')}` })()}
289290
target="_blank"
290291
rel="noopener noreferrer"
291292
className="p-2 rounded-lg text-gray-500 hover:text-green-600 hover:bg-green-50 transition-all duration-200 min-h-[40px] min-w-[40px] flex items-center justify-center"

0 commit comments

Comments
 (0)