使用Swift进行前向地理编码

时间:2016-11-18 04:57:39

标签: swift mkmapview geocoding

我希望能够让用户输入一个地址,并能够保存该地址,并将其转换为纬度和纵向坐标。我无法找到有关前向地理编码的大量文档,而且我无法启动此代码。我应该要求用户输入(城市,州,邮政编码)地址吗?或者单个地址是否足够?有功能可以做我需要的吗?非常感谢任何帮助。

2 个答案:

答案 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

输出

enter image description here 注意: - 适用于Swift 3.0及以上版本

答案 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)
})