Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 两组坐标之间的最小距离_R_Geocoding - Fatal编程技术网

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)