Сбой создания слоя writeOGR - MySQL
Я пытаюсь загрузить границы многоугольника в MySQL. Вот что я пробовал до сих пор,
Установил gdal с драйвером mysql. Проверено с
ogrDrivers()
в R он возвращает MySQL в списке драйверов.db <- 'testdb' user <- 'testuser' pwd <- '****' host <- '127.0.0.1' DSN = paste0('MySQL:',db ,',user=', user, ',host=', host, ',password=', pwd) data_2013 <- readOGR(dsn = "/Path/to/shapefile", layer = "testinglayer") writeOGR(data_2013, dsn=DSN, driver='MySQL',layer='testinglayer', layer_options='ENGINE=Aria', overwrite_layer = TRUE)
Но я получаю эту ошибку,
Error in writeOGR(data_2013, dsn = DSN, driver = "MySQL", layer = "testinglayer", :
Layer creation failed
Или есть ли другой способ загрузить данные пространственного многоугольника из R в MySQL?
РЕДАКТИРОВАТЬ: По запросу,
> ogrDrivers()$name
[1] "AeronavFAA" "AmigoCloud" "ARCGEN" "AVCBin" "AVCE00"
[6] "BNA" "CAD" "Carto" "Cloudant" "CouchDB"
[11] "CSV" "CSW" "DGN" "DXF" "EDIGEO"
[16] "ElasticSearch" "ESRI Shapefile" "Geoconcept" "GeoJSON" "Geomedia"
[21] "GeoRSS" "GFT" "GML" "GMLAS" "GPKG"
[26] "GPSBabel" "GPSTrackMaker" "GPX" "HTF" "HTTP"
[31] "Idrisi" "Interlis 1" "Interlis 2" "JML" "JP2OpenJPEG"
[36] "JPEG2000" "KML" "LIBKML" "MapInfo File" "Memory"
[41] "MSSQLSpatial" "MySQL" "NAS" "netCDF" "ODBC"
[46] "ODS" "OGR_DODS" "OGR_GMT" "OGR_PDS" "OGR_SDTS"
[51] "OGR_VRT" "OpenAir" "OpenFileGDB" "OSM" "PCIDSK"
[56] "PGDUMP" "PGeo" "PLSCENES" "REC" "S57"
[61] "SEGUKOOA" "SEGY" "Selafin" "SQLite" "SUA"
[66] "SVG" "SXF" "TIGER" "UK .NTF" "VDV"
[71] "VFK" "Walk" "WAsP" "WFS" "XLS"
[76] "XLSX" "XPlane"
2 ответа
Прежде всего, благодаря @SeGa за его постоянную помощь, благодаря которой мне удалось наконец загрузить данные. Но есть некоторые исправления, поэтому я привожу это в качестве отдельного ответа.
library(sf)
fname <- "/path/to/shapefile/data_2013.shp"
data_2013 <- st_read(fname)
db <- 'testdb'
user <- 'testuser'
pwd <- '****'
host <- '127.0.0.1'
port <- 3306
DSN = paste0('MySQL:',db ,',user=', user,',password=', pwd, ',port=', port)
st_write(obj = data_2013, dsn = DSN, layer = "data_2013")
DSN должен быть точно таким же, как и выше, без строки 'dbname'. Также порядок должен быть именно таким. Потому что GDAL ожидает, что, если вы посмотрите на эту ссылку - http://www.gdal.org/drv_mysql.html
Я попытался с подключением mysql на этом, это не сработало, но предоставление mysql dsn сработало. Единственная проблема заключается в том, что в базе данных создаются дополнительные таблицы (geometry_columns,atial_ref_sys).
Еще раз спасибо за вашу помощь @SeGa.
Глядя на эту ссылку, аргументы должны быть разделены запятой. Так что, возможно, это будет работать:
DSN = paste0('MYSQL:dbname=',db ,', user=', user, ', host=', host, ', password=', pwd, ', port=', port)
Или вы пробовали с sf
пакет?
DSN = paste0('MYSQL:dbname=',db ,' user=', user, ' host=', host, ' port=', port, ' password=', pwd)
library(sf)
data(meuse)
st_write(st_as_sf(meuse, coords = c("x","y")), dsn = DSN, layer = "testinglayer")
Или меняется host <- '127.0.0.1'
в host <- "localhost"
?