Отредактировано: я добавил данные для входа в демонстрационную версию SQL Server 2017.
Я запрашиваю SQL Сервер из R, используя драйвер FreeTDS (предпочтительнее, чем драйвер Microsoft odb c, так как он поддерживает Windows аутентификацию в Linux).
Я пытаюсь интерпретировать столбец геометрии с помощью st_read
.
Соединение инициируется следующим образом:
library(odbc)
library(DBI)
library(sf)
username <- 'SO-user'
sql_server_ip <- '35.214.169.110'
password <- 'SQLaskingfortrouble?!'
con <- dbConnect(odbc(),
Driver = "FreeTDS",
Server = sql_server_ip,
Database = "stackoverflow-example",
UID = username,
PWD = password,
Port = 1433)
# I have also tried Driver = "ODBC Driver 17 for SQL Server"
Вот результат запроса:
data <- dbGetQuery(con, 'SELECT TOP 2
objectid, geom,
geom.STGeometryType() geom_type,
geom.STSrid STSrid
FROM spatialdata')
objectid geom geom_type stsRID
864 blob[416 B] LineString 25832
865 blob[416 B] LineString 25832
class(data$geom)
"blob" "vctrs_list_of" "vctrs_vctr"
Геометрия raw / blob выглядит как шестнадцатеричное:
rawToHex(data$geom[1])
e86400000104180000004003780b38331f416b4df3ea9ecf5741a04c150c38331f4159ca32f09ecf574160ba...
Попытка использовать st_read
, поэтому я могу получить полезный sf Из этого информационного кадра выдается ряд сообщений об ошибках в зависимости от параметров, которые я передаю функции:
st_read(con, geometry_column = "geom",
query = "SELECT TOP 10 objectid, geom FROM \"spatialdata\"")
Error: nanodbc/nanodbc.cpp:1617: 00000: [FreeTDS][SQL Server]Invalid object name 'spatial_ref_sys'. [FreeTDS][SQL Server]Statement(s) could not be prepared.
<SQL> 'select srtext from spatial_ref_sys where srid = 70647808'
In addition: Warning message:
In CPL_crs_from_input(x) :
GDAL Error 6: EPSG PCS/GCS code 70647808 not found in EPSG support files. Is this a valid EPSG coordinate system?
Похоже, что EPSG (25832) не распознается правильно.
Какова правильная конструкция st_read в моем случае?
Дополнительный вопрос: как эффективно добавить ограничивающую рамку к st_read?