Я ищу, чтобы иметь возможность вводить адрес пользователя и сохранять этот адрес и преобразовывать его в широтные и продольные координаты. Я не смог найти много документации по геокодированию вперед, и у меня возникли проблемы с запуском этого кода. Должен ли я попросить пользователя ввести адрес (город, штат, почтовый индекс)? Или достаточно одного адреса? Есть ли функция, которая может делать то, что мне нужно? Буду признателен за любую оказанную помощь.Форвардное геокодирование с Swift
ответ
Я сделал простой LocationManager помощник на github, в котором вы можете получить то, что хотите.
В библиотеке есть функция getReverseGeoCodedLocation
. Просто введите свой адрес как String и получите полную метку и лат, longs.
Добавить файл LocationManager.swift
в проекте
Как использовать: -
LocationManager.sharedInstance.getReverseGeoCodedLocation(address: yourAddress, completionHandler: { (location:CLLocation?, placemark:CLPlacemark?, error:NSError?) in
if error != nil {
print((error?.localizedDescription)!)
return
}
if placemark == nil {
print("Location can't be fetched")
return
}
print(placemark?.addressDictionary?.description ?? "")
print((placemark?.location?.coordinate.latitude)!)
print((placemark?.location?.coordinate.longitude)!)
})
Внутренне он использует geocodeAddressString
из CLGeocoder
Выход
Если вы хотите, чтобы избежать платную Google Maps API (для коммерческих целей) и использование CLLocation вы также можете взглянуть на NominatimSwift: https://github.com/caloon/NominatimSwift Это, пожалуй, наиболее простое решение, если вы просто хотите геокодировать , (Отказ от ответственности: я сделал это)
NominatimSwift использует бесплатный API Nominatim для геокодирования данных OpenStreetMap. Вы также можете найти достопримечательности. Это требует подключения к сети.
геокодирования адреса и достопримечательности:
Nominatim.getLocation(fromAddress: "The Royal Palace of Stockholm", completion: {(error, location) -> Void in
print("Geolocation of the Royal Palace of Stockholm:")
print("lat = " + (location?.latitude)! + " lon = " + (location?.longitude)!)
})
обратного геокодирования:
Nominatim.getLocation(fromLatitude: "55.6867243", longitude: "12.5700724", completion: {(error, location) -> Void in
print("City for geolocation 55.6867243/12.5700724:")
print(location?.city)
})
Привет @Rajan Махешвари, код, который вы размещены на GitHub именно то, что я искал! Однако я ввел файл LocationManager.swift в свой проект и использовал приведенный выше код, вводя адресную переменную в ваш адрес, однако, когда я пытаюсь его преобразовать, он ничего не печатает (даже ошибки). Есть ли у вас какие-либо идеи, что может произойти неправильно? – Kevin
@Kevin Что вы вводите в адрес String и какую версию xcode используете? –
Также используйте отладчик, попадает ли он в блок завершения или нет? Я только что написал New Delhi в textView и напечатал полный lat long и адрес –