20

私は空間データ セット (主に都市のエリアのポリゴン) で遊んでおり、さまざまなレベルのズームに基づいてさまざまなビューを生成したいと考えています。プロット境界ボックスがポリゴンを含む領域よりも大きい場合、すべて問題ありません。しかし、ズームインすると、一部のポリゴンが境界ボックスの外側にある部分を取得し、それらのポリゴンの出力に問題があります。境界ボックスの外側のポリゴンのポイントは表示されず、境界ボックスの制限でトリミングされていないポリゴンになります(予想通り)しかし、むしろ考慮されていません。ポリゴンは不完全であり、ポリゴンはプロットに残っているポイントのみを結合します (通常の動作ですが、望ましくありません)。

すべての議論に値する良い例です。ここに問題のデモがあります:

#initialisation
library(ggmap)
require(MASS)

data(zips)

# overview
ggmap(get_map(maptype = "satellite", zoom = 8), extent = "device") +
        geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = NA, fill = "red", alpha = .5) +
        geom_path(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = "white", alpha = .7, size = .4)

# problematic view    
x11()
ggmap(get_map(maptype = "satellite", zoom = 12), extent = "device") +
        geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = NA, fill = "red", alpha = .5) +
        geom_path(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = "white", alpha = .7, size = .4)

プロット境界ボックスの制限でポリゴンを適切にトリミングするための優れた手法を知っていますか? ご協力いただきありがとうございます

パスカル

4

1 に答える 1

28

一般に、このクリッピングは、スケール リミット (範囲外のポイントをドロップする) を使用したズームと、座標リミット (範囲外のパーツをそのままにして内側のパーツを描画する真のズーム) を使用したズームによるものです。 ggmapには、2 番目のタイプのズームを使用する必要があることを示す簡単な方法はありませんが、関数を見ると、関連する部分を引き出して元に戻すことができます。

s12 <- get_map(maptype = "satellite", zoom = 12) 
ggmap(s12, base_layer=ggplot(aes(x=lon,y=lat), data=zips),
      extent = "normal", maprange=FALSE) +
    geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                 data = zips, colour = NA, fill = "red", alpha = .5) +
    geom_path(aes(x = lon, y = lat, group = plotOrder),
              data = zips, colour = "white", alpha = .7, size = .4) +
    coord_map(projection="mercator", 
              xlim=c(attr(s12, "bb")$ll.lon, attr(s12, "bb")$ur.lon),
              ylim=c(attr(s12, "bb")$ll.lat, attr(s12, "bb")$ur.lat)) +
    theme_nothing()

ここに画像の説明を入力

于 2012-11-20T17:16:04.770 に答える