R:如何读取oracle空间数据库?
我想从R中读取oracle spatial数据库。 此数据库包含一个具有几何图形的列: 几何1:MDSYS.SDO坐标阵列65508161897557968616514067522,06550834441763986164974471328,0655094644962858616395520924,0655109121754127686162565537,06551159517187246162009729273,0 我可以访问数据库,但无法读取此列R:如何读取oracle空间数据库?,r,oracle,odbc,sf,R,Oracle,Odbc,Sf,我想从R中读取oracle spatial数据库。 此数据库包含一个具有几何图形的列: 几何1:MDSYS.SDO坐标阵列65508161897557968616514067522,06550834441763986164974471328,0655094644962858616395520924,0655109121754127686162565537,06551159517187246162009729273,0 我可以访问数据库,但无法读取此列 library(tidyverse) lib
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_几何函数来提取坐标?据我所知,sf包仅支持Postgres数据库直接检索几何列
可以做的一件事是在查询中附加Get_WKT方法,以将几何体转换为已知文本,如下所示:
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方法的链接-当我使用Get.WKT=>几何体WKB/WKT生成不支持3D几何体我被缩写为使用dbGetQuerycon提取坐标,选择ID、SDO_util.to_gmlgeometrygeometry1作为表1的测试,并在该字符串中进行一些提取