2012-07-11 15 views
8

最後の数日間、私はマッピングのためにRを使い始めました。私はRをモデリングなどに広く使ってきましたが、この種の仕事は以前はありませんでした。私は、シェイプファイルに関するいくつかの質問と問題、それらの読み方などを持っています。ggplot2エラーでシェイプファイルをプロットする

Australian Bureau of Statisticsからシェイプファイルをダウンロードしました。州境、ポストコード、都市などの数多くのファイルがあります。 形状ファイルは大量ですが、オーストラリアの国境には約180万の座標点があり、私が試したもう一つのファイルは800万を超える統計領域でした。私はこのファイルを使って何もしませんでした。私のRのセットアップには大きすぎます。

私はreadShapePolyとで形状ファイルを読んで、私は正常にプロットされた正規のデータフレームにSpatialPolygonsDataFrameから国家の境界線の形状ファイルを変換していたが、それは永遠に取り、詳細たらそう

[email protected]$id = rownames([email protected])  
AUS.points = fortify(AUS, region="id") 
AUS.df = join(AUS.points, [email protected], by="id") 

ようにそれを変換しますあまりにも大きかった。 私はそれを簡単にするためにthinnedSpatialPolyを使用することを考えたが、それは誤り与える:

Error in stopifnot(length([email protected]) == nrow(data)) :trying to get slot "polygons" from an object of a basic class ("NULL") with no slots 

Googleはで私を助けることができません。

私の次の戦略は、それをSASに読み込んでproc greduceを使用してファイルを取得し、密度フィールドを作成し、ポリゴンの密度を選択することでした。

proc mapimport out=states datafile='\Digital Boundaries\States\Shape file\STE_2011_AUST.shp'; 
id ste_code11; run; 
proc greduce data = states out = reduced_states; 
id ste_code11; run; 

SASはがらくたのグラフィックスを持っているとさえ私のための事をプロットので、私はデータセットをエクスポートして、私はでデータフレームのサブセットを、私のプロットに使うことを期待して、新たな密度場でRに戻ってそれを読むことができませんでした。

私の問題は、今私はポリゴンが順番になっていないか、壊れているので、それがあると思い、私はRでプロットに行くとき、私はこのMap of Australian State Borders

ggplot(data=states.df, aes(X, Y, group=SEGMENT)) + 
geom_polygon(colour='black', fill='white') + theme_bw() 

を得るということですか?私はこの機能を使用してポリゴンを再結合しようとしましたが、まだ運がありません

RegroupElements <- function(df, longcol, idcol){ 
g <- rep(1, length(df[,longcol])) 
if (diff(range(df[,longcol])) > 300) { # check if longitude within group differs more    than 300 deg, ie if element was split 
d <- df[,longcol] > mean(range(df[,longcol])) # we use the mean to help us separate the extreme values 
g[!d] <- 1 # some marker for parts that stay in place (we cheat here a little, as we do not take into account concave polygons) 
g[d] <- 2 # parts that are moved 
} 
g <- paste(df[, idcol], g, sep=".") # attach to id to create unique group variable for the dataset 
df$group.regroup <- g 
df 
} 

### Function to close regrouped polygons 
# Takes dataframe, checks if 1st and last longitude value are the same, if not, inserts first as last and reassigns order variable 
ClosePolygons <- function(df, longcol, ordercol){ 
if (df[1,longcol] != df[nrow(df),longcol]) { 
tmp <- df[1,] 
df <- rbind(df,tmp) 
} 
o <- c(1: nrow(df)) # rassign the order variable 
df[,ordercol] <- o 
df 
} 

最終的に私の質問です! どのように過度に詳細な形状ファイルを扱うのですか? thinned spatialpolyが動作しなかったのはなぜですか(可能な場合はSASを避けたい)? 私のプロットを駄目のように見せないようにするにはどうすればいいですか?最後に

私のRスペック:

R version 2.15.1 (2012-06-22) 
Platform: x86_64-pc-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252 
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C      
[5] LC_TIME=English_Australia.1252  

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets methods 
[8] base  

other attached packages: 
[1] gridExtra_0.9 gpclib_1.5-1 ggmap_2.1  maptools_0.8-16 
[5] lattice_0.20-6 rgeos_0.2-7  plyr_1.7.1  stringr_0.6  
[9] ggplot2_0.9.1 sp_0.9-99  shapefiles_0.6 foreign_0.8-50 
[13] fastshp_0.1-0 

loaded via a namespace (and not attached): 
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2  labeling_0.1  
[5] MASS_7.3-18  memoise_0.1  munsell_0.3  png_0.1-4   
[9] proto_0.3-9.2  RColorBrewer_1.0-5 reshape2_1.2.1  RgoogleMaps_1.2.0 
[13] rjson_0.2.8  scales_0.2.1  tools_2.15.1 
+0

あなたのために働くなら 'rgeos :: gSimplify'を試してください。 –

+3

rgdal:readOGRを使用してシェイプファイルを読み取ります。マップにはspベースのグラフィックスを使用します。 – Spacedman

+0

また、その境界線があまりにも細かい場合は、www.gadm.orgのものを試してみてください - 彼らは認知的ではないかもしれませんが、あなたの作業には十分かもしれません。 – Spacedman

答えて

8

まず、あなたが最初に頭の中でダイビングしている場合は、浅い最後になりません。

マイかなり古いPCは、シェープファイル形式では問題状態デジタルの境界を読むことができません:

aus=readOGR(".","STE_2011_AUST") 
plot(aus) 

をしかしマップは、詳細な上、明らかです。私はQuantum GISにもロードしました。良い古いズームとパンがあり、小さな島がそこにあります。私はこれまでに見た中で最も詳細な国レベルの地図の一つだと思う。第二に、州の地図を簡単に見つけようとしたいかもしれません(www.gadm.org参照)。

のでgSimplify場合パッケージから見ることができます:rgeosができます:

aus2 = gSimplify(aus,0.1) 
plot(aus2) 
私にとって悲しいことに、小さな島々の多くが削除されますが

(および人口の大塊)、それは同様にニューサウスウェールズ州を削除します。良くない。私は許容値を下げた場合、最終的に私はNSWを保つ何か得ることができます:

aus2 = gSimplify(aus,0.01) 
plot(aus2) 

をしかし、明らかgSimplifyまたはシェープファイルデータ自体に何らかの問題があります。とにかく、aus2をシェイプファイルに保存すると、サイズが大幅に縮小され、.shpは29メガバイトではなく180kになります。

また、私はベースのグラフィックでプロットすることに固執します。

+0

答えをいただきありがとうございます。プロットする前にshpファイルをデータフレームに変換しなければならないという仮定の下に間違っていました。 'gSimplify'を自分で使うチャンスがあるとき – user1414259

関連する問題