首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在搜索位置时,如何确定字符串是自然语言还是地址?

在搜索位置时,如何确定字符串是自然语言还是地址?
EN

Stack Overflow用户
提问于 2015-11-18 05:13:44
回答 2查看 98关注 0票数 1

我正在尝试实现一个像搜索栏一样的苹果地图,让用户能够找到一个特定的位置或地址,并在搜索到的位置保存一个别针。现在,我了解了如何获取自然语言中的地址,以及如何从地址中获取坐标。但我不知道如何有效地解析字符串并知道发出哪个请求。我在网上找不到任何东西,只有关于电子邮件地址的文章。任何强调标准/良好实现的信息都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2015-11-18 05:34:15

您可以使用CLGeocoder检查字符串是否为位置。你可以这样格式化你的代码:

代码语言:javascript
复制
var geocoder = CLGeocoder()
        geocoder.geocodeAddressString(address) { (placemarks, error) -> Void in
            if let placemark = placemarks![0] as? CLPlacemark  {
                print("place")
            } else {
                print("string")
            }
        }

但是,如果在大型阵列上使用,这可能是密集型的。但作为搜索栏应该没问题!

票数 1
EN

Stack Overflow用户

发布于 2015-11-18 08:35:08

多亏了Maclean和Location Manager by Varshyl Mobile。注意:这是我能够想出的解决我的问题的答案;在弹出正确的自然语言位置方面仍然存在问题。

代码语言:javascript
复制
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address as String, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in

        if (error != nil) {
            print("error")
        }
        else{
            if let placemark = placemarks?.first {
                let address = AddressParser()
                address.parseAppleLocationData(placemark)
                let addressDict = address.getAddressDictionary()
                print("searched address")
                print(addressDict)
            }
            else {
                print("invalid address")
            }
        }

    })

下面是我在上面提到的库中使用的类/函数。

代码语言:javascript
复制
private class AddressParser: NSObject{

 private var latitude = NSString()
 private var longitude  = NSString()
 private var streetNumber = NSString()
 private var route = NSString()
 private var locality = NSString()
 private var subLocality = NSString()
 private var formattedAddress = NSString()
 private var administrativeArea = NSString()
 private var administrativeAreaCode = NSString()
 private var subAdministrativeArea = NSString()
 private var postalCode = NSString()
 private var country = NSString()
 private var subThoroughfare = NSString()
 private var thoroughfare = NSString()
 private var ISOcountryCode = NSString()
 private var state = NSString()


override init(){

    super.init()

}

private func getAddressDictionary()-> NSDictionary{

    let addressDict = NSMutableDictionary()

    addressDict.setValue(latitude, forKey: "latitude")
    addressDict.setValue(longitude, forKey: "longitude")
    addressDict.setValue(streetNumber, forKey: "streetNumber")
    addressDict.setValue(locality, forKey: "locality")
    addressDict.setValue(subLocality, forKey: "subLocality")
    addressDict.setValue(administrativeArea, forKey: "administrativeArea")
    addressDict.setValue(postalCode, forKey: "postalCode")
    addressDict.setValue(country, forKey: "country")
    addressDict.setValue(formattedAddress, forKey: "formattedAddress")

    return addressDict
}


private func parseAppleLocationData(placemark:CLPlacemark){

    let addressLines = placemark.addressDictionary!["FormattedAddressLines"] as! NSArray

    //self.streetNumber = placemark.subThoroughfare ? placemark.subThoroughfare : ""
    self.streetNumber = (placemark.thoroughfare != nil ? placemark.thoroughfare : "")!
    self.locality = (placemark.locality != nil ? placemark.locality : "")!
    self.postalCode = (placemark.postalCode != nil ? placemark.postalCode : "")!
    self.subLocality = (placemark.subLocality != nil ? placemark.subLocality : "")!
    self.administrativeArea = (placemark.administrativeArea != nil ? placemark.administrativeArea : "")!
    self.country = (placemark.country != nil ?  placemark.country : "")!
    self.longitude = placemark.location!.coordinate.longitude.description;
    self.latitude = placemark.location!.coordinate.latitude.description
    if(addressLines.count>0){
        self.formattedAddress = addressLines.componentsJoinedByString(", ")}
    else{
        self.formattedAddress = ""
    }


} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33767115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档