Как построить карту тепла на пространственной карте

Я новичок в анализе пространственных данных в R и хотел бы сделать что-то легкое, у меня все еще есть трудности... У меня есть большая таблица с latitudes и longitudes

sample = structure(list(Longitude = c(-0.19117, -0.211708, -0.206458, 
-0.173862, -0.156618), Latitude = c(51.489096, 51.520075, 51.525301, 
51.482442, 51.495752), Location_Easting_OSGR = c(525680L, 524170L, 
524520L, 526900L, 528060L), Location_Northing_OSGR = c(178240L, 
181650L, 182240L, 177530L, 179040L)), .Names = c("Longitude", 
"Latitude", "Location_Easting_OSGR", "Location_Northing_OSGR"
), row.names = c(NA, -5L), class = c("data.table", "data.frame"
))

Я получил карту Великобритании от GADM (уровень 2 карты Великобритании).

enter image description here

Я хотел бы иметь возможность

  • сюжетные точки, определяемые долготой/широтой на карте.
  • постройте карту тепла, которая показывает, где точки более сосредоточены...

Легко ли это? Если у вас нет указателей (пожалуйста, только в Великобритании) Приветствия

Ответ 1

Это то, что вы имели в виду?

Ваш sample был слишком мал, чтобы продемонстрировать карту тепла, поэтому я создал более крупный образец с искусственными кластерами в (long, lat) = (-1,52), (-2,54) и (-4,5, 56). ИМО карта будет более информативной без точек.

Кроме того, я загрузил шейп файл, а не .Rdata и импортировал его. Причина в том, что вы гораздо чаще находите шейп файлы в других проектах, и их легко импортировать в R.

setwd("< directory with all your files>")
library(rgdal)         # for readOGR(...)
library(ggplot2)
library(RColorBrewer)  # for brewer.pal(...)

sample <- data.frame(Longitude=c(-1+rnorm(50,0,.5),-2+rnorm(50,0,0.5),-4.5+rnorm(50,0,.5)),
                     Latitude =c(52+rnorm(50,0,.5),54+rnorm(50,0,0.5),56+rnorm(50,0,.5)))
UKmap  <- readOGR(dsn=".",layer="GBR_adm2")
map.df <- fortify(UKmap)

ggplot(sample, aes(x=Longitude, y=Latitude)) + 
  stat_density2d(aes(fill = ..level..), alpha=0.5, geom="polygon")+
  geom_point(colour="red")+
  geom_path(data=map.df,aes(x=long, y=lat,group=group), colour="grey50")+
  scale_fill_gradientn(colours=rev(brewer.pal(7,"Spectral")))+
  xlim(-10,+2.5) +
  coord_fixed()

Объяснение:

В этом подходе используется пакет ggplot, который позволяет создавать слои, а затем отображать карту. Вызовы выполняют следующие действия:

ggplot -         establish `sample` as the default dataset and define (Longitude,Latitude) as (x,y)
stat_density2d - heat map layer; polygons with fill color based on relative frequency of points
geom_point -     the points
geom_path -      the map (boundaries of the admin regions)
scale_fill_gradientn - defines which colors to use for the fill
xlim -           x-axis limits
coord_fixed -    force aspect ratio = 1, so map is not distorted