আমি আর-এ জিআইএস ম্যাপ তৈরি করছি sf
প্যাকেজটি (এবং সম্পর্কিত প্যাকেজগুলি) শেফফাইলে পড়ার জন্য, এবং ggplot2
(এবং বন্ধুরা) প্লট করার জন্য। এটি দুর্দান্ত কাজ করে তবে আমি নদী ও রাস্তার মতো বৈশিষ্ট্যগুলির জন্য লেবেল প্লেসমেন্টগুলি (স্বয়ংক্রিয়ভাবে / প্রোগ্রাম্যাটিকভাবে) তৈরি করার কোনও উপায় খুঁজে পাচ্ছি না। এই বৈশিষ্ট্যগুলি সাধারণত লাইনস্ট্রিংস, অনিয়মিত আকারগুলির সাথে। উইকিমিডিয়া থেকে উদাহরণস্বরূপ সংযুক্ত চিত্র দেখুন।
ggrepel
প্যাকেজ একটি স্বয়ংক্রিয় ভাবে পয়েন্ট লেবেল জন্য ভাল কাজ করে, কিন্তু এই অন্য ভৌগলিক বৈশিষ্ট্য বিযুক্ত অক্ষাংশ / দ্রাঘিমাংশ পয়েন্ট নয় জন্য অনেক অর্থে দেখা যায় না।
আমি স্বতন্ত্রভাবে প্রতিটি বৈশিষ্ট্যে পৃথক পাঠ্য লেবেল রেখে এটি করার কল্পনা করতে পারি, তবে আমি যদি সম্ভব হয় তবে আরও কিছু স্বয়ংক্রিয়ভাবে সন্ধান করছি। আমি বুঝতে পারি যে এই ধরনের অটোমেশন একটি তুচ্ছ সমস্যা নয়, তবে এটির আগেই এটি সমাধান হয়ে গেছে (আর্কজিআইএসের স্পষ্টতই ম্যাপেলেক্স নামক একটি এক্সটেনশন দিয়ে এটি করার একটি উপায় রয়েছে তবে আমার সফ্টওয়্যারটিতে অ্যাক্সেস নেই এবং আমি এতে থাকতে চাই সম্ভব হলে আর)।
কেউ কি এটি করার একটি উপায় জানেন?
এমডব্লিউই এখানে:
#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
, মূলত আপনি ইতিমধ্যে যা কাজ করেছেন তা আবার করুন। এটি আপনাকে একটি দরকারী উত্তর দেয়ার সম্ভাবনা অনেক কম করে।