CLGeocoder reverseGeocodeLocation возвращает метку с другой широтой/долготой? (пример детской площадки прилагается)

Почему CLGeocoder reverseGeocodeLocation возвращает метку с другой широтой/долготой при поиске адреса?

Предыстория: с точки зрения пользователя, «долго нажимающего» на карте, чтобы поместить булавку, но мой код реверсирует геокодирование, чтобы иметь возможность поместить имя области на булавку, но тогда сброшенный пин-код находится в другом месте (т.е. не хороший пользовательский опыт). Итак, я ищу способ использовать широту/долготу, которую фактически выбрал пользователь, но затем просто найдите название местоположения.

Пример: с кодом ниже я вижу:

  • Ввод: -28,7780218895614, 152,978574011267
  • ВЫХОД: -28.864405, 153.0001191

Код:

import UIKit
import CoreLocation
import PlaygroundSupport

// Initial Test Co-ordinate
let locInput = CLLocation(latitude: -28.778021889561444, longitude: 152.97857401126666)
print("Input: \(locInput.coordinate.latitude), \(locInput.coordinate.longitude)")

// Initiate Reverse Geocoding
let geocoder: CLGeocoder = CLGeocoder()
print("About to call reverse geocoding function")
geocoder.reverseGeocodeLocation(locInput) { placemarks, error in
    guard let placemarks = placemarks else {fatalError("No Placemarks Provided \(error?.localizedDescription)")}
    for p in placemarks {
        print("OUTPUT:  \(p.location!.coordinate.latitude), \(p.location!.coordinate.longitude)")
    }
}

// Enable Asynch
PlaygroundPage.current.needsIndefiniteExecution = true

person Greg    schedule 27.02.2017    source источник
comment
PS. Или подход в этом случае состоит в том, чтобы взять метку, возвращенную reverseGeocodeLocation, и использовать строки местоположения, сублокации, страны, но НЕ это местоположение / координату, НО скорее использовать координату из длительного нажатия?   -  person Greg    schedule 28.02.2017


Ответы (1)


Это правильное поведение. Метка вернет связанное с ней местоположение. Который, очевидно, мог отличаться от входного. Когда вы указываете местоположение геокодировщику, он «выводит» метку, которую вы хотите получить.

Предположим это:

 a: Associated location with the empire state building.
 b: Location you provided from an long press for instance.

    -------
    |     |
    |  a  | --> CLPlacemark: Empire state building, location: a
    |    b|
    ------- 

Вы были правы в своих предположениях. :)

person Ricowere    schedule 05.03.2017