【问题标题】:CLGeocoder: US state Names are coming as a short codesCLGeocoder:美国各州名称以短代码形式出现
【发布时间】:2015-09-18 11:21:38
【问题描述】:

我正在使用 iOS 8.0 开发应用程序。

通过下面的链接,我正在分配位置对象, How can I get current location from user in iOS

我的目标是通过当前位置找出城市、州和国家/地区的名称。 使用此链接的答案,我得到了 Apple 地理编码器中使用的地标对象。 Get current city and country from CLGeocoder?

我一切都好,只是

当我得到 Country United States 的州名时。 它给了我简码,而不是给我完整的州名。

例如对于Alaska,它给了我AK 对于Alabama,它给了我AL

就像这是我的日志,

 North Kingstown, RI, United States

我想要完整的州名,因为我想在我的项目中使用完整的州名。

我通过此代码获取州名,

 NSString *stateName=myPlacemark.administrativeArea;

【问题讨论】:

标签: ios objective-c iphone cocoa clgeocoder


【解决方案1】:

@Arpit B Parekh 有 Swift 3 版本的答案:

let stateCodes = ["AL","AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]
let fullStateNames = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]

func shortStateName(_ state:String) -> String {
    let lowercaseNames = fullStateNames.map { $0.lowercased() }
    let dic = NSDictionary(objects: stateCodes, forKeys: lowercaseNames as [NSCopying])
    return dic.object(forKey:state.lowercased()) as? String ?? state}

func longStateName(_ stateCode:String) -> String {
    let dic = NSDictionary(objects: fullStateNames, forKeys:stateCodes as [NSCopying])
    return dic.object(forKey:stateCode) as? String ?? stateCode
}

【讨论】:

    【解决方案2】:

    带有美国州列表 + ISO 代码的 Swift 5 枚举:

    https://gist.github.com/SergLam/a252dd01324b5e2c04ecbe79cbb6b8fb

    // https://en.wikipedia.org/wiki/List_of_U.S._state_and_territory_abbreviations
    // https://en.wikipedia.org/wiki/ISO_3166-2
    
    // NOTE: - Last two symbols from ISO 3166-2 state code
    enum USAState: Int, CaseIterable {
        
        case alabama = 1
        case alaska = 2
        case arizona = 3
        case arkansas = 4
        case california = 5
        case colorado = 6
        case connecticut = 7
        case delaware = 8
        case districtOfColumbia = 9
        case florida = 10
        case georgia = 11
        case hawaii = 12
        case idaho = 13
        case illinois = 14
        case indiana = 15
        case iowa = 16
        case kansas = 17
        case kentucky = 18
        case louisiana = 19
        case maine = 20
        case maryland = 21
        case massachusetts = 22
        case michigan = 23
        case minnesota = 24
        case mississippi = 25
        case missouri = 26
        case montana = 27
        case nebraska = 28
        case nevada = 29
        case newHampshire = 30
        case newJersey = 31
        case newMexico = 32
        case newYork = 33
        case northCarolina = 34
        case northDakota = 35
        case ohio = 36
        case oklahoma = 37
        case oregon = 38
        case pennsylvania = 39
        case rhodeIsland = 40
        case southCarolina = 41
        case southDakota = 42
        case tennessee = 43
        case texas = 44
        case utah = 45
        case vermont = 46
        case virginia = 47
        case washington = 48
        case westVirginia = 49
        case wisconsin = 50
        case wyoming = 51
        
        var displayName: String {
            switch self {
            case .alabama:
                return "Alabama"
            case .alaska:
                return "Alaska"
            case .arizona:
                return "Arizona"
            case .arkansas:
                return "Arkansas"
            case .california:
                return "California"
            case .colorado:
                return "Colorado"
            case .connecticut:
                return "Connecticut"
            case .delaware:
                return "Delaware"
            case .districtOfColumbia:
                return "District of Columbia"
            case .florida:
                return "Florida"
            case .georgia:
                return "Georgia"
            case .hawaii:
                return "Hawaii"
            case .idaho:
                return "Idaho"
            case .illinois:
                return "Illinois"
            case .indiana:
                return "Indiana"
            case .iowa:
                return "Iowa"
            case .kansas:
                return "Kansas"
            case .kentucky:
                return "Kentucky"
            case .louisiana:
                return "Louisiana"
            case .maine:
                return "Maine"
            case .maryland:
                return "Maryland"
            case .massachusetts:
                return "Massachusetts"
            case .michigan:
                return "Michigan"
            case .minnesota:
                return "Minnesota"
            case .mississippi:
                return "Mississippi"
            case .missouri:
                return "Missouri"
            case .montana:
                return "Montana"
            case .nebraska:
                return "Nebraska"
            case .nevada:
                return "Nevada"
            case .newHampshire:
                return "New Hampshire"
            case .newJersey:
                return "New Jersey"
            case .newMexico:
                return "New Mexico"
            case .newYork:
                return "New York"
            case .northCarolina:
                return "North Carolina"
            case .northDakota:
                return "North Dakota"
            case .ohio:
                return "Ohio"
            case .oklahoma:
                return "Oklahoma"
            case .oregon:
                return "Oregon"
            case .pennsylvania:
                return "Pennsylvania"
            case .rhodeIsland:
                return "Rhode Island"
            case .southCarolina:
                return "South Carolina"
            case .southDakota:
                return "South Dakota"
            case .tennessee:
                return "Tennessee"
            case .texas:
                return "Texas"
            case .utah:
                return "Utah"
            case .vermont:
                return "Vermont"
            case .virginia:
                return "Virginia"
            case .washington:
                return "Washington"
            case .westVirginia:
                return "West Virginia"
            case .wisconsin:
                return "Wisconsin"
            case .wyoming:
                return "Wyoming"
            }
        }
        
        var stateCode: String {
            switch self {
            case .alabama:
                return "AL"
            case .alaska:
                return "AK"
            case .arizona:
                return "AZ"
            case .arkansas:
                return "AR"
            case .california:
                return "CA"
            case .colorado:
                return "CO"
            case .connecticut:
                return "CT"
            case .delaware:
                return "DE"
            case .districtOfColumbia:
                return "DC"
            case .florida:
                return "FL"
            case .georgia:
                return "GA"
            case .hawaii:
                return "HI"
            case .idaho:
                return "ID"
            case .illinois:
                return "IL"
            case .indiana:
                return "IN"
            case .iowa:
                return "IA"
            case .kansas:
                return "KS"
            case .kentucky:
                return "KY"
            case .louisiana:
                return "LA"
            case .maine:
                return "ME"
            case .maryland:
                return "MD"
            case .massachusetts:
                return "MA"
            case .michigan:
                return "MI"
            case .minnesota:
                return "MN"
            case .mississippi:
                return "MS"
            case .missouri:
                return "MO"
            case .montana:
                return "MT"
            case .nebraska:
                return "NE"
            case .nevada:
                return "NV"
            case .newHampshire:
                return "NH"
            case .newJersey:
                return "NJ"
            case .newMexico:
                return "NM"
            case .newYork:
                return "NY"
            case .northCarolina:
                return "NC"
            case .northDakota:
                return "ND"
            case .ohio:
                return "OH"
            case .oklahoma:
                return "OK"
            case .oregon:
                return "OR"
            case .pennsylvania:
                return "PA"
            case .rhodeIsland:
                return "RI"
            case .southCarolina:
                return "SC"
            case .southDakota:
                return "SD"
            case .tennessee:
                return "TN"
            case .texas:
                return "TX"
            case .utah:
                return "UT"
            case .vermont:
                return "VT"
            case .virginia:
                return "VA"
            case .washington:
                return "WA"
            case .westVirginia:
                return "WV"
            case .wisconsin:
                return "WI"
            case .wyoming:
                return "WY"
            }
        }
        
        var isoStateCode: String {
            switch self {
            default:
                return "USA-\(self.stateCode)"
            }
        }
        
    }
    

    【讨论】:

      【解决方案3】:

      因为,我只使用 Apple 的 GeoCoder。它只给了我美国各州的短代码。例如加利福尼亚州的 CA。

      我用过google,但解析起来相当困难。 解决方案来自维基百科。https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States

      我已准备以下来源以使用短代码中的全名。

      NSArray *arrayShortCodes=[[NSArray alloc] initWithObjects:@"AL",@"AK",@"AZ",@"AR",@"CA",@"CO",@"CT",@"DE",@"DC",@"FL",@"GA",@"HI",@"ID",@"IL",@"IN",@"IA",@"KS",@"KY",@"LA",@"ME",@"MD",@"MA",@"MI",@"MN",@"MS",@"MO",@"MT",@"NE",@"NV",@"NH",@"NJ",@"NM",@"NY",@"NC",@"ND",@"OH",@"OK",@"OR",@"PA",@"RI",@"SC",@"SD",@"TN",@"TX",@"UT",@"VT",@"VA",@"WA",@"WV",@"WI",@"WY",nil];
          NSArray *arrayFullNames=[[NSArray alloc] initWithObjects:@"Alabama",@"Alaska",@"Arizona",@"Arkansas",@"California",@"Colorado",@"Connecticut",@"Delaware",@"District of Columbia",@"Florida",@"Georgia",@"Hawaii",@"Idaho",@"Illinois",@"Indiana",@"Iowa",@"Kansas",@"Kentucky",@"Louisiana",@"Maine",@"Maryland",@"Massachusetts",@"Michigan",@"Minnesota",@"Mississippi",@"Missouri",@"Montana",@"Nebraska",@"Nevada",@"New Hampshire",@"New Jersey",@"New Mexico",@"New York",@"North Carolina",@"North Dakota",@"Ohio",@"Oklahoma",@"Oregon",@"Pennsylvania",@"Rhode Island",@"South Carolina",@"South Dakota",@"Tennessee",@"Texas",@"Utah",@"Vermont",@"Virginia",@"Washington",@"West Virginia",@"Wisconsin",@"Wyoming", nil];
      
           dictionaryStateNames =[[NSDictionary alloc] initWithObjects:arrayFullNames forKeys:arrayShortCodes];
      

      现在,我们可以使用 NSDictionary 的 valueForKey 方法轻松地从短代码中获取全名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2010-10-04
        • 2011-08-09
        • 2021-08-22
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多