我希望能够让用户输入一个地址,并能够保存该地址,并将其转换为纬度和纵向坐标。我无法找到有关前向地理编码的大量文档,而且我无法启动此代码。我应该要求用户输入(城市,州,邮政编码)地址吗?或者单个地址是否足够?有功能可以做我需要的吗?非常感谢任何帮助。
答案 0 :(得分:1)
我在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
输出
答案 1 :(得分:0)
如果您想避免使用付费的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)
})