将 table 列转换为空间对象
Converting table columns to spatial objects
在将原始数据从 db 转换为 sf 对象时,我正在寻找最佳可行的解决方案。
我需要创建原始坐标点(浮点类型)。我找到了一种解决方案,我们从原始数据创建 sf 对象,如下所示:
lnd_point = st_point(c(0.1, 51.5))
lnd_geom = st_sfc(lnd_point, crs = 4326)
lnd_attrib = data.frame(
name = 'London',
temperature = 25,
date = as.Date('2017-06-21')
)
lnd_sf = st_sf(lnd_attrib, geometry = lnd_geom)
遗憾的是,它不适用于 table 列。这是我的数据库 table(名为 'tableDB'):
就像上面的例子一样,首先我想创建 2 个独立的 POINT 类型的几何列(对于 lonCust/latCust 和 lonApp/latApp 使用 st_point),然后创建点列表(使用 st_sfc) 并最终创建 sf 对象(使用 st_sf),但它在我的情况下不起作用。
一般来说,我需要在 2 个单独的列(2 个几何列放置在数据框的末尾)中创建 lonCust/latCust 和 lonApp/latApp 的 POINT 数据类型。首先,我想将它们转换为 POINT,但 st_point
不适用于列,正如我之前提到的。我在书上和网上查到的是这样的:
newDF <- tableDB %>%
st_as_sf(coords = c("lonCust","latCust"), crs = 4326)
在那之后,我的 'newDF' 变成了 'sf' 和 'data.frame' object 什么都可以,但我仍然需要制作 2 个 geom 列,而不是一个。不知道如何在 df 的末尾添加第二个和更多的 geom 列。总结一下,我有几个问题:
- 将原始数据从数据库转换为空间对象(例如点)的最佳方法是什么?
- 如何向数据框添加更多几何列(如在我的示例中,我需要有 2 个几何点列:用于 ..Cust 和 ..App)?
- 减去例如lat/lon 来自原始 df 的列并创建一个新的、单独的 sf 对象?如果是这样,那么我如何 pair/assign 每个具有属性的空间点(如上面示例中的 ZLP 或 LP)?
我对将原始数据转换为空间数据的良好实践非常感兴趣 - 我想编写 Shiny 应用程序并且需要知道从哪里开始。
一个 sf
对象可以有两个几何列,但只有一个是 'active'。此处的示例和解释:https://cran.r-project.org/web/packages/sf/vignettes/sf6.html
从您在图像中发布的数据框开始并将其命名为 my_df
:
library(dplyr)
library(sf)
my_sf <- my_df %>%
st_as_sf(coords = c('lonCust', 'latCust')) %>%
st_set_crs(4326)
my_sf$geom2 <- my_df %>% st_as_sf(coords = c('lonApp', 'latApp')) %>%
st_geometry()
应该可以。以下是组成数据的示例:
x <- data.frame(id = 1:10,
lon = sample(1:10, size = 10, replace = T),
lat = sample(1:10, size = 10, replace = T),
lon2 = sample(1:10, size = 10, replace = T),
lat2 = sample(1:10, size = 10, replace = T))
xsf <- st_as_sf(x, coords = c('lon', 'lat'), remove = F)
xsf$geometry2 <- st_as_sf(x, coords = c('lon2', 'lat2')) %>%
st_geometry()
head(xsf)
#> Simple feature collection with 6 features and 5 fields
#> Active geometry column: geometry
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 1 ymin: 1 xmax: 8 ymax: 7
#> CRS: NA
#> id lon lat lon2 lat2 geometry geometry2
#> 1 1 8 1 4 4 POINT (8 1) POINT (4 4)
#> 2 2 8 6 10 8 POINT (8 6) POINT (10 8)
#> 3 3 7 7 2 6 POINT (7 7) POINT (2 6)
#> 4 4 1 1 7 2 POINT (1 1) POINT (7 2)
#> 5 5 5 3 3 9 POINT (5 3) POINT (3 9)
#> 6 6 6 2 3 8 POINT (6 2) POINT (3 8)
由 reprex package (v0.3.0)
于 2020-12-29 创建
在将原始数据从 db 转换为 sf 对象时,我正在寻找最佳可行的解决方案。 我需要创建原始坐标点(浮点类型)。我找到了一种解决方案,我们从原始数据创建 sf 对象,如下所示:
lnd_point = st_point(c(0.1, 51.5))
lnd_geom = st_sfc(lnd_point, crs = 4326)
lnd_attrib = data.frame(
name = 'London',
temperature = 25,
date = as.Date('2017-06-21')
)
lnd_sf = st_sf(lnd_attrib, geometry = lnd_geom)
遗憾的是,它不适用于 table 列。这是我的数据库 table(名为 'tableDB'):
就像上面的例子一样,首先我想创建 2 个独立的 POINT 类型的几何列(对于 lonCust/latCust 和 lonApp/latApp 使用 st_point),然后创建点列表(使用 st_sfc) 并最终创建 sf 对象(使用 st_sf),但它在我的情况下不起作用。
一般来说,我需要在 2 个单独的列(2 个几何列放置在数据框的末尾)中创建 lonCust/latCust 和 lonApp/latApp 的 POINT 数据类型。首先,我想将它们转换为 POINT,但 st_point
不适用于列,正如我之前提到的。我在书上和网上查到的是这样的:
newDF <- tableDB %>%
st_as_sf(coords = c("lonCust","latCust"), crs = 4326)
在那之后,我的 'newDF' 变成了 'sf' 和 'data.frame' object 什么都可以,但我仍然需要制作 2 个 geom 列,而不是一个。不知道如何在 df 的末尾添加第二个和更多的 geom 列。总结一下,我有几个问题:
- 将原始数据从数据库转换为空间对象(例如点)的最佳方法是什么?
- 如何向数据框添加更多几何列(如在我的示例中,我需要有 2 个几何点列:用于 ..Cust 和 ..App)?
- 减去例如lat/lon 来自原始 df 的列并创建一个新的、单独的 sf 对象?如果是这样,那么我如何 pair/assign 每个具有属性的空间点(如上面示例中的 ZLP 或 LP)?
我对将原始数据转换为空间数据的良好实践非常感兴趣 - 我想编写 Shiny 应用程序并且需要知道从哪里开始。
一个 sf
对象可以有两个几何列,但只有一个是 'active'。此处的示例和解释:https://cran.r-project.org/web/packages/sf/vignettes/sf6.html
从您在图像中发布的数据框开始并将其命名为 my_df
:
library(dplyr)
library(sf)
my_sf <- my_df %>%
st_as_sf(coords = c('lonCust', 'latCust')) %>%
st_set_crs(4326)
my_sf$geom2 <- my_df %>% st_as_sf(coords = c('lonApp', 'latApp')) %>%
st_geometry()
应该可以。以下是组成数据的示例:
x <- data.frame(id = 1:10,
lon = sample(1:10, size = 10, replace = T),
lat = sample(1:10, size = 10, replace = T),
lon2 = sample(1:10, size = 10, replace = T),
lat2 = sample(1:10, size = 10, replace = T))
xsf <- st_as_sf(x, coords = c('lon', 'lat'), remove = F)
xsf$geometry2 <- st_as_sf(x, coords = c('lon2', 'lat2')) %>%
st_geometry()
head(xsf)
#> Simple feature collection with 6 features and 5 fields
#> Active geometry column: geometry
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 1 ymin: 1 xmax: 8 ymax: 7
#> CRS: NA
#> id lon lat lon2 lat2 geometry geometry2
#> 1 1 8 1 4 4 POINT (8 1) POINT (4 4)
#> 2 2 8 6 10 8 POINT (8 6) POINT (10 8)
#> 3 3 7 7 2 6 POINT (7 7) POINT (2 6)
#> 4 4 1 1 7 2 POINT (1 1) POINT (7 2)
#> 5 5 5 3 3 9 POINT (5 3) POINT (3 9)
#> 6 6 6 2 3 8 POINT (6 2) POINT (3 8)
由 reprex package (v0.3.0)
于 2020-12-29 创建