6

ESRIシェープファイルの形式で入力を受け取り、推定されたサーフェスのGeoTIFF画像を出力するカーネル密度推定器をJavaで作成しました。このモジュールをテストするには、サンプルのシェープファイルが必要です。何らかの理由で、Rに含まれているサンプルデータからシェープファイルを取得するように言われました。問題は、どのサンプルデータもシェープファイルではないことです。

そこで、シェープファイルパッケージの機能を使用してconvert.to.shapefile(4)、Rのspatstatパッケージに含まれているbeiデータセットをシェープファイルに変換しようとしています。残念ながら、これは私が思っていたよりも難しいことがわかっています。誰かがこれをした経験がありますか?ここで手を貸していただければ幸いです。

ありがとう、ライアン

参照: spatstatシェープファイル

4

2 に答える 2

6

これに使用できるおよびパッケージSpatial内のオブジェクトのコンバーター関数があります。シェープファイルは、少なくとも各オブジェクトのポイント (またはラインまたはポリゴン) と属性で構成されます。spatstatmaptools

library(spatstat)
library(sp)
library(maptools)
data(bei)

オブジェクトに強制beiします。オブジェクトSpatialには「マーク」がないため、ここでは属性のないポイントのみpppです。

spPoints <- as(bei, "SpatialPoints")

シェープファイルには少なくとも 1 列の属性データが必要なので、ダミーを作成します。

dummyData <- data.frame(dummy = rep(0, npoints(bei)))

SpatialPointsオブジェクトとダミー データを使用して、 を生成しSpatialPointsDataFrameます。

spDF <- SpatialPointsDataFrame(spPoints, dummyData)

この時点で、によって使用される座標系が何であるか、およびそれを(既知のテキスト座標参照系)beiで表現できるかどうかを確実に検討する必要があります。の別の引数として、または create with の後で、それをオブジェクトWKT CRSに割り当てることができます(ただし、これは、ページを書き込むことができるすべての問題です)。SpatialSpatialPointsDataFrameproj4string(spDF) <- CRS("+proj=etc...")

パッケージをロードしrgdalます (これは多くの形式をサポートし、GDAL ライブラリを使用するため、最も一般的なオプションですが、システムの依存関係のために利用できない場合があります。

library(rgdal)

(利用できない場合はwritePolyShapemaptoolsパッケージで使用しrgdalます)。

構文は、オブジェクト、「データ ソース名」(ここでは現在のディレクトリ、これは .shp またはフォルダーへのフル パス)、レイヤー (シェープファイルの場合は拡張子なしのファイル名) です。次に、出力ドライバーの名前。

writeOGR(obj = spDF, dsn = ".", layer = "bei", driver = "ESRI Shapefile")

「bei.shp」がすでに存在する場合、書き込みは失敗するため、最初に削除する必要があることに注意してくださいunlink("bei.shp")

「bei」で始まるファイルを一覧表示します。

list.files(pattern = "^bei")

[1] "bei.dbf" "bei.shp" "bei.shx"

オブジェクトの一般的な「as.Spatial」コンバーターはないことに注意してください。pppこれは、これがマークなどを含むポイント パターンであるかどうかを判断する必要があるためです。ダミー データが必須など。

これらのデータ表現の違いの詳細と詳細については、次のビネットを参照してください。

ライブラリ (sp); vignette("sp") ライブラリ(spatstat); vignette("spatstat")

于 2011-04-26T21:32:52.220 に答える
3

一般的な解決策は次のとおりです。

  • "ppp"または"owin"クラス化されたオブジェクトを、spパッケージから適切なクラス化されたオブジェクトに変換します
  • writeOGR()パッケージの関数を使用しrgdalてシェープファイルを書き出します

たとえば、次のhamsterデータセットを考えてみspatstatます。

require(spatstat)
require(maptools)
require(sp)
require(rgdal)
data(hamster)

まず、このオブジェクトをオブジェクトに変換しSpatialPointsDataFrameます:

ham.sp <- as.SpatialPointsDataFrame.ppp(hamster)

これにより、sp作業対象のオブジェクトが得られます。

> str(ham.sp, max = 2)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame': 303 obs. of  1 variable:
  ..@ coords.nrs : num(0) 
  ..@ coords     : num [1:303, 1:2] 6 10.8 25.8 26.8 32.5 ...
  .. ..- attr(*, "dimnames")=List of 2
  ..@ bbox       : num [1:2, 1:2] 0 0 250 250
  .. ..- attr(*, "dimnames")=List of 2
  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots

@dataこのオブジェクトには、スロットに単一の変数があります。

> head(ham.sp@data)
     marks
1 dividing
2 dividing
3 dividing
4 dividing
5 dividing
6 dividing

この変数を ESRI Shapefile として書き出したいとします。writeOGR()

writeOGR(ham.sp, "hamster", "marks", driver = "ESRI Shapefile")

これにより、現在の作業ディレクトリに作成されたmarks.xxxディレクトリにいくつかのファイルが作成されます。hamsterそのファイルのセットがShapeFileです。

データセットで上記を実行しなかった理由の 1 つは、データが含まれていないため、オブジェクトbeiに強制できないためです。(同時にロードされる) で使用できるデータSpatialPointsDataFrameがありますが、これらの余分なデータまたは通常のグリッドで使用できます。だから私たちはしなければならないでしょうbei.extrabei

  • オブジェクトに変換bei.extraSpatialGridDataFrameます(たとえばbei.spg
  • オブジェクトに変換beiSpatialPointsます(たとえばbei.sp
  • overlay()bei.spグリッド上のbei.spgポイント。各ポイントのグリッドから値を生成します。bei
  • 上記のようSpatialPointsDataFrameに書き出すことができるwriteOGR()

ご覧のとおり、Shapefile を提供するためだけに、もう少し複雑です。私hamsterが示すデータ例で十分でしょうか? そうでない場合は、明日ビバンドらを探し出して、 の手順を実行できますbei

于 2011-04-26T21:28:32.037 に答える