6

異なる投影法で国のポリゴンが切り取られるのをどのように防ぐのですか?

次の例では、南極 -45° 未満の緯度を含む南極大陸のステレオ投影マップを実行したいと考えています。Y 制限をこの範囲に設定すると、プロット エリアは正しくなりますが、国のポリゴンもこれらの制限でトリミングされます。プロット エリアの端に海岸線をプロットする方法はありますか?

アドバイスをありがとう。

library(maps)
library(mapproj)

ylim=c(-90,-45)
orientation=c(-90, 0, 0)

x11()
par(mar=c(1,1,1,1))
m <- map("world", plot=FALSE)
map("world",project="stereographic", orientation=orientation, ylim=ylim)
map.grid(m, nx=18,ny=18, col=8)
box()

ここに画像の説明を入力

4

3 に答える 3

7

問題は、最大ylim-45 を指定していて、データがその緯度で正確に切り取られているためです。明らかに、プロットの実際の境界は別の方法で計算されます。これはおそらく、結果として予測される制限に基づくある種の保守的な仮定に関係しています (ただし、ソース コードを調査しない限り、それについては何も知りません)。

この問題を回避するには、海岸線を描画しないダミー プロットを設定し、その上に を増やしてデータを追加しますylim

library(maps)
library(mapproj)

ylim = c(-90,-45)
orientation=c(-90, 0, 0)

x11()
par(mar=c(1,1,1,1))
m <- map("world", plot=FALSE)
map("world",project="stereographic", orientation=orientation, ylim=ylim, col = "transparent")
map("world",project="stereographic", orientation=orientation, ylim=ylim + c(-5, 5), add = TRUE)
map.grid(m, nx=18,ny=18, col=8)
box()

ところで、この戦略はすべてのプロジェクションで機能するわけではありません。これは、一部のデータ制限が重複することを意味するためですが、Polar Stereographic は中心から伸びるだけなので、ここではそのような問題はありません。

また、適切な PROJ.4 ステレオグラフィック プロジェクションを共有するデータを使用できるようにする maptools、rgdal、および rgeos を使用してこれを行う最新の方法があります (ただし、クリッピング手順はよくわかりません)。mapproj のプロジェクションは「形状のみ」であり、他のデータをそれらに取り込むのは少し面倒です。

于 2012-07-15T09:19:03.197 に答える
3

もう 1 つの方法は、実際の PROJ.4 プロジェクションを使用し、maptoolsパッケージ内のデータ セットを使用することです。コードは次のとおりです。海の海岸線が -90 度で極と交わる南極大陸にはまだ問題があります (これは少し面倒です。その座標を見つけて、変換された結果から削除するか、トポロジ ツールを実行して見つける必要があります。スライバー)。

library(maptools)
data(wrld_simpl)
xrange <- c(-180, 180, 0, 0)
yrange <- c(-90, -45, -90, -45)

stere <- "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"

library(rgdal)

w <- spTransform(wrld_simpl, CRS(stere))

xy <- project(cbind(xrange, yrange), stere)
plot(w, xlim = range(xy[,1]), ylim = range(xy[,2]))
box()
于 2012-07-15T11:41:53.590 に答える
3

別のオプションは、マップ自体ではなく、プロット領域に制限を定義することであることに気付きました。これにより、正確なプロット領域を柔軟に定義できます (つまり、xaxs="i" および yaxs="i")。また、すべてのポリゴンがプロットされることも保証します。@mdsumner の例では、オーストラリアが欠落しており、ポリゴンを正しくプロットするには、y 制限を拡張する必要があります。

orientation=c(-90, 0, 0)

ylim <- c(mapproject(x=-180,y=-45, project="stereographic", orientation=orientation)$y, mapproject(x=0,y=-45, project="stereographic", orientation=orientation)$y)
xlim <- c(mapproject(x=-90,y=-45, project="stereographic", orientation=orientation)$x, mapproject(x=90,y=-45, project="stereographic", orientation=orientation)$x)

x11(width=6,height=6)
par(mar=c(1,1,1,1))
plot(0,0, t="n", ylim=ylim, xlim=xlim, xaxs="i", yaxs="i", xlab="", ylab="", xaxt="n", yaxt="n")
map("world",project="stereographic", orientation=orientation, add=TRUE)
map.grid(nx=18,ny=18, col=8)
box()
于 2012-07-15T10:51:36.507 に答える