0
点赞
收藏
分享

微信扫一扫

伦敦市空间数据可视化

修炼之士 2022-02-06 阅读 20

空间数据可视化

空间对象数据可视化

空间数据处理与分析过程中,一个主要的特点就是对空间对象进行可视化,制作精美的地图图件,本节介绍了空间可视化方法。

  • 加载包和数据
空间数据可视化 
#example 
library(maptools) 
require(rgeos) 
LN.bou <- readShapePoly("LondonBorough",verbose = T,proj4string = CRS("+init=epsg:27700")) 
  • 通过制作一个单独的伦敦市行政边界,与原有的LondonBrough数据进行叠加显示,并修改配色方案和轮廓线宽度
#融合边界 
LN.outline <- gUnaryUnion(LN.bou,id=NULL) 
#配色方案设置 
plot(LN.bou,col="red",bg="skyblue",lty=2,border="blue") 
#叠加边界图层 
plot(LN.outline,lwd=3,add=T) 
#添加标题 
title(main = "The boroughs od London",font.main=2,cex.main=1.5)

在这里插入图片描述

  • 函数包maptools中提供了函数pointLabel、mapscale和north.arrow,分别用于在图件中添加文字标注、比例尺和指南针,以下代码可在之前图件中添加对应制图元素
##添加制图元素 
library(maptools)
library(GISTools) 
plot(LN.bou,col="white",lty=2,border="blue") 
plot(LN.outline,lwd=3,add=T) 
coords <- coordinates(LN.bou) pointLabel(coords[,1],coords[,2],LN.bou@data[,"NAME"],doPlot = T,cex = 0.5) 
map.scale(511000,159850,miles2ft(2),"Miles",4,0.5) north.arrow(561000,197000,miles2ft(0.25),col="lightblue") 
title(main = "The Map of London",font.main=2,cex.main=1.5)

在这里插入图片描述

  • 对图层叠加显示,制作个性化地图
#加载伦敦房价数据和路网数据 
LNNTa <- readShapeLines("LNNTa",verbose = TRUE,proj4string = CRS("+init=epsg:27700")) 
LNHP <- readShapePoints("LNHP",verbose = TRUE,proj4string = CRS("+init=epsg:27700")) 
#对伦敦市行政区划数据、路网数据和房价数据叠加显示,制作个性化地图 plot(LN.bou,col="white",lty=1,lwd=2,border="grey40") 
plot(LN.outline,lwd=3,add=T) 
plot(LNHP,pch=16,col="red",cex=0.5,add=T) 
plot(LNNTa,col="blue",lty=2,lwd=1.5,add=T)
map.scale(508000,159850,miles2ft(2),"Miles",4,0.5)
north.arrow(561000,197000,miles2ft(0.25),col="lightblue") 
title(main = "The Map of London",font.main=2,cex.main=1.5)

在这里插入图片描述

  • 栅格数据可视化
栅格数据可视化
library(raster)
LN.lat <- raster(nrow=30,ncol=60,ex=extent(LN.bou))
LN.lat <- rasterize(LN.bou,LN.lat,"NAME")
LN.gr <- as(LN.lat,"SpatialGridDataFrame")
LN.p <- as(LN.lat,"SpatialPixelsDataFrame")
image(LN.gr,col=brewer.pal(7,"YlOrRd"))
map.scale(508000,159850,miles2ft(2),"Miles",4,0.5)
north.arrow(561000,197000,miles2ft(0.25),col="lightblue")
title(main = "栅格数据可视化示例",font.main=2,cex.main=1.5)

在这里插入图片描述
其栅格数据单元对应关系如下:
在这里插入图片描述

空间属性数据可视化

  • 针对伦敦市房价数据LNHP中的FLOORSZ属性(房屋面积),通过点的大小表现其对应的面积大小,并采用legend函数对代表面积分别50、100、150、200、250平方米的点大小进行了标注说明。
####空间属性数据可视化
#绘制LNHP数据的FLOORSZ属性值
plot(LN.bou,col="white",lty=2,lwd=1,border="grey40")
plot(LN.outline,lwd=3,add=T)
plot(LNHP,pch=1,col="red",cex=LNHP@data$FLOORSZ/100,add=T)
legVals <- c(50,100,150,200,250)
legend("bottomright",legend = legVals,pch = 1,col = "red",
       pt.cex = legVals/100,title = "Floor size")
map.scale(508000,159850,miles2ft(2),"Miles",4,0.5)
north.arrow(561000,197000,miles2ft(0.25),col="lightblue")
title(main = "基础plot函数绘制LNHP数据的FLOORSZ属性值",font.main=2,cex.main=1)

在这里插入图片描述

  • 函数包sp提供了可视化函数spplot,利用颜色对不同区间的空间属性值进行区分
#ssplot函数绘制LNHP数据的FLOORSZ属性值
library(sp)
mypalette <- brewer.pal(6,"Reds")
spplot(LNHP,"FLOORSZ",key.space="right",pch=16,cex=LNHP$FLOORSZ/100,
       col.regions=mypalette,cuts=6)

在这里插入图片描述

  • 在同时赋值多项属性时,函数spplot可自动在同一个绘制媒介对象中绘制对应属性项,如图绘制了不同房屋类型属性(“TYPEDETCH”,“TPSEMIDTCH”,“TYPEBNGLW”,“TYPETRRD”),每一项属性值为0或1,1代表当前数据点为对应类型的房屋
##spplot函数同时绘制LNHP数据的多个属性值
mypalette <- brewer.pal(3,"Reds")
spplot(LNHP,c("TYPEDETCH","TPSEMIDTCH","TYPEBNGLW","TYPETRRD"),key.space="right",pch=16,
       col.regions=mypalette,cex=0.5,cuts=2)

在这里插入图片描述

  • 在使用函数spplot绘制专题图时,可通过sp.layout添加制图要素,如指南针、比例尺,以及其他需要显示的图层要素
#利用参数sp.layout添加制图要素
mypalette <- brewer.pal(6,"YlOrRd")
map.na <- list("SpatialPolygonsRescale",layout.north.arrow(),offset = c(556000,195000),
               scale = 4000, col=1)
map.scale.1 <- list("SpatialPolygonsRescale",layout.scale.bar(),offset = c(511000,158000),
                    scale=5000,col=1,fill=c("transparent","green"))
map.scale.2 <- list("sp.text",c(511000,157000),"0",cex=0.8,col=1)
map.scale.3 <- list("sp.text",c(517000,157000),"5km",cex=0.9,col=1)
LN_bou <- list("sp.polygons",LN.bou)
map.layout <- list(LN_bou,map.na,map.scale.1,map.scale.2,map.scale.3)
spplot(LNHP,"FLOORSZ",key.space="right",pch=16,col.regions=mypalette,cuts=6,sp.layout=map.layout)

在这里插入图片描述

  • 在函数包GISTools中,提供了函数choropleth,专门用于多边形数据对象的专题图制作,结合auto.shading函数用来定义值域区间划分和对应颜色,choro.legend函数用来绘制对应的图例
#choropleth函数制作专题图
library(rgeos)
LN.bou$AREA <- gArea(LN.bou,byid = T)/(1e+6)
shades <- auto.shading(LN.bou$AREA)
choropleth(LN.bou,LN.bou$AREA)
choro.legend(551000,172000,shades)
map.scale(511000,158550,miles2ft(2),"Miles",4,0.5)
north.arrow(561000,196000,miles2ft(0.25),col="darkred")

在这里插入图片描述

举报

相关推荐

0 条评论