2017-04-10 3 views
0

SQL Serverデータソースからジオメトリ(バイナリ)ポリゴンデータをプロットしようとしています。私がしたいのは、ポリゴンのSQLクエリーのジオメトリデータタイプと、クエリ内の残りのカラムをSpatialPolygonsDataFrameクラスの@data属性テーブルとして使用することです。Rジオメトリデータ型を使用したSQL Serverクエリをspatialpolygonsdataframeに変換する

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) 

答えて

0

これは私がそのための解決策を見つけた友人と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 
[email protected]= CRS("+proj=nzmg +lat=-41.0 +lon=173.0 +x_0=2510000.0  +y_0=6023150.0 +ellps=intl +units=m") 
mapview(Things.df) 
関連する問題