Добавьте координаты к изображению для использования в качестве карты в пакетах Leaflet, Shiny и Shinydashboard в R
Я планирую создать интерактивную карту с маркерами инцидентов OHS в больнице, используя Leaflet, Shiny и Shinydashboard в соответствии с приведенным ниже шаблоном для интерактивной карты и гистограммы.
Моя проблема в том, что у меня нет системы координат, так как это не географический объект (без широты и долготы). Также в растровом виде.
Как я могу превратить приведенный ниже план этажа во что-то с CRS (системой координат), которую можно рассматривать как карту.
То есть я хочу иметь возможность панорамирования, масштабирования, добавления маркеров и т. Д.
Кажется, есть способ сделать это с помощью Java, однако я надеялся сделать это на R, поскольку я незнаком с Java. См. Координаты к космической карте
2 ответа
Вот решение с использованием mapview:
library(raster)
library(png)
library(mapview)
web_img <- "https://stackru.com/images/0172bdda124a808705803892b6b6703f2e298a51.png"
png <- readPNG(readBin(web_img, "raw", 1e6))
rst_blue <- raster(png[, , 1])
rst_green <- raster(png[, , 2])
rst_red <- raster(png[, , 3])
img <- brick(rst_red, rst_green, rst_blue)
m <- viewRGB(img)
m@map %>% addMarkers(lng = 0.5, lat = 0.5)
Обратите внимание, что координаты берут свое начало в левом нижнем углу изображения (0, 0) и, в этом случае, масштабируются до (0, 1) в правом нижнем углу и (0,859, 1) в правом верхнем углу, чтобы сохранить соотношение сторон правильное. Добавление маркеров в этой локальной системе координат должно быть простым.
Ты можешь сделать:
library(raster)
b <- brick("8aSe9.png")
Это дает вам четырехслойный объект RasterBrick с географической привязкой (RGB+ альфа), который вы можете посмотреть с помощью
plotRGB(b)
Конечно, географическая привязка не имеет отношения к какому-либо другому пространственному объекту, но кажется, что это может не иметь значения для вас.
Если вы хотите один слой объекта (RasterLayer
) вы можете взять любой из трех слоев (они все одинаковые)
r <- b[[1]]
или прямо из файла:
r <- raster("8aSe9.png")
а потом
image(r, col=gray(seq(0,1,.1)))
# or plot(r, col=gray(seq(0,1,.1)), legend=F)