вам нужен обратный геокодер, или вы можете использовать Google Map API, чтобы отправить координаты и получить адрес, а затем проанализировать. Вот пример геокодера
CLGeocoder *geocoder = [CLGeocoder new];
CLLocation *newLocation = [[CLLocation alloc]initWithLatitude:21.1700
longitude:72.8300];
[geocoder reverseGeocodeLocation:newLocation
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"Geocode failed with error: %@", error);
return; // Request failed, log error
}
// Check if any placemarks were found
if (placemarks && placemarks.count > 0)
{
CLPlacemark *placemark = placemarks[0];
// Dictionary containing address information
NSDictionary *addressDictionary =
placemark.addressDictionary;
// Extract address information
NSLog(@"%@ ", addressDictionary);
NSString *address = [addressDictionary
objectForKey:(NSString *)kABPersonAddressStreetKey];
NSString *city = [addressDictionary
objectForKey:(NSString *)kABPersonAddressCityKey];
NSString *state = [addressDictionary
objectForKey:(NSString *)kABPersonAddressStateKey];
NSString *zip = [addressDictionary
objectForKey:(NSString *)kABPersonAddressZIPKey];
NSLog(@"%@ %@ %@ %@", address,city, state, zip);
}
}];
ОБНОВЛЕНИЕ: ваш код быстро попробуйте
Предположим, у вас есть
var currentLocation : CLLocation!
Используйте это удовольствие c, чтобы получить адрес
func getAdress(completion: @escaping (_ address: String?, _ error: Error?) -> ()){
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(self.currentLocation) { placemarks, error in
if let e = error{
completion(nil, e)
} else {
let placeArray = placemarks
var placemark: CLPlacemark!
placemark = placeArray?[0]
// guard let address = placemark.addressDictionary as? JSONDictionary else {
// return
// }
let street = placemark.thoroughfare != nil ? placemark.thoroughfare! : ""
let city = placemark.subAdministrativeArea != nil ? placemark.subAdministrativeArea! : ""
let state = placemark.administrativeArea != nil ? placemark.administrativeArea! : ""
let zip = placemark.isoCountryCode != nil ? placemark.administrativeArea! : ""
let country = placemark.country != nil ? placemark.administrativeArea! : ""
//
let address = "\(street) \(city) \(state) \(zip) \(country) "
completion(address, nil)
}
}
}
используется
if self.currentLocation != nil {
self.getAdress { (jsonDict, error) in
if error != nil {
return
} else {
//let classObj = LocationOrganizer(jsonDict: jsonDict!)
let classObj = LocationOrganizer(str: jsonDict!)
print(classObj)
}
}
}
и класс LocationOrganizer:
class LocationOrganizer {
var locationString : String!
init(str: String) {
self.locationString = str
}
}
, и в вашей ситуации просто конвертируйте CLLocationCoordinate2D в CLLocation
let currentLocation = CLLocation(latitude: lat, longitude: long)
тогда вызывай веселье c