【问题标题】:writeOGR layer creation failed - MySQLwriteOGR 层创建失败 - MySQL
【发布时间】:2018-11-06 15:49:53
【问题描述】:

我正在尝试将多多边形边界加载到 mysql。这是我迄今为止尝试过的,

  1. 用 mysql 驱动安装 gdal。在 R 中使用 ogrDrivers() 检查,它在驱动程序列表中返回 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"   

【问题讨论】:

  • 如果在创建 DNS 时将 MySQL: 更改为 MySQL= 会怎样?
  • 试过了。还是一样。谢谢。

标签: mysql r gdal rgdal ogr


【解决方案1】:

查看这个link,参数必须用逗号分隔。所以也许这会起作用:

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 &lt;- '127.0.0.1' 更改为host &lt;- "localhost"

【讨论】:

  • 谢谢。但还是一样。 :(
  • 再次相同.. :(
  • 如何指定?或者有没有办法进一步调试这背后发生的事情?
  • 我试过了,port &lt;- 3306 DSN = paste0('MySQL:dbname=',db ,' user=', user, ' host=', host, ' port=', port, ' password=', pwd)。它没有用。
  • 已更新。请检查。
【解决方案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、spatial_ref_sys)。

再次感谢@SeGa 的帮助。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2012-12-20
    • 2014-03-09
    • 2021-11-25
    相关资源
    最近更新 更多