mirror of
https://github.com/xweiba/location-spoofer.git
synced 2026-09-27 00:51:55 +08:00
fix: 固定坐标 (22.283819,114.158439) 反查,返回林士街=GCJ-02
This commit is contained in:
@@ -25,26 +25,22 @@ enum CoordinateConverter {
|
|||||||
@MainActor private static var lastTileCheck: Date?
|
@MainActor private static var lastTileCheck: Date?
|
||||||
@MainActor private static var tileCheckPending = false
|
@MainActor private static var tileCheckPending = false
|
||||||
|
|
||||||
/// 后台反查坐标地名:返回中文名称 → GCJ-02,否则 → WGS-84(30s 缓存)
|
/// 固定坐标反查:返回"林士街"=GCJ-02高德瓦片,否则=WGS-84(30s缓存)
|
||||||
@MainActor
|
@MainActor
|
||||||
private static func detectTileByGeocode(lat: Double, lon: Double) {
|
static func detectTileByFixedGeocode() {
|
||||||
guard !tileCheckPending else { return }
|
guard !tileCheckPending else { return }
|
||||||
if let last = lastTileCheck, -last.timeIntervalSinceNow < 30 { return }
|
if let last = lastTileCheck, -last.timeIntervalSinceNow < 30 { return }
|
||||||
tileCheckPending = true
|
tileCheckPending = true
|
||||||
let loc = CLLocation(latitude: lat, longitude: lon)
|
let loc = CLLocation(latitude: 22.283819, longitude: 114.158439)
|
||||||
let req = MKLocalSearch.Request()
|
let req = MKLocalSearch.Request()
|
||||||
req.region = MKCoordinateRegion(center: loc.coordinate, latitudinalMeters: 200, longitudinalMeters: 200)
|
req.region = MKCoordinateRegion(center: loc.coordinate, latitudinalMeters: 200, longitudinalMeters: 200)
|
||||||
MKLocalSearch(request: req).start { response, _ in
|
MKLocalSearch(request: req).start { response, _ in
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
defer { tileCheckPending = false }
|
defer { tileCheckPending = false }
|
||||||
guard let name = response?.mapItems.first?.name else {
|
let name = response?.mapItems.first?.name ?? ""
|
||||||
RuntimeLogger.info("APP", "坐标转换", "反查地名: 无结果", details: ["坐标": "\(lat), \(lon)"])
|
let newType: CoordType = (name == "林士街") ? .gcj02 : .wgs84
|
||||||
return
|
RuntimeLogger.info("APP", "坐标转换", "固定坐标反查 → \(newType.rawValue)", details: [
|
||||||
}
|
"名称": name
|
||||||
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)"
|
|
||||||
])
|
])
|
||||||
if newType != currentTileType {
|
if newType != currentTileType {
|
||||||
currentTileType = newType
|
currentTileType = newType
|
||||||
@@ -59,7 +55,7 @@ enum CoordinateConverter {
|
|||||||
/// 地图坐标 → WGS-84 存储
|
/// 地图坐标 → WGS-84 存储
|
||||||
@MainActor
|
@MainActor
|
||||||
static func toStored(lat: Double, lon: Double) -> (lat: Double, lon: Double) {
|
static func toStored(lat: Double, lon: Double) -> (lat: Double, lon: Double) {
|
||||||
detectTileByGeocode(lat: lat, lon: lon)
|
detectTileByFixedGeocode()
|
||||||
guard currentTileType == .gcj02 else {
|
guard currentTileType == .gcj02 else {
|
||||||
RuntimeLogger.info("APP", "坐标转换", "toStored: 不转 瓦片=\(currentTileType.rawValue)", details: [
|
RuntimeLogger.info("APP", "坐标转换", "toStored: 不转 瓦片=\(currentTileType.rawValue)", details: [
|
||||||
"lat": String(lat), "lon": String(lon)
|
"lat": String(lat), "lon": String(lon)
|
||||||
@@ -79,7 +75,7 @@ enum CoordinateConverter {
|
|||||||
/// WGS-84 存储 → 当前地图瓦片坐标系(显示用)
|
/// WGS-84 存储 → 当前地图瓦片坐标系(显示用)
|
||||||
@MainActor
|
@MainActor
|
||||||
static func toDisplay(lat: Double, lon: Double) -> (lat: Double, lon: Double) {
|
static func toDisplay(lat: Double, lon: Double) -> (lat: Double, lon: Double) {
|
||||||
detectTileByGeocode(lat: lat, lon: lon)
|
detectTileByFixedGeocode()
|
||||||
guard currentTileType == .gcj02 else {
|
guard currentTileType == .gcj02 else {
|
||||||
RuntimeLogger.info("APP", "坐标转换", "toDisplay: WGS-84 → 不转 瓦片=\(currentTileType.rawValue)", details: [
|
RuntimeLogger.info("APP", "坐标转换", "toDisplay: WGS-84 → 不转 瓦片=\(currentTileType.rawValue)", details: [
|
||||||
"lat": String(lat), "lon": String(lon)
|
"lat": String(lat), "lon": String(lon)
|
||||||
|
|||||||
Reference in New Issue
Block a user