代码之家  ›  专栏  ›  技术社区  ›  kee

如何用ST_距离和ST_变换计算英里数距离

  •  2
  • kee  · 技术社区  · 7 年前

    我的表中有纬度/经度点,我想用英里来计算它们之间的距离。

    2 回复  |  直到 7 年前
        1
  •  4
  •   JGH    7 年前

    一种方法是选择适合您感兴趣区域的坐标系。其中一些单位有英尺,另一些单位是米。在这两种情况下,您都需要将找到的距离转换为英里。

    例如,其中xxxx是使用米的坐标系,例如UTM:

    select 
      st_distance(
         st_transform(point1.geom, 4326, xxxx),
         st_transform(point2.geom, 4326, xxxx)
      ) *  0.000621371192  as dist_miles;
    

    既然你提到你是新手,选择合适的坐标系可能有点困难。然后,使用 geography

    select 
      st_distance(
         point1.geom::geography,
         point2.geom::geography
      ) *  0.000621371192  as dist_miles;
    
        2
  •  0
  •   Nate xin ding    7 年前

    如果您想使用 library(sf) 这是一条路。

    首先,用 st_as_sf() .

    library(sf)
    
    my_data <- data.frame(
        lat = c(87.5, 88.5),
        lon = c(35, 26),
        name = c("A", "B")
    )
    
    my_sf <- st_as_sf(my_data,
             coords = c("lon", "lat"), # x, y (order matters)
             crs = 4326)
    

    st_distance() 得到一个返回的成对距离矩阵。

    st_distance(my_sf)
    Units: m
             [,1]     [,2]
    [1,]      0.0 116733.7
    [2,] 116733.7      0.0
    

    因为我们设置了 crs 以平方英尺() .

    units::set_units()

    st_distance(my_sf) %>%
        units::set_units(mi)
    
    Units: mi
             [,1]     [,2]
    [1,]  0.00000 72.53493
    [2,] 72.53493  0.00000