複数のポリゴンの最大および最小座標を計算する方法は?


8

QGISまたはRを使用して、大規模なポリゴンのセットの最大、中央値、最小の緯度座標を計算したいと思います。つまり、緯度範囲全体で各ポリゴンが到達する最高点と最低点に到達します。中心座標は簡単ですが、ポリゴンをポイントに変換し、QGISで距離行列を使用するとコンピューターがクラッシュします。これを行うためのより効率的な方法はありますか?

ここではさまざまな形で質問されていますが、1。不明2.バージョンが古いと思うか、3。ポリゴンが約2000あるため、PCでクラッシュします。

回答:


7

あなたはこのようにそれを行うことができます:

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

いいね!---------------------
mdsumner 2016年

まあそれはちょうどエレガントです。すべての答えがうまくいくように見えますが、これは効率とシンプルさのためにimoを獲得します。ありがとうございました!
Guest2345234562

5

QGISでは、ツールバーの[ レイヤー範囲からポリゴン...]ツールを使用できます([ ベクター]> [リサーチツール]> [レイヤー範囲からのポリゴン...])。

これは基本的に、各オプションのバウンディングボックスレイヤーを出力し(オプションを選択した場合)、XとYの最大、中心、最小の座標と他のいくつかの統計を含むフィールドを含みます。

レイヤー範囲からのポリゴン

ポリゴンの例

結果の属性テーブル


1
私はそれでうまくいくと思います-ありがとうございます!ただし、これは一般的なQGISの質問である可能性があります。オブジェクトIDは保存されません。出力の順序は入力ポリゴンと同じですか?それを確認する方法はありますか。つまり、各バウンディングボックスを元のシェープファイル内の他のデータと一致させます。
Guest2345234562

@ Guest2345234562-大歓迎です!はい、出力の順序は入力と一致すると思います。レイヤーを空間的に結合して(たとえば、[位置による結合属性]ツールを使用して)簡単なチェックを行いましたが、それらうまく一致しているようです
ジョセフ

これがQGIS 3のどこにあるか誰か知っていますか?ありがとう
Ian Allan

5

Rで

  1. x <- gdal::readOGR(datasource, layername)ほぼすべての形式から読み取る

  2. 使用as(x, "class")ポリゴンからのラインの境界にその成分の点に変換(および手近、オブジェクトおよびリングIDを記録)する強制

  3. ポリゴン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つのジョブを実行するため、まったく時間がかかりません。このようなステップ。


3

QGISでは、式を使用して、フィールド計算機を使用してフィールドを追加できます

次の式は、ポリゴンの最小座標と最大座標を示します

xmin($geometry)
xmax($geometry)
ymin($geometry)
ymax($geometry)

中心座標には、

xmin(centroid($geometry))
ymin(centroid($geometry))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.