[英]Distance between all the points to the first point
我在街道上有点,我试图计算所有点和街道上第一个点之间的距离
这是我的 sf 对象:
library(rgeos)
library(rgdal)
library(sf)
#I actually have multiple points on a segment of 5 Km
df <- data.frame(lon = c(-121.95, -121.96, -121.97, -121.98), lat = c(37.35,37.36,37.37,37.38))
coordinates(df) <- c("lon", "lat")
proj4string(df) <- CRS("+init=epsg:4326")
df_sf <- st_as_sf(df) %>% st_transform(3488)
我试过 st_distance 但距离不正确。 我得到的是让每一个点都到街道的起点直到终点。 所以基本上它必须从0到5000m。
如果您将by_element
参数添加到st_distance()
,我想您会得到想要的结果。 如果您将by_element
为 FALSE(默认值),您将得到一个矩阵。
st_distance(x = df_sf,
y = df_sf[1,],
by_element = TRUE)
Units: [m]
[1] 0.000 1420.606 2841.141 4261.604
请注意,距离与其他答案 b/c df_sf 的投影略有不同。 如果我们使用未投影的df
对象,则距离匹配:
st_distance(x = df,
y = df[1,],
by_element = T)
Units: [m]
[1] 0.000 1420.098 2840.125 4260.079
编辑回复评论:订单
距离将按照您的数据框的顺序排列。 在您的示例中,它们碰巧按升序排列。
您可以将距离添加为新列,然后使用dplyr
对该列进行dplyr
。 请注意,此处必须使用by_element
参数,因为新列不接受矩阵作为值。
library(dplyr)
df_sf %>%
mutate(dist_to_first = st_distance(x = df_sf,
y = df_sf[1,],
by_element = TRUE)) %>%
arrange(dist_to_first)
Simple feature collection with 4 features and 1 field
geometry type: POINT
dimension: XY
bbox: xmin: -175068.7 ymin: -72303.08 xmax: -172485.1 ymax: -68913.94
epsg (SRID): 3488
proj4string: +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
dist_to_first geometry
1 0.000 [m] POINT (-172485.1 -72303.08)
2 1420.606 [m] POINT (-173346.5 -71173.46)
3 2841.141 [m] POINT (-174207.7 -70043.74)
4 4261.604 [m] POINT (-175068.7 -68913.94)
distGeo
包具有用于此类计算的distGeo
函数:
library(geosphere)
df <- data.frame(lon = c(-121.95, -121.96, -121.97, -121.98), lat = c(37.35,37.36,37.37,37.38))
#calculate dist from first row
# to all rows in df
distGeo(df[1,], df)
[1] 0.000 1420.098 2840.125 4260.079
对于distGeo
,第一列是经度,第二列是纬度,输出以米为单位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.