2017-02-03 4 views
0

Я пытаюсь выяснить, как обратный геокод a CLLocation хранится в CloudKit. У меня есть место, хранящееся в записи, и я знаю, что оно хранится как широта и долгота. Here's my record. The latitude and longitude appear I just took them out for now. Однако я хочу, чтобы ваше местоположение было удобным для чтения, поэтому AKA обратного геокода, чтобы получить город и штат. И я смотрел здесь до сих пор, но ничего на обратном геокодировании местоположение, которое я могу хранить в CloudKit.Как изменить географическую широту и долготу от местоположения, хранящегося в CloudKit? - Swift 3

Вот моя модель:

class Peek: CloudKitSyncable { 

    static let kType = "Peek" 
    static let kPhotoData = "photoData" 
    static let kTimeStamp = "timestamp" 
    static let kTitle = "title" 
    static let kText = "text" 
    static let kLocation = "location" 
    static let kCity = "city" 

    let title: String 
    let text: String 
    let photoData: Data? 
    let timestamp: Date 
    var location: CLLocation 
    var comments: [Comment] 
    var photo: UIImage? { 

     guard let photoData = self.photoData else { return nil } 
     return UIImage(data: photoData) 
    } 

    init(title: String, timestamp: Date = Date(), text: String, photoData: Data?, comments: [Comment] = [], location: CLLocation) { 
     self.title = title 
     self.timestamp = timestamp 
     self.text = text 
     self.photoData = photoData 
     self.comments = comments 
     self.location = location 
    } 

    var recordType: String { 
     return Peek.kType 
    } 

    var cloudKitRecordID: CKRecordID? 

    convenience required init?(record: CKRecord) { 

     guard let timestamp = record.creationDate, 
      let photoAsset = record[Peek.kPhotoData] as? CKAsset, 
      let title = record[Peek.kTitle] as? String, 
      let text = record[Peek.kText] as? String, 
     let location = record[Peek.kLocation] as? CLLocation else { return nil } 
     let photoData = try? Data(contentsOf: photoAsset.fileURL) 
     self.init(title: title, timestamp: timestamp, text: text, photoData: photoData, location: location) 
     cloudKitRecordID = record.recordID 
    } 

    fileprivate var temporaryPhotoURL: URL { 
     let temporaryDirectory = NSTemporaryDirectory() 
     let temporaryDirectoryURL = URL(fileURLWithPath: temporaryDirectory) 
     let fileURL = temporaryDirectoryURL.appendingPathComponent(UUID().uuidString).appendingPathExtension("jpg") 

     try? photoData?.write(to: fileURL, options: .atomic) 

     return fileURL 
    } 

} 
extension CKRecord { 

    convenience init(_ peek: Peek) { 
     let recordID = CKRecordID(recordName: UUID().uuidString) 
     self.init(recordType: peek.recordType, recordID: recordID) 

     self[Peek.kTitle] = peek.title as String? as CKRecordValue? 
     self[Peek.kText] = peek.text as String? as CKRecordValue? 
     self[Peek.kTimeStamp] = peek.timestamp as CKRecordValue? 
     self[Peek.kLocation] = peek.location as CKRecordValue? 
     self[Peek.kPhotoData] = CKAsset(fileURL: peek.temporaryPhotoURL) 
    } 
} 

У меня также есть файл LocationManager, а также:

ответ

0

Apple, обеспечивает метод, встроенный в CLGeocoder класса Core Location в. Here are the docs. В случае успеха обработчик завершения даст вам доступ к массиву CLPlacemark, чтобы вы могли захватить один из них и получить доступ к тому, который вам нужен для чтения человеком. Имена переменных довольно общие, чтобы охватить местоположения по всему миру, поэтому вам придется немного подраться, чтобы найти именно то, что вам нужно. Check the docs на CLPlacemark для получения точной информации о доступных вам переменных. В вашем конкретном случае вам понадобятся locality и administrativeArea для города и штата, соответственно.

Usage будет что-то вроде этого:

let geocoder = CLGeocoder() 
geocoder.reverseGeocodeLocation(location) { (placemarks, error) in 
    guard let placemarks = placemarks, let placemark = placemarks.first else { return } 
    if let city = placemark.locality, let state = placemark.administrativeArea { 
    //Set your labels or whatever 
    } 
} 
+0

Классные спасибо! Догадаться. –

Смежные вопросы