R 两组坐标之间的最小距离
我有两个不同大小的数据框,其中包含地理代码。第一个(R 两组坐标之间的最小距离,r,geocoding,R,Geocoding,我有两个不同大小的数据框,其中包含地理代码。第一个(df)有12000个观测值,第二个(学校)有3000个观测值 第一个包含国家财产的地理编码,第二个包含国家学校的地理编码 我想找出每个物业最近学校的距离。使用geosphere包,我目前正在处理以下内容: library(geosphere) for(i in 1:length(df$longitude)){ df$dist2[i] <- distm(c(schools[1, 3], schools[1, 2]), c(df$long
df
)有12000个观测值,第二个(学校)有3000个观测值
第一个包含国家财产的地理编码,第二个包含国家学校的地理编码
我想找出每个物业最近学校的距离。使用geosphere
包,我目前正在处理以下内容:
library(geosphere)
for(i in 1:length(df$longitude)){
df$dist2[i] <- distm(c(schools[1, 3], schools[1, 2]), c(df$longitude[i], df$latitude[i]), fun = distHaversine) *0.001
}
库(geosphere)
用于(1中的i:长度(df$经度)){
df$dist2[i]在下面的示例中,我创建了点和学校的经度/纬度数据
library(tidyverse)
library(geosphere)
df_points <- data.frame(lon = rnorm(10, mean =4, sd = 0.5), lat = rnorm(10, mean = 50, sd= 0.1))
df_schools <- data.frame(lon = rnorm( 3, mean =4, sd = 0.5), lat = rnorm( 3, mean = 50, sd= 0.1))
distm(df_points, df_schools, fun = distHaversine ) %>%
as.data.frame() %>%
rownames_to_column(var = "point_id") %>%
mutate(point_id = as.numeric(point_id)) %>%
gather(key = school, value = distance, -point_id) %>%
group_by(point_id) %>%
summarise(smalles_distance = min(distance))
库(tidyverse)
图书馆(地球圈)
df_分数%
行名称到列(var=“point\u id”)%>%
变异(点id=as.numeric(点id))%>%
聚集(关键点=学校,值=距离,-点id)%>%
分组依据(点id)%>%
总结(小距离=最小距离)
在下面的示例中,我创建了点和学校的经度/纬度数据
library(tidyverse)
library(geosphere)
df_points <- data.frame(lon = rnorm(10, mean =4, sd = 0.5), lat = rnorm(10, mean = 50, sd= 0.1))
df_schools <- data.frame(lon = rnorm( 3, mean =4, sd = 0.5), lat = rnorm( 3, mean = 50, sd= 0.1))
distm(df_points, df_schools, fun = distHaversine ) %>%
as.data.frame() %>%
rownames_to_column(var = "point_id") %>%
mutate(point_id = as.numeric(point_id)) %>%
gather(key = school, value = distance, -point_id) %>%
group_by(point_id) %>%
summarise(smalles_distance = min(distance))
库(tidyverse)
图书馆(地球圈)
df_分数%
行名称到列(var=“point\u id”)%>%
变异(点id=as.numeric(点id))%>%
聚集(关键点=学校,值=距离,-点id)%>%
分组依据(点id)%>%
总结(小距离=最小距离)
这是一种使用sp类对象的方法。您可以使用以下内容将data.frame对象强制转换为SpatialPointsDataFrame对象:坐标(x)这是一种使用sp类对象的方法。您可以使用以下内容将data.frame对象强制转换为SpatialPointsDataFrame对象:坐标(x)
d <- spDists(x = properties, y = schools, longlat = TRUE)
diag(d) <- NA
colnames(d) <- schools$ids
sdist <- rep(NA, nrow(d))
sid <- rep(NA, nrow(d))
for(i in 1:nrow(d)) {
srow <- d[i,]
sdist[i] <- srow[which.min(srow)]
sid[i] <- names(srow)[which.min(srow)]
}
properties$school <- sid
properties$dist <- sdist
par(mfrow=c(2,1))
plot(properties, pch=19, cex=0.5)
plot(schools, pch=19, col="red", add=TRUE)
plot(e, add=TRUE)
title("random properties (black) and schools (red)", cex=0.5)
plot(properties, col="white")
plot(properties[1,], pch=19, cex=2, add=TRUE)
plot(schools[which(schools$ids %in% properties[1,]$school),],
pch=19, cex=2, col="red", add=TRUE)
plot(e, add=TRUE)
title("Property 1 (black) and closest school (red)", cex=0.5)
sidx <- which(schools$ids %in% properties[1,]$school)
text(coordinates(schools[sidx,]),
label = schools[sidx,]$ids, col="blue", cex=1)