Автоматическое построение меток с помощью pointLabel() из библиотеки maptools в R

Я пытаюсь решить проблему автоматического размещения меток для технического чертежа, используя алгоритм имитации отжига. Я наткнулся на pointLabel() функция в maptools библиотека в R. Однако я обнаружил, что хотя функция способна оптимально размещать метки, она не учитывает основной чертеж. Я не хочу, чтобы надписи перекрывались с рисунком линий. Есть ли способ, которым я могу достичь этого? Кроме того, мои этикетки имеют разный размер с точки зрения ширины и высоты. Есть ли способ, которым я могу указать размер каждой метки, кроме точки происхождения меток?

Я не знаю, как загрузить необходимые CSV-файлы для воспроизведения моей работы, но вот ссылка на Dropbox https://www.dropbox.com/s/85qqs4nlvm4crck/TextBoxData.rar?dl=0 и это мой код:

library(dplyr)
library(maptools)    

#Known Size of Sheet
xmin <- -357.7
xmax <- 19.3
ymin <- -90.2
ymax <- 159.7

#Read in the data
linescoords <- read.csv("Linecoords.csv")

#Coordinates translation
linescoords$X  <- linescoords$X - xmin
linescoords$Y <- linescoords$Y - ymin

#Plot the figure
xlimit <- c(-10, abs(xmin-xmax)+10 )
ylimit <- c(-10, abs(ymin-ymax)+10 )
plot(linescoords$X, linescoords$Y, "p", xlim=xlimit, ylim = ylimit)

i <- seq(1, nrow(linescoords), 2)
for(x in i){
segments(linescoords$X[x], linescoords$Y[x],
         linescoords$X[x+1], linescoords$Y[x+1])
}


#Read in text labels data
labels <- read.csv("labels.csv")

#Text labels Coordinates translation
labels$x <- labels$x - xmin
labels$y <- labels$y - ymin
labels$xminl <- labels$xminl - xmin
labels$xmaxl <- labels$xmaxl - xmin
labels$yminl <- labels$yminl - ymin
labels$ymaxl <- labels$ymaxl - ymin

#Point of Origin for labels
points(labels$x, labels$y, pch=16, col="red")

#Width & Height of labels
labels <- labels %>% mutate(width=abs(xminl-xmaxl), height=abs(yminl-ymaxl))

pointLabel(labels$x, labels$y, labels$Point)

Любые идеи будут полезны. Благодарю.

0 ответов

Другие вопросы по тегам