为什么我只能反转中国境内的地理编码位置?

Why can I only reverse geocode location that are inside China?

我使用 Apple 的 CLGeocoder,当我检索地标的地址字典时,它对于中国境内的位置是预期的,但对于其他国家/地区的请求是空的。

CLGeocoder 不是应该在全球范围内工作吗?

这是我打印 addressDictionary 时得到的结果:

[FormattedAddressLines: (
    ""
), CountryCode: ]

我尝试将我的设备设置为英文,因为我知道它会更改 addressDictionary 的内容,但没有成功。

Apple 为位于中国的用户使用高德地图,不允许访问国外位置的地图相关数据。所以我认为没有办法在中国以外的地方使用 CLGeocoder。我想我会在那种情况下使用 Google API。

经过一些测试后,Geocoder 服务有两种设置:

  1. 高德 (amap.com) 中国大陆用户
  2. Apple Map 世界其他地区(我没有尝试过所有国家)

正如您所解释的,高德服务无法对中国大陆以外的位置使用地理编码。 打印出 [CLPlacemark]

即可看到这两个服务

我们可以看到不一样的version_domain:

对于中国:

"version_domain" = (
                autonavi,
                revgeo,
                cn );

中国以外(日本):

"version_domain" = (
                apple,
                revgeo,
                JP );

怎么办?

好吧,即使有时 Geocode 可能有效,我们也不能依赖它。我们也不能依赖 Google,因此您可以查看 Nokia Here Map。否则你应该改变你的应用程序与中国用户互动的方式。或许你可以只为中文AppStore发布一个特定的应用程序。

如何在开发过程中更改Geocoder?

就我而言,只要我连接到中国 phone 运营商(例如:中国移动),地图就会切换到高德。使用 Wifi 也会产生同样的效果。

我做的是使用飞行模式,然后连接到中国境外的VPN,最后我杀掉并重启我的应用程序。

您需要在模拟器上模拟位置,然后在您的 Mac 上使用 VPN。

结论

中国对开发者来说并不容易,但我相信总有解决办法。