2016-11-18 3 views
0

Я ищу, чтобы иметь возможность вводить адрес пользователя и сохранять этот адрес и преобразовывать его в широтные и продольные координаты. Я не смог найти много документации по геокодированию вперед, и у меня возникли проблемы с запуском этого кода. Должен ли я попросить пользователя ввести адрес (город, штат, почтовый индекс)? Или достаточно одного адреса? Есть ли функция, которая может делать то, что мне нужно? Буду признателен за любую оказанную помощь.Форвардное геокодирование с Swift

ответ

1

Я сделал простой 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

Выход

enter image description here Примечание: - Это для Swift 3.0 и выше

+0

Привет @Rajan Махешвари, код, который вы размещены на GitHub именно то, что я искал! Однако я ввел файл LocationManager.swift в свой проект и использовал приведенный выше код, вводя адресную переменную в ваш адрес, однако, когда я пытаюсь его преобразовать, он ничего не печатает (даже ошибки). Есть ли у вас какие-либо идеи, что может произойти неправильно? – Kevin

+0

@Kevin Что вы вводите в адрес String и какую версию xcode используете? –

+0

Также используйте отладчик, попадает ли он в блок завершения или нет? Я только что написал New Delhi в textView и напечатал полный lat long и адрес –

0

Если вы хотите, чтобы избежать платную 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) 
})