Я хочу разработать приложение, которое отображает OpenStreetMap в автономном режиме. Я сохраняю плитку OpenStreetMap следующим образом: < /p> [code]class HomeViewController: UIViewController, GMSMapViewDelegate, CLLocationManagerDelegate, DistanceCalculationDelegate{ func startMonitoringNetwork() { if let currentLatString = UserDefaults.standard.string(forKey: "myLat"), let currentLonString = UserDefaults.standard.string(forKey: "myLon"), let currentLat = Double(currentLatString), let currentLon = Double(currentLonString) { let zoomLevel = 15 let centerTileCoords = tileCoordinates(fromLatitude: currentLat, longitude: currentLon, zoomLevel: zoomLevel)
let range = 4 for dx in -range...range { for dy in -range...range { let tileX = centerTileCoords.x + dx let tileY = centerTileCoords.y + dy downloadTile(zoom: zoomLevel, x: tileX, y: tileY) } } } }
func downloadTile(zoom: Int, x: Int, y: Int) { let urlString = "https://tile.openstreetmap.org/\(zoom)/\(x)/\(y).png" guard let url = URL(string: urlString) else { return } print(url) let task = URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data, error == nil else { return }
let zoomDir = documentsDirectory.appendingPathComponent("tiles/\(zoom)") let xDir = zoomDir.appendingPathComponent("\(x)")
if !fileManager.fileExists(atPath: xDir.path) { try? fileManager.createDirectory(at: xDir, withIntermediateDirectories: true) }
let tileFilePath = xDir.appendingPathComponent("\(y).png") do { try data.write(to: tileFilePath) print("Tile saved: \(tileFilePath.path)") } catch { print("Error saving tile: \(error)") } } } < /code> Следующие данные сохраняются таким образом. < /p> [list] [*]file://var/mobile/containers/data/application/2316925a-8954-4407-a286-af81f862f2d2/documents/tiles/15/29096/12903.png [*]file://var/mobile/containers/data/application/2316925a-8954-4407-a286-af81f862f2d2/documents/tiles/15/29096/12903.png [*]file://var/mobile/containers/data/application/2316925a-8954-4407-a286-af81f862f2d2/documents/tiles/15/29096/12903.png [*]file:///var/mobile/Containers/Data/Application/2316925A-8954-4407-A286-AF81F862F2D2/Documents/tiles/15/29096/12903.png [/list] But the data taken out are these С следующим кодом: < /p> class OpenStreetMapController: UIViewController, MKMapViewDelegate { @IBOutlet weak var openStreetMap: MKMapView!
let tileFilePath = documentsDirectory .appendingPathComponent("tiles/\(path.z)") .appendingPathComponent("\(path.x)") .appendingPathComponent("\(path.y).png") print(tileFilePath)
if let tileData = try? Data(contentsOf: tileFilePath) { result(tileData, nil) } else { result(nil, NSError(domain: "TileErrorDomain", code: 1, userInfo: nil)) } } [/code] [list] [*]file://var/mobile/containers/data/application/7c2ab696-8425-4da7-a2aa-0856c4b4c677/documents/tiles/17/35/139.png />[*]file://var/mobile/containers/data/application/7c2ab696-8425-4da7-a2aa-0856c4b4c677/documents/tiles/6/54/24.png [*]file://var/mobile/containers/data/application/7c2ab696-8425-4da7-a2aa-0856c4b4c677/documents/tiles/6/57/26.png [*]file://var/mobile/containers/data/application/7c2ab696-8425-4da7-a2aa-0856c4b4c677/documents/tiles/6/57/20.png [/list] Я разрабатываю этот код с CHATGPT, но это неверно. Я не знаю, как решить эту проблему.