Добавьте координаты к изображению для использования в качестве карты в пакетах Leaflet, Shiny и Shinydashboard в R

Я планирую создать интерактивную карту с маркерами инцидентов OHS в больнице, используя Leaflet, Shiny и Shinydashboard в соответствии с приведенным ниже шаблоном для интерактивной карты и гистограммы.

Моя проблема в том, что у меня нет системы координат, так как это не географический объект (без широты и долготы). Также в растровом виде.

Как я могу превратить приведенный ниже план этажа во что-то с CRS (системой координат), которую можно рассматривать как карту. Уорд 2 Восток

То есть я хочу иметь возможность панорамирования, масштабирования, добавления маркеров и т. Д.

Кажется, есть способ сделать это с помощью 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)
Другие вопросы по тегам