plotGoogleMaps - 由图例 thickbox 控制的多层相同变量
plotGoogleMaps - Multiple layers of same variable controlled by legend thickbox
有没有一种方法可以使用 plotGoogleMaps 设计具有控制同一变量层的图例的地图?
以 gstat 包中的 meuse 数据集为例,目标是为每种类型的土地利用获得一个 thickbox。因此,让用户决定要看哪一层,是一层层看,还是选择几层或全部看:
# Data Preparation
library(sp)
data(meuse)
coordinates(meuse)<-~x+y
proj4string(meuse) <- CRS('+init=epsg:28992')
ic=iconlabels(meuse$landuse, height=12)
m<-plotGoogleMaps(meuse,zcol='landuse',filename='Map.htm', iconMarker=ic)
最好的解决方案是使用命令按变量值进行细分...
或者,我们是否需要为每一层(全部 15 个)创建一个地图,然后将它们相加?这是实现这一目标的更方便的方法吗?我得到了一个超过 300 层的项目...
#Alternative the long way : Example with 3 landuse values
data(meuse)
list <- list(unique(meuse$landuse)) #list all 15 landuse values
Ah <- subset(meuse, landuse == "Ah")
coordinates(Ah)<-~x+y
proj4string(Ah) <- CRS('+init=epsg:28992')
ic=iconlabels(Ah$landuse, height=12)
m.Ah<-plotGoogleMaps(Ah,zcol='landuse', legend=FALSE, filename='MapAh.htm', iconMarker=ic, add=TRUE)
Fw <- subset(meuse, landuse == "Fw")
coordinates(Fw)<-~x+y
proj4string(Fw) <- CRS('+init=epsg:28992')
icf=iconlabels(Fw$landuse, height=12)
m.Fw<-plotGoogleMaps(Fw,zcol='landuse',legend=FALSE, filename='MapFw.htm', iconMarker=icf, previousMap=m.Ah, add=TRUE)
W <- subset(meuse, landuse == "W")
coordinates(W)<-~x+y
proj4string(W) <- CRS('+init=epsg:28992')
icw=iconlabels(W$landuse, height=12)
m.W<-plotGoogleMaps(W,zcol='landuse', legend=TRUE, filename='MapFw.htm', iconMarker=icw,previousMap=m.Fw)
第二个最佳解决方案是将其全部循环。
这是一种解决方案。当然你也可以根据这个做自己的功能
library(plyr)
library(plotGoogleMaps)
library(sp)
data(meuse)
# list of SPDFs based on landuse
mlis <- dlply(meuse,'landuse',function(x) {
coordinates(x)<-~x+y
proj4string(x) <- CRS('+init=epsg:28992')
x
})
# prepare colors
cols = PolyCol(meuse$landuse)$col.uniq
#cols = rainbow(15)
names(cols) = levels(meuse$landuse)
# 1st landuse category
lev1 <- levels(meuse$landuse)[1]
ic=iconlabels(mlis[[lev1]]$landuse, height=12, colPalette= cols[lev1])
m<-plotGoogleMaps(mlis[[lev1]],zcol='landuse', legend=FALSE,filename='MapLU.htm', iconMarker=ic,layerName = lev1, add=TRUE)
nlev <-length(levels(meuse$landuse))
for(lev in levels(meuse$landuse)[c(-1,-nlev)]){
ic=iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m<-plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev, previousMap=m, add=TRUE)
}
# the last LU cat
lev=levels(meuse$landuse)[nlev]
ic=iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m<-plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev,previousMap=m)
正因为我是DRY原则的忠实信徒,之前代码的优化版本:
library(plyr)
library(plotGoogleMaps)
library(sp)
data(meuse)
# list of SPDFs based on landuse
mlis <- dlply(meuse,'landuse',function(x) {
coordinates(x)<-~x+y
proj4string(x) <- CRS('+init=epsg:28992')
x
})
# prepare colors
cols <- PolyCol(meuse$landuse)$col.uniq
#cols = rainbow(15)
names(cols) <- levels(meuse$landuse)
m<- NULL
nlev <- nlevels(meuse$landuse)
landUseLevels <- levels(meuse$landuse)
for( n in 1:nlev ) {
lev <- landUseLevels[n]
ic <- iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m <- plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev, previousMap=m, add=(n!=nlev))
}
有没有一种方法可以使用 plotGoogleMaps 设计具有控制同一变量层的图例的地图?
以 gstat 包中的 meuse 数据集为例,目标是为每种类型的土地利用获得一个 thickbox。因此,让用户决定要看哪一层,是一层层看,还是选择几层或全部看:
# Data Preparation
library(sp)
data(meuse)
coordinates(meuse)<-~x+y
proj4string(meuse) <- CRS('+init=epsg:28992')
ic=iconlabels(meuse$landuse, height=12)
m<-plotGoogleMaps(meuse,zcol='landuse',filename='Map.htm', iconMarker=ic)
最好的解决方案是使用命令按变量值进行细分...
或者,我们是否需要为每一层(全部 15 个)创建一个地图,然后将它们相加?这是实现这一目标的更方便的方法吗?我得到了一个超过 300 层的项目...
#Alternative the long way : Example with 3 landuse values
data(meuse)
list <- list(unique(meuse$landuse)) #list all 15 landuse values
Ah <- subset(meuse, landuse == "Ah")
coordinates(Ah)<-~x+y
proj4string(Ah) <- CRS('+init=epsg:28992')
ic=iconlabels(Ah$landuse, height=12)
m.Ah<-plotGoogleMaps(Ah,zcol='landuse', legend=FALSE, filename='MapAh.htm', iconMarker=ic, add=TRUE)
Fw <- subset(meuse, landuse == "Fw")
coordinates(Fw)<-~x+y
proj4string(Fw) <- CRS('+init=epsg:28992')
icf=iconlabels(Fw$landuse, height=12)
m.Fw<-plotGoogleMaps(Fw,zcol='landuse',legend=FALSE, filename='MapFw.htm', iconMarker=icf, previousMap=m.Ah, add=TRUE)
W <- subset(meuse, landuse == "W")
coordinates(W)<-~x+y
proj4string(W) <- CRS('+init=epsg:28992')
icw=iconlabels(W$landuse, height=12)
m.W<-plotGoogleMaps(W,zcol='landuse', legend=TRUE, filename='MapFw.htm', iconMarker=icw,previousMap=m.Fw)
第二个最佳解决方案是将其全部循环。
这是一种解决方案。当然你也可以根据这个做自己的功能
library(plyr)
library(plotGoogleMaps)
library(sp)
data(meuse)
# list of SPDFs based on landuse
mlis <- dlply(meuse,'landuse',function(x) {
coordinates(x)<-~x+y
proj4string(x) <- CRS('+init=epsg:28992')
x
})
# prepare colors
cols = PolyCol(meuse$landuse)$col.uniq
#cols = rainbow(15)
names(cols) = levels(meuse$landuse)
# 1st landuse category
lev1 <- levels(meuse$landuse)[1]
ic=iconlabels(mlis[[lev1]]$landuse, height=12, colPalette= cols[lev1])
m<-plotGoogleMaps(mlis[[lev1]],zcol='landuse', legend=FALSE,filename='MapLU.htm', iconMarker=ic,layerName = lev1, add=TRUE)
nlev <-length(levels(meuse$landuse))
for(lev in levels(meuse$landuse)[c(-1,-nlev)]){
ic=iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m<-plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev, previousMap=m, add=TRUE)
}
# the last LU cat
lev=levels(meuse$landuse)[nlev]
ic=iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m<-plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev,previousMap=m)
正因为我是DRY原则的忠实信徒,之前代码的优化版本:
library(plyr)
library(plotGoogleMaps)
library(sp)
data(meuse)
# list of SPDFs based on landuse
mlis <- dlply(meuse,'landuse',function(x) {
coordinates(x)<-~x+y
proj4string(x) <- CRS('+init=epsg:28992')
x
})
# prepare colors
cols <- PolyCol(meuse$landuse)$col.uniq
#cols = rainbow(15)
names(cols) <- levels(meuse$landuse)
m<- NULL
nlev <- nlevels(meuse$landuse)
landUseLevels <- levels(meuse$landuse)
for( n in 1:nlev ) {
lev <- landUseLevels[n]
ic <- iconlabels(mlis[[lev]]$landuse, height=12, colPalette= cols[lev])
m <- plotGoogleMaps(mlis[[lev]],zcol='landuse', legend=FALSE, filename='MapLU.htm', iconMarker=ic,layerName = lev, previousMap=m, add=(n!=nlev))
}