【问题标题】:Turning Longitudes and Latitudes into UK Postcodes in R在 R 中将经度和纬度转换为英国邮政编码
【发布时间】:2018-01-08 15:18:18
【问题描述】:

我有大量包含经度和纬度的数据,我想将其转换为英国邮政编码。我首先尝试下载所有英国邮政编码及其对应的 long/lat,然后将数据连接在一起。这适用于某些数据,但由于邮政编码的纬度和经度是每个邮政编码的中心,因此大多数数据不匹配,而我的数据更准确。

我还尝试了一些代码,将美国的 Lat/long 转换为相应的状态(由 Josh O'Brien 提供 Latitude Longitude Coordinates to State Code in R),但我找不到将其更改为英国的方法邮政编码。

我还尝试运行一个计算,试图找到最接近 long/lat 的邮政编码,但这会创建一个太大的文件,R 无法处理。

还看到了一些使用谷歌地图(地理编码)的代码,这似乎确实有效,但我读过它每天只允许 2000 次计算,我还有更多(大约 500 万行数据)

【问题讨论】:

  • convert 你的意思是找到最近的?如果是这样,而 R 无法解决这个问题,那么您可以尝试专用的 GIS 软件,例如,这可以在 PostGIS 中完成,我也想在 QGIS 中完成。
  • 我讨厌 GIS 人群 FUD abt R。它非常快(它使用大多数 GIS 产品使用的相同底层库),尤其是 sf。 @Naveed:你有带有邮政编码信息的 shapefile 吗?
  • 感谢您的评论@hrbrmstr,我目前没有 shapefile,我拥有的唯一邮政编码信息是所有英国邮政编码的列表以及它们代表的经度和纬度
  • 谢谢@DanWinchester,是的,我的意思是找到最近的。我可能会尝试将此作为最后的手段,因为我以前没有使用过 GIS 软件。它能处理 500 万条记录吗?如果没有,这可能会被分解
  • 你不能只对你的邮政编码进行地理编码,例如与postcodes.io

标签: r google-maps latitude-longitude reverse-geocoding postal-code


【解决方案1】:

您可能想试试我的PostcodesioR package,它包含反向地理编码功能。但是,对 postcodes.io 的 API 调用次数是有限制的。

devtools::install_github("ropensci/PostcodesioR")
library(PostcodesioR)
reverse_geocoding(0.127, 51.507)

另一种选择是使用此功能对多于一对地理坐标进行反向地理编码:

geolocations_list <- structure(
 list(
 geolocations = structure(
 list(
 longitude = c(-3.15807731271522, -1.12935802905177),
 latitude = c(51.4799900627036, 50.7186356978817),
 limit = c(NA, 100L),
 radius = c(NA, 500L)),
 .Names = c("longitude", "latitude", "limit", "radius"),
 class = "data.frame",
 row.names = 1:2)),
 .Names = "geolocations")

bulk_rev_geo <- bulk_reverse_geocoding(geolocations_list)

bulk_rev_geo[[1]]$result[[1]]

鉴于您的数据集的大小和 API 调用的通常限制,您可能需要下载最新的 database 以及英国地理数据并将其加入您的文件中。

【讨论】:

  • 感谢这个Epo3,你知道批量反向地理编码是否有限制吗?例如,上面的代码会被归类为一次运行还是 2 次(因为您将 2 长/纬度更改为邮政编码)?如果它是 1,那么我可以将我的数据拆分一下并运行它们
  • 不知道。我从来没有达到极限。
  • 这是因为您一直使用低于限制 (2500) 的数据,还是您还没有遇到问题?
【解决方案2】:

我相信你想用谷歌地图 API 做"Reverse Geocoding"。也就是解析经纬度,得到最近的地址。之后,您可以轻松地从地址中获取邮政编码。 (它是您从 google maps API 作为地址收到的列表中的一项。)

该 api(我上次检查)允许每天 2500 次免费调用,但您可以做一些技巧(取决于您的数据集)来匹配更多记录:

  1. 您可以每天使用 2400 条记录填充数据集,直到完成或
  2. 您可以多次更改 IP 和 API 密钥以在一天内获得更多记录,或者
  3. 您始终可以获得高级 API 密钥并为您提出的请求数量付费

几年前我按照这个流行的教程在 R 中进行了这样的地理编码:https://www.r-bloggers.com/using-google-maps-api-and-r/

很遗憾,教程代码有点过时,因此您需要修复一些问题以使其适应您的需求。

【讨论】:

  • 嗨 Borislav,谢谢你,但我已经涉足了一点。我目前有大约 500 万行数据,所以这不会真正起作用(即使我把它分解成更小的部分)
猜你喜欢
  • 2012-10-30
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2017-05-23
相关资源
最近更新 更多