ฉันกำลังทำแผนที่ GIS ใน R โดยใช้sf
แพ็คเกจ (และแพ็คเกจที่เกี่ยวข้อง) เพื่ออ่านในรูปแบบไฟล์และggplot2
(และเพื่อน) สำหรับการลงจุด ใช้งานได้ดี แต่ฉันไม่สามารถหา (ป้ายกำกับอัตโนมัติ / โดยโปรแกรม) ไม่สามารถสร้างตำแหน่งป้ายกำกับสำหรับคุณสมบัติเช่นแม่น้ำและถนน คุณสมบัติเหล่านี้มักจะมีการเคลื่อนไหวโดยมีรูปร่างผิดปกติ ดูภาพที่แนบมาตัวอย่างจาก wikimedia
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
อย่างไรโดยทั่วไปจะทำซ้ำงานที่คุณทำไปแล้ว สิ่งนี้ทำให้มีโอกาสน้อยที่คุณจะได้คำตอบที่มีประโยชน์