在最近的学习中,大量使用到了地理编码与地理逆编码,然而不幸的是目前广泛在 R 中介绍的能完成该任务的包因为 API 的 Breaking Upgrade 很多功能已经失效了。尤其是意外的发现,目前的包主要由百度地图 API 作数据源,于是为了满足在 R 中使用高德地图 API 进行地理编码与逆编码的需求,开发了 amapGeocode
这款包,如果能对有同样需求的同学有任何帮助,将不胜荣幸。
什么是地理编码/逆编码
根据地理小子在文章《地理编码与逆地理编码(上)——理解地理编码》中的陈述:
地理编码指将地名的详细地址以地理坐标(如经纬度)表示的过程。其中,将地址信息映射为地理坐标的过程称之为地理编码;将地理坐标转换为地址信息的过程称之为逆地理编码。如图1.1所示为地理编码和逆地理编码的关系。
无论是在科学研究还是数据处理的过程中,凡是涉及到位置信息的情况,经常会使用到地理编码与逆编码:例如给定样本的地址,将其转换为经纬度以便进行量化计算并进行可视化;亦或者给定样本地址信息,将其按照行政区域进行分类以便进行分组并统计。
如何在 R 中进行地理编码/逆编码
目前进行地理编码/逆编码的方法通常是使用地图供应商提供的 API 获取信息。在 R 中目前常使用 tidygeocoder,baidumap 以及 baidugeo 等 Package 完成这类任务。然而,其中 tidygeocoder 使用国际地理信息供应商,其准确度以及信息覆盖程度尚不能令人满意;而后两者因为百度地图 API 的升级,导致目前 Package 不能被新用户调用(其中前者笔者已经提交了 Request,不过是否会被合并还需要进一步等待;后者笔者正在和开发者进行更新,具体修复时间还需等待)。
此外,通过笔者在实际项目的使用过程中发现,在相当多的情况下,高德地图提供的地理编码/逆编码信息似乎好于百度地图,当然因为没有进行客观的对照分析,仅作为个人体验以作参考,如有谬误,您说的对。
amapGeocode
基于以上原因,笔者使用高德开放平台 API 编写了用于 R 的地理编码/逆编码的 Package amapGeocode。代码托管于 Github。具体的高德文档可以查看这里和这里。
目前 amapGeocode 支持通过 getCoord()
进行地理编码,即根据地址获取坐标等信息;以及通过 getLocation()
进行地理逆编码,即根据经纬度获取地址等信息。此外还可以通过 getAdmin()
获取给定行政区其下属行政区(JSON
和 XML
支持多级行政区)。
上述 function 支持输入单条的文本地址/坐标/行政区,同时也支持批量输入信息,其默认返回结果为 tibble, 同时也可以返回原生的 JSON
格式以及 XML
格式,此时批量查询的地址将以 list
的结构保存。
安装
目前可以通过下列命令从 CRAN 安装稳定版: