QGISまたはRを使用して、大規模なポリゴンのセットの最大、中央値、最小の緯度座標を計算したいと思います。つまり、緯度範囲全体で各ポリゴンが到達する最高点と最低点に到達します。中心座標は簡単ですが、ポリゴンをポイントに変換し、QGISで距離行列を使用するとコンピューターがクラッシュします。これを行うためのより効率的な方法はありますか?
ここではさまざまな形で質問されていますが、1。不明2.バージョンが古いと思うか、3。ポリゴンが約2000あるため、PCでクラッシュします。
QGISまたはRを使用して、大規模なポリゴンのセットの最大、中央値、最小の緯度座標を計算したいと思います。つまり、緯度範囲全体で各ポリゴンが到達する最高点と最低点に到達します。中心座標は簡単ですが、ポリゴンをポイントに変換し、QGISで距離行列を使用するとコンピューターがクラッシュします。これを行うためのより効率的な方法はありますか?
ここではさまざまな形で質問されていますが、1。不明2.バージョンが古いと思うか、3。ポリゴンが約2000あるため、PCでクラッシュします。
回答:
あなたはこのようにそれを行うことができます:
library(raster)
# example data
g <- getData('GADM', country='BRA', level=1)
ext <- t(sapply(1:length(g), function(i) as.vector(extent(g[i,]))))
colnames(ext) <- c('xmin', 'xmax', 'ymin', 'ymax')
head(ext)
# xmin xmax ymin ymax
#[1,] -73.98971 -66.58875 -11.145161 -7.121320
#[2,] -38.23634 -35.15182 -10.501529 -8.814987
#[3,] -54.87619 -49.86681 -1.236008 4.442360
#[4,] -73.79568 -56.09750 -9.814520 2.246201
#[5,] -46.61705 -37.34903 -18.349859 -8.533636
#[6,] -41.42347 -37.25208 -7.858196 -2.784583
そして、このように続けます:
d <- data.frame(state=g$NAME_1, ext)
head(d)
# state xmin xmax ymin ymax
#1 Acre -73.98971 -66.58875 -11.145161 -7.121320
#2 Alagoas -38.23634 -35.15182 -10.501529 -8.814987
#3 Amapá -54.87619 -49.86681 -1.236008 4.442360
#4 Amazonas -73.79568 -56.09750 -9.814520 2.246201
#5 Bahia -46.61705 -37.34903 -18.349859 -8.533636
#6 Ceará -41.42347 -37.25208 -7.858196 -2.784583
QGISでは、ツールバーの[ レイヤー範囲からのポリゴン...]ツールを使用できます([ ベクター]> [リサーチツール]> [レイヤー範囲からのポリゴン...])。
これは基本的に、各オプションのバウンディングボックスレイヤーを出力し(オプションを選択した場合)、XとYの最大、中心、最小の座標と他のいくつかの統計を含むフィールドを含みます。
Rで
x <- gdal::readOGR(datasource, layername)
ほぼすべての形式から読み取る
使用as(x, "class")
ポリゴンからのラインの境界にその成分の点に変換(および手近、オブジェクトおよびリングIDを記録)する強制
ポリゴンIDでグループ化されたX / Yの標準的な方法で集計関数を使用する
例:
library(rgdal)
dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1]
ogrInfo(dsn=dsn, layer="ps_cant_31")
ps_cant_31 <- readOGR(dsn=dsn, layer="ps_cant_31")
## cast to lines and then to points (creates columns Lines.NR, Lines.ID, Line.NR to identify pieces)
p <- as(as(ps_cant_31, "SpatialLinesDataFrame"), "SpatialPointsDataFrame")
coords <- coordinates(p)
## see that Lines.NR groups your original polygons (nrow(ps_cant_31))
#spplot(p["Lines.NR"])
## summarize the Y-coordinate into groups defined by original polygon object
tapply(coords[,2], p$Lines.NR, median)
tapply(coords[,2], p$Lines.NR, max)
tapply(coords[,2], p$Lines.NR, min)
「緯度範囲」について言及しているが、座標が投影座標系にあるかどうかを指定しないでください。そうである場合は、投影を解除し、緯度(Yだけでなく)で分類する必要があります。
最終的な要約を確認することを強くお勧めしますdplyr
。Rの組み込みツールは非常に強力ですが、後から見ると面倒です。残念ながら、これらの種類の答えを得るにsp
は、座標の配列とdata.frame
フォームを定期的に手動で変換する必要がありますが、すべて実行可能です。
最後に、これが実際の状態である場合、仮想メモリリソースがデータセットと一致している限り、一度にすべてを読み込んで1つのジョブを実行するため、まったく時間がかかりません。このようなステップ。