我想使用plotKML
包在GoogleEarth中显示SpatialPointsDataFrame对象。当我只是传递我想要绘制的sp
对象时,它工作正常,但试图猜测我想要的图标的颜色和大小。当我查看plotKML
的文档时,它指定如果S4签名是SpatialPointsDataFrame,那么我可以传递颜色和大小的值。但是每次我尝试这个时都会出现以下错误:
Error in `[.data.frame`(obj@data, , deparse(size)) :
undefined columns selected
以下是将重现此错误的示例代码块。
library(sp)
library(plotKML)
data(bigfoot)
bigfoot = head(bigfoot)
coordinates(bigfoot) <- c('Lon','Lat')
proj4string(bigfoot) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
plotKML(bigfoot, size = 1)
顺便说一句,我看了一下源代码并认为可能有所帮助。源代码中的相关代码块(plotKML.sp.R)如下:
# Guess aesthetics if missing:
if(missing(size)){
obj@data[,"size"] <- obj@data[,1]
} else {
if(is.name(size)|is.call(size)){
obj@data[,"size"] <- eval(size, obj@data)
} else {
obj@data[,"size"] <- obj@data[,deparse(size)]
}
}
if(missing(colour)){
obj@data[,"colour"] <- obj@data[,1]
message("Plotting the first variable on the list")
} else {
if(is.name(colour)|is.call(colour)){
obj@data[,"colour"] <- eval(colour, obj@data)
} else {
obj@data[,"colour"] <- obj@data[,as.character(colour)]
}
}
请帮助,我为我的生活无法弄清楚这一点。
答案 0 :(得分:2)
您发布的源代码提供了一个解决方案。首先将新的数字变量附加到spatialpointsdataframe。然后使用它作为您的大小参数,但首先应用'as.name':
n <- nrow(bigfoot@data)
bigfoot$newsize <- rep(1, n)
head(bigfoot)
plotKML(bigfoot, file.name='big.kml', size=as.name('newsize'))
答案 1 :(得分:2)
目前你可以使用kml function来修改美学参数,例如:
data(eberg)
eberg <- eberg[runif(nrow(eberg))<.1,]
library(sp)
library(rgdal)
coordinates(eberg) <- ~X+Y
proj4string(eberg) <- CRS("+init=epsg:31467")
## Not run: # Simple plot
kml(eberg, file = "eberg-0.kml")
# Plot using aesthetics
kml(eberg, colour = SNDMHT_A, size = CLYMHT_A, alpha = 0.75, file = "eberg-1.kml")
我需要看看为什么&plot;绘制KML&#39;方法没有进一步传递大小&#39;论点。我经常建议包用户开始构建他们自己的可视化模板/功能,而不是使用plotKML,例如:
kml_points <- function(obj, file, z.lim, points_names="", ...){
kml_open(file)
kml_layer(obj, colour=obj at data[,1], shape="http://maps.google.com/mapfiles/kml/pal2/icon18.png",
colour_scale=SAGA_pal[[1]], points_names="", ...)
kml_legend.bar(x=obj at data[,1], legend.file=gsub(".kml", ".png",
file), legend.pal=SAGA_pal[[1]], z.lim=z.lim)
kml_screen(image.file=gsub(".kml", ".png", file))
kml_close(file)
kml_View(file)
}
PS:如果您打算编写大量积分,请考虑使用klm.tiles函数。