При помощи библиотеки OpenStreetMap, R-project может использовать растровые карты проекта OpenStreetMap.
Среди ее зависимостей находятся библиотеки rJava и rgdal. Про установку библиотеки rgdal я писал ранее. Установка библиотеки rJava также требует дополнительных действий — в ее зависимости входит Java JRE и Java JDK. Ubuntu 12.04 precise использует в качестве Java-окружения OpenJDK 6, так что для удовлетворения зависимостей rJava достаточно дополнительно установить пакет openjdk-6-jdk и познакомить с ним R:
$ sudo aptitude install openjdk-6-jdk
$ sudo R CMD javareconf
После такой подготовки системы, библиотека OpenStreetMap успешно устанавливается и мы можем переходить к её использованию. С тем, как получены объекты brks, part и udm.TIK можно познакомиться в предыдущих статьях.
> map <- openmap(c(59, 49), # Широта и долгота северо-западного угла карты.
+ c(55, 56), # Широта и долгота юго-восточного угла карты.
+ zoom=7, # Масштаб карты, можно посмотреть в ее URL:
+ # http://www.openstreetmap.org/#map=7/57.035/53.553 (выделен красным).
+ type="osm") # Тип скачиваемой карты (tile server). Есть и другие.
> colors <- rev(heat.colors(length(brks), alpha=1/3))
> udm.TIK.osm <- spTransform(udm.TIK, osm()) # Меняем проекцию объекта udm.TIK на используемую
# проектом OpenStreetMap.
> str(map) # Смотрим размеры карты в пикселах (выделены красным):
List of 2
$ tiles:List of 1
..$ :List of 5
.. ..$ colorData : chr [1:422878] "#F1EEE8" "#F1EEE8" "#F1EEE8" "#F1EEE8" ...
.. ..$ bbox :List of 2
.. .. ..$ p1: num [1:2] 5454655 8180387
.. .. ..$ p2: num [1:2] 6233891 7361866
.. ..$ projection:Formal class 'CRS' [package "sp"] with 1 slots
.. .. .. ..@ projargs: chr "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0
+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
.. ..$ xres : int 667
.. ..$ yres : int 634
.. ..- attr(*, "class")= chr "osmtile"
$ bbox :List of 2
..$ p1: num [1:2] 5454655 8180387
..$ p2: num [1:2] 6233891 7361866
- attr(*, "zoom")= int 7
- attr(*, "class")= chr "OpenStreetMap"
> png("ER-osm.png", width=634, height=667, units="px") # Рисуем. Размер может быть любым,
# карта будет отмасштабирована с сохранением отношения сторон.
> plot(map)
> plot(udm.TIK.osm, col=colors[findInterval(part, brks, all.inside=T)],
+ border="transparent", add=TRUE)
> legend("left", inset=0.1, legend=leglabs(brks, under="<", over=">"), fill=colors, bty="n")
> title(main="Доля голосов за ЕР\nв муниципальных районах\nи городских округах Удмуртии")
> dev.off()
Буду благодарен за указание способа узнать разрешение растровой карты автоматически.
Комментариев нет:
Отправить комментарий