gpt4 book ai didi

r - 从数百万个 GPS 坐标中确定国家的最快方法 [R]

转载 作者:行者123 更新时间:2023-12-03 19:50:05 24 4
gpt4 key购买 nike

我有数百万个 GPS 坐标,想快速添加一列坐标所在的国家/地区。

我目前的方法有效,但速度非常慢:

library(data.table)

#REPRODUCE DATA
data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))

#REQUIRED PACKAGES
if (!require("sp")) install.packages("sp")
if (!require("rworldmap")) install.packages("rworldmap")
if (!require("sf")) install.packages("sf")
library(sp)
library(rworldmap)
library(sf)

#CURRENT SLOW FUNCTION
coords2country = function(points,latcol,loncol){
countriesSP <- getMap(resolution='low')
pointsSP <- st_as_sf(points,coords=c(loncol,latcol),crs=4326)
pointsSP<- as(pointsSP,"Spatial")
# use 'over' to get indices of the Polygons object containing each point
indices = over(pointsSP, countriesSP)
# return the ADMIN names of each country
indices$ADMIN
#indices$ISO3 # returns the ISO3 code
#indices$continent # returns the continent (6 continent model)
#indices$REGION # returns the continent (7 continent model)
}

#SLOW!
> system.time(data[,country:=coords2country(data,"latitude","longitude"),])
user system elapsed
121.293 7.849 130.226

有没有更快/更好的方法来做到这一点?谢谢!

最佳答案

有两个类似的问题。它们在我上面的评论中。问题是询问如何从坐标中获取国名。在这里,OP 询问哪种方法可以更快地完成任务。根据帖子,我们有三个选项。一种是在这个问题中使用自定义函数。另一种是使用 geonames 包。另一种是使用map.where()包中的map。第二个选项需要一些设置。所以我只是测试了 map.where() 。结果如下。正如 OP 所说,此功能的运行速度必须更快。

library(maps)
set.seed(111)
data <- data.table(latitude=sample(seq(47,52,by=0.001), 1000000, replace = TRUE),
longitude=sample(seq(8,23,by=0.001), 1000000, replace = TRUE))

system.time(data[, country := map.where(x = longitude, y = latitude)])

# user system elapsed
# 7.20 0.05 7.29

关于r - 从数百万个 GPS 坐标中确定国家的最快方法 [R],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com