From 577a1bdb2479ae8b9cae025835822bd4b3277c4f Mon Sep 17 00:00:00 2001 From: xweiba Date: Thu, 6 Aug 2026 00:33:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BA=E5=AE=9A=E5=9D=90=E6=A0=87=20(?= =?UTF-8?q?22.283819,114.158439)=20=E5=8F=8D=E6=9F=A5=EF=BC=8C=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=9E=97=E5=A3=AB=E8=A1=97=3DGCJ-02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared/CoordinateConverter.swift | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Shared/CoordinateConverter.swift b/Shared/CoordinateConverter.swift index e1ffd5b..94dbdca 100644 --- a/Shared/CoordinateConverter.swift +++ b/Shared/CoordinateConverter.swift @@ -25,26 +25,22 @@ enum CoordinateConverter { @MainActor private static var lastTileCheck: Date? @MainActor private static var tileCheckPending = false - /// 后台反查坐标地名:返回中文名称 → GCJ-02,否则 → WGS-84(30s 缓存) + /// 固定坐标反查:返回"林士街"=GCJ-02高德瓦片,否则=WGS-84(30s缓存) @MainActor - private static func detectTileByGeocode(lat: Double, lon: Double) { + static func detectTileByFixedGeocode() { guard !tileCheckPending else { return } if let last = lastTileCheck, -last.timeIntervalSinceNow < 30 { return } tileCheckPending = true - let loc = CLLocation(latitude: lat, longitude: lon) + let loc = CLLocation(latitude: 22.283819, longitude: 114.158439) let req = MKLocalSearch.Request() req.region = MKCoordinateRegion(center: loc.coordinate, latitudinalMeters: 200, longitudinalMeters: 200) MKLocalSearch(request: req).start { response, _ in Task { @MainActor in defer { tileCheckPending = false } - guard let name = response?.mapItems.first?.name else { - RuntimeLogger.info("APP", "坐标转换", "反查地名: 无结果", details: ["坐标": "\(lat), \(lon)"]) - return - } - let hasChinese = name.unicodeScalars.contains { $0.value >= 0x4E00 && $0.value <= 0x9FFF } - let newType: CoordType = hasChinese ? .gcj02 : .wgs84 - RuntimeLogger.info("APP", "坐标转换", "反查地名: \(name) → \(newType.rawValue)", details: [ - "含中文": String(hasChinese), "坐标": "\(lat), \(lon)" + let name = response?.mapItems.first?.name ?? "" + let newType: CoordType = (name == "林士街") ? .gcj02 : .wgs84 + RuntimeLogger.info("APP", "坐标转换", "固定坐标反查 → \(newType.rawValue)", details: [ + "名称": name ]) if newType != currentTileType { currentTileType = newType @@ -59,7 +55,7 @@ enum CoordinateConverter { /// 地图坐标 → WGS-84 存储 @MainActor static func toStored(lat: Double, lon: Double) -> (lat: Double, lon: Double) { - detectTileByGeocode(lat: lat, lon: lon) + detectTileByFixedGeocode() guard currentTileType == .gcj02 else { RuntimeLogger.info("APP", "坐标转换", "toStored: 不转 瓦片=\(currentTileType.rawValue)", details: [ "lat": String(lat), "lon": String(lon) @@ -79,7 +75,7 @@ enum CoordinateConverter { /// WGS-84 存储 → 当前地图瓦片坐标系(显示用) @MainActor static func toDisplay(lat: Double, lon: Double) -> (lat: Double, lon: Double) { - detectTileByGeocode(lat: lat, lon: lon) + detectTileByFixedGeocode() guard currentTileType == .gcj02 else { RuntimeLogger.info("APP", "坐标转换", "toDisplay: WGS-84 → 不转 瓦片=\(currentTileType.rawValue)", details: [ "lat": String(lat), "lon": String(lon)