【发布时间】:2016-11-18 04:57:38
【问题描述】:
我希望能够让用户输入地址,并能够保存该地址,并将其转换为纬度和经度坐标。我找不到太多关于正向地理编码的文档,而且我在启动此代码时遇到了麻烦。我应该要求用户按(城市、州、邮政编码)输入地址吗?还是一个地址就足够了?有没有可以做我需要的功能?非常感谢任何帮助。
【问题讨论】:
我希望能够让用户输入地址,并能够保存该地址,并将其转换为纬度和经度坐标。我找不到太多关于正向地理编码的文档,而且我在启动此代码时遇到了麻烦。我应该要求用户按(城市、州、邮政编码)输入地址吗?还是一个地址就足够了?有没有可以做我需要的功能?非常感谢任何帮助。
【问题讨论】:
我在 github 上做了一个简单的 LocationManager 助手,你可以在其中得到你想要的东西。
库中有一个函数getReverseGeoCodedLocation。只需将您的地址作为字符串输入并获取完整的地标和纬度、经度。
在您的项目中添加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 使用免费的 Nominatim API 对 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)
})
【讨论】: