sf
シェープファイルを読み込むためのパッケージ(および関連パッケージ)を使用して、RでGISマップを作成していますggplot2
。これは正常に機能しますが、川や道路などのフィーチャのラベル配置を(自動/プログラムで)作成する方法を見つけることができません。これらの機能は通常、不規則な形状のラインストリングです。ウィキメディアの例の添付画像を参照してください。
ggrepel
パッケージには、自動化された方法でポイントを標識に適していますが、これは個別の緯度/経度のポイントではありません、他の地理的特徴のためにあまり意味がありません。
各機能に個別のテキストラベルを個別に配置することでこれを行うことは想像できますが、可能であれば、より自動化されたものを探しています。そのような自動化はささいな問題ではないことに気づきましたが、以前に解決されています(ArcGISにはmaplexという拡張機能を使用してこれを行う方法があるようですが、ソフトウェアにアクセスできないので、可能であればR)。
誰かがこれを行う方法を知っていますか?
ここにMWE:
#MWE Linestring labeling
library(tidyverse)
library(sf)
library(ggrepel)
set.seed(120)
#pick a county from the built-in North Carolina dataset
BuncombeCounty <- st_read(system.file("shapes/", package="maptools"), "sids") %>%
filter(NAME == "Buncombe")
#pick 4 random points in that county
pts_sf <- data.frame(
x = seq(-82.3, -82.7, by=-0.1) %>%
sample(4),
y = seq(35.5, 35.7, by=0.05) %>%
sample(4),
placenames = c("A", "B", "C", "D")
) %>%
st_as_sf(coords = c("x","y"))
#link those points into a linestring
linestring_sf <- pts_sf %>%
st_coordinates() %>%
st_linestring()
st_cast("LINESTRING")
#plot them with labels, using geom_text_repel() from the `ggrepel` package
ggplot() +
geom_sf(data = BuncombeCounty) +
geom_sf(data = linestring_sf) +
geom_label_repel(data = pts_sf,
stat = "sf_coordinates",
aes(geometry = geometry,
label = placenames),
nudge_y = 0.05,
label.r = 0, #don't round corners of label boxes
min.segment.length = 0,
segment.size = 0.4,
segment.color = "dodgerblue")
ggrepel
します。基本的には、すでに行った作業をやり直します。これにより、有用な回答が得られる可能性がはるかに低くなります。