我想从R读取一个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)空间数据库。该数据库包含一个具有geometry的列: geometry1 : oracle
我有权访问数据库,但无法读取此列
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()“函数来提取坐标吗?
发布于 2018-09-19 04:36:18
据我所知,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方法的链接- https://docs.oracle.com/database/121/SPATL/sdo_geometry-methods.htm#SPATL498
https://stackoverflow.com/questions/51594135
复制相似问题