fix: 固定坐标 (22.283819,114.158439) 反查,返回林士街=GCJ-02

This commit is contained in:
xweiba
2026-08-06 00:33:26 +08:00
parent 96012f5afa
commit 577a1bdb24
+9 -13
View File
@@ -25,26 +25,22 @@ enum CoordinateConverter {
@MainActor private static var lastTileCheck: Date?
@MainActor private static var tileCheckPending = false
/// GCJ-02 WGS-8430s
/// ""=GCJ-02=WGS-8430s
@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)