【问题标题】:R Converting SQL Server Query with Geometry Datatype to spatialpolygonsdataframeR将具有几何数据类型的SQL Server查询转换为spatialpolygonsdataframe
【发布时间】:2017-05-02 13:31:53
【问题描述】:

我正在尝试从 SQL Server 数据源绘制几何(二进制)多边形数据。我想要做的是使用多边形的 SQL 查询中的几何数据类型,以及查询中的其余列作为 SpatialPolygonsDataFrame 类中的 @data 属性表。

到目前为止,这是我的代码,用于将 SQL 查询数据转换为简单的 data.frame 并使用 wkb::readWKB() 转换二进制数据类型。

从这个阶段开始,我不知道如何创建SpatialPolygonsDataFrame 数据框。

library(RODBC) 
library(maptools)
library(rgdal)
library(ggplot2)
dbhandle <- odbcDriverConnect("connection string",rows_at_time = 1)
sqlStatement <- "SELECT  ID 
                    , shape.STAsBinary() as shape
                    , meshblock_number 
                    , areaunit_code
                    , dpz_code
                    , catchment_id 
                    FROM [primary_parcels] hp "

sqlStatement <- gsub("[\r\n]", "", sqlStatement)
parcelData <- sqlQuery(dbhandle,sqlStatement )
odbcClose(dbhandle)
parcelData$shape <- wkb::readWKB(parcelData$shape)

【问题讨论】:

    标签: sql-server r gis


    【解决方案1】:

    这可能为时已晚,但是在朋友和this 的帮助下,我找到了解决方案。这似乎有点有趣,但我也在研究一组类似的数据并且遇到了同样的问题。请记住,由于您没有提供可复制的示例,因此很难复制您的方法。您还需要调整投影。请注意,在odbc中建立一次连接并每次调用它比每次都编写连接更容易。

    library(rgeos)
    library(mapview)
    library(raster)
    library(dplyr)
    library(sp)
    
    #You may ignore this
    odbcCh<-odbcConnect("Rtest")
    sqlStatement=sqlQuery(odbcCh, 'SELECT  ID , shape.STAsBinary() as shape, meshblock_number , areaunit_code, dpz_code, catchment_id FROM [primary_parcels] hp')
    parcelData <- sqlQuery(odbcCh,sqlStatement )
    #untill here
    
    things <- vector("list", 1)
    z = 0
    for(line in parcelData$shape)
    {
          {
            things[[z+1]]<-readWKT(line)
          }
          z = z + 1
    }
    
    Things <- do.call(bind,things)
    Things.df= SpatialPolygonsDataFrame(Things,data.frame(parcelData$ID,parcelData$catchment_id))
    plot(Things.df)
    
    #you may not need the rest
    Things.df@proj4string= CRS("+proj=nzmg +lat=-41.0 +lon=173.0 +x_0=2510000.0     +y_0=6023150.0 +ellps=intl +units=m")
    mapview(Things.df)
    

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 2015-11-29
      • 2016-07-29
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      相关资源
      最近更新 更多