为什么我不能获得与Apple Weather App相同的位置?

时间:2017-05-13 17:12:41

标签: cllocationmanager cllocation

我想显示用户的城市&在我的申请中陈述。但是,我似乎无法填充所需的城市。

我目前在俄亥俄州的新奥尔巴尼。 Apple的Weather应用程序正确显示:

Screenshot of Apple's Weather app for iOS

但是,在使用CoreLocation时,我将收到俄亥俄州的哥伦布市。

这是我当前位置的地图(New Albany),显示了与哥伦布,OH的距离:

Screenshot of Apple's Maps app for macOS

当我print收到CLPlacemark时,我会收到以下信息:

7070 Bayton Pl, 
7070 Bayton Pl, New Albany, OH  43054, United States 
@ <+40.10695990,-82.82727340> +/- 100.00m, 
region CLCircularRegion (identifier:'<+40.10795920,-82.82855810> radius 296.54', center:<+40.10795920,-82.82855810>, radius:296.54m)

注意 - 上述CLPlacemark有点不准确,因为地址不是我的地址。

但是,当我print CLPlacemark locality时,我会收到以下信息:

Columbus

我的CLLocationManager配置如下:

locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
locationManager.distanceFilter = 3000

当我确定用户已获得授权的位置服务时,我致电:

locationManager.startUpdatingLocation()

无论我如何配置CLLocationManager,我永远不会返回New Albany作为locality。我甚至尝试将CLLocationManager的{​​{1}}设置为desiredAccuracy以查看是否有帮助,但事实并非如此。

我做错了什么导致我收到哥伦布而不是新奥尔巴尼?

更新1

我尝试了下面的解决方案,但它不可靠,因为包含城市,州和邮政编码的kCLLocationAccuracyBestForNavigation有时位于第一,第二或第三个索引,具体取决于地址。

我是否需要获取String,使用addressDictionary获取值数组,然后手动解析城市?

更新2

我打印了返回的FormattedAddressLines,这就是我收到的内容:

CLPlacemark

很明显,Optional([AnyHashable("Street"): 7070 Bayton Pl, AnyHashable("ZIP"): 43054, AnyHashable("Country"): United States, AnyHashable("SubThoroughfare"): 7070, AnyHashable("State"): OH, AnyHashable("Name"): 7070 Bayton Pl, AnyHashable("SubAdministrativeArea"): Franklin, AnyHashable("Thoroughfare"): Bayton Pl, AnyHashable("FormattedAddressLines"): <__NSArrayM 0x618000053fe0>( 7070 Bayton Pl, New Albany, OH 43054, United States ) , AnyHashable("City"): Columbus, AnyHashable("CountryCode"): US, AnyHashable("PostCodeExtension"): 8120]) 字典中的城市值New Albany与FormattedAddressLines的{​​{1}}值CLPlacemark不匹配。

更新3

以下是检索当前位置的整个对象:

locality

0 个答案:

没有答案