R:如何阅读oracle空间数据库?

问题描述 投票:0回答:1

我想从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()”函数来提取坐标?

r oracle odbc sf
1个回答
1
投票

据我所知,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

© www.soinside.com 2019 - 2024. All rights reserved.