前言

在开发中,经常会用到地理编码和逆地理编码来获得地图的数据,地理编码的话还是比较简单的,下面来说说坐标逆地理编码中遇到的那些坑。
  • 这里面只针对国外坐标来说
  • 使用三种逆地理编码
  • CLGeocoder Google逆地理编码 OSM逆地理编码

CLGeocoder

对于iOS开发来说,逆地理编码首先想到的便是自带的CLGeocoder了,我们使用

来进行逆地理编码请求。

我传入CLLocation经纬度,会返回CLPlacemarkCLPlacemark中的属性对应为下:

  • location 地理位置
  • region 区域信息
  • addressDictionary 详细的地址信息字典
  • name 地址名称
  • locality 城市名称

解析后拿到想要的数据即可。

但是使用CLLocation来进行逆地理编码, 经常会返回错误,这里我们要注意的是,声明CLGeocoder时,我们要用全局变量。

@property (nonatomic ,strong) CLGeocoder * geocoder;

用懒加载即可:

对于使用CLLocation返回的语言,网上的给出的回答是和设备设置的语言有关,代码如下

在逆编码结束的时候使用

然后我人身在韩国时,发现App中返回的语言是当地语言韩文,并非是手机设置的中文,上面的方法并没有什么用,便打消了使用自带的逆地理编码,决定使用google的逆地理编码API。

Google逆地理编码

只是用谷歌的逆地理编码不展示地图的话,并不需要pod谷歌地图的SDK,
Geocoding API 支持直接使用 latlng 参数进行反向地理编码。
Google Maps Geocoding API 请求必须采用以下形式:

其中的json可以换成xml来设定输出结果格式。使用谷歌在中国的api也很简单,如下:

可以参阅
谷歌开发人员指南
进行参数的增添修改,就不在这里指出了,值得注意的是这里有个language的语言属性,我们想要返回中文添加参数language=zh-CN
以韩国首尔经纬度为例,json返回结果:

它返回了多个数组,地址将按照具体程度由高到低的顺序返回;最确切的地址将作为最显著的结果,你需要解析拿到自己最想的数据。

OSM逆地理编码

OSM就是OpenStreetMap,维基世界地图,一个开源的在线地图项目,包括软件和地图数据。官方网址:OpenStreetMap,同样,使用OSM逆地理编码国外坐标,我们也不需要安装其SDK,直接使用它的API,文档如下

值得注意的是,它的参数中有一个zoom对象,根据你设置的zoom大小来返回数据信息,zoom可以设置 0-18之间的数字,0代表国家,18代表房屋细节等。
这里我们使用zoom=15来返回数据如下:

它所返回的数据,虽然没有看到设置的返回语言,但是我在韩国的时候,真机测试,返回的语言为中文,可能根据手机系统语言设置有关。
我查看了关于OSM的许可证书,至少不修改它的地图只是用它逆地理编码,并不会涉及到法律问题。

总结如下

  • 1.苹果自带的CLGeocoder在国外逆地理编码时候并不好用,经常解析失败。使用的话注意定义全局变量,返回的数据语言是否是随手机设置语言还有待考证,至少我身在韩国的时候返回的是当地语言。
  • 2.使用谷歌逆地理编码,返回的数据注意解析它精确度及语言设置。对于我只想要中文的,返回数据并不算好用。
  • 3.OSM的逆地理编码,注意甚至zoom,不修改它源码情况下,只是用api,并不涉及法律问题。

如上。
若有问题和更好的解决方法,请留言,谢谢。


丶伊眸冷

静水流深,沧笙踏歌;三生阴晴圆缺,一朝悲欢离合。

发表评论

邮箱地址不会被公开。 必填项已用*标注

我不是机器人*