我想从R读取一个oracle空间数据库。这个数据库包含一个几何列:geometry1:MDSYS.SDO_ORDINATE_ARRAY(655081,618975579,6861651,4067522,0,655083,444176393,6861649,74471328,0,655094,644962858, 6861639,54520924,0,655109,121754127,6861626,36255537,0,655115,951718724,6861620,09729273,0)
我有权访问数据库但无法读取此列
library(tidyverse)
library(DBI)
library(odbc)
con <- dbConnect(odbc::odbc(), database ="Database_oracle", UID="id", PWD="pw")
这工作:
data <- dbGetQuery(con, "SELECT ID
FROM TABLE_1") %>%
as_tibble()
但这不是:
data <- dbGetQuery(con, "SELECT ID, geometry1
FROM TABLE_1") %>%
as_tibble()
ORA-01024:OCI调用中的数据类型无效
有没有办法用sf :: st_read读取坐标?我是否必须在我的SQL查询中使用一些“SDO_GEOMETRY()”函数来提取坐标?
据我所知,sf
包只支持Postgres数据库直接检索几何列。
您可以做的一件事是在查询中附加Get_WKT()
方法,将几何转换为“Well-Known Text”,如下所示:
data <- dbGetQuery(con, "SELECT ID, geometry1.Get_WKT() FROM TABLE1")
# Then
st_as_sf(data, wkt = 2) # set `wkt` parameter to column index
请注意投影信息在这里丢失,您需要在之后添加它。希望这可以帮助!
编辑:这里是Oracle的SDO_GEOMETRY方法的链接 - https://docs.oracle.com/database/121/SPATL/sdo_geometry-methods.htm#SPATL498