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

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

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

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

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

Кажется, есть способ сделать это с помощью Java, однако я надеялся сделать это в R, поскольку я не знаком с Java. См. Координаты на космической карте


person monkeyshines    schedule 20.07.2016    source источник
comment
Вам нужно будет вручную выполнить географическую привязку вашего изображения с помощью стандартного программного обеспечения ГИС, такого как QGIS. См., Например, здесь qgistutorials.com/en/docs/georeferencing_basics.html   -  person TimSalabim    schedule 20.07.2016
comment
Есть ли способ сделать это в R?   -  person monkeyshines    schedule 20.07.2016
comment
Не то, чтобы я знаю. Это не может быть выполнено вычислительно, но должно выполняться вручную, поэтому маловероятно, что это можно сделать в R. Тем более, что вы хотите иметь интерактивность для этой задачи (в частности, масштабирование).   -  person TimSalabim    schedule 20.07.2016


Ответы (2)


Вот решение с использованием mapview:

library(raster)
library(png)
library(mapview)

web_img <- "http://i.stack.imgur.com/8aSe9.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) в правом верхнем углу, чтобы сохранить соотношение сторон правильное. Добавление маркеров в эту местную систему координат должно быть простым.

person TimSalabim    schedule 21.07.2016
comment
Пытаюсь включить карту в глянец - добавил широту вручную. что происходит после вывода команды renderLeaflet $ mymap ‹- renderLeaflet ({leaflet ()%›% addMarkers (data = points ())}) - person monkeyshines; 27.07.2016
comment
Я не понимаю вашего вопроса. - person TimSalabim; 27.07.2016
comment
Извинения, которые были загадочными и ленивыми. Я перепостил здесь подробный вопрос. Приложение будет построено вокруг визуализаций отделения stackoverflow.com/questions/38607045/ - person monkeyshines; 27.07.2016

Ты можешь сделать:

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)
person Robert Hijmans    schedule 20.07.2016
comment
конечно, вы можете читать и строить изображения без ссылок, но это не позволило бы нанести их на фон карты с географической привязкой (как в листовке), поскольку для этого потребуются абсолютные координаты, а не произвольные координаты таблицы . Кроме того, что такое 8aSe9.png? Где это найти? - person TimSalabim; 20.07.2016
comment
Это из набора планов этажей больницы (обрезаны, чтобы смотреть на отдельные палаты). Я предполагаю, что он был создан с использованием программного обеспечения САПР первоначальными составителями, но был передан мне в виде файлов .pdf. - person monkeyshines; 21.07.2016
comment
Извините, я неправильно понял ваше намерение. Я думал, тебе нужен фон карты. Чтобы найти решение без фона карты, см. Мой ответ ниже. - person TimSalabim; 21.07.2016
comment
В идеале я хотел бы карту, так как клиент хотел бы увеличить масштаб и, в частности, использовать маркеры в соответствии с буклетом. Построение PNG с последующим добавлением слоя, на котором происходят инциденты, является запасным вариантом. - person monkeyshines; 21.07.2016
comment
Тогда вам понадобится географическая привязка. Вот пример изображения с географической привязкой, чтобы дать вам представление о возможном результате. robinlovelace.net/pozmap.html - person TimSalabim; 21.07.2016