在 R 中使用 plotKML 时如何调整点的大小

How to adjust the size of the points when using plotKML in R

我想使用 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)]      
    }
  }

请帮忙,我这辈子都弄不明白。

您发布的源代码提出了一个解决方案。首先将一个新的数值变量附加到空间点数据框。然后将其用作您的尺寸参数,但首先应用 'as.name':

n <- nrow(bigfoot@data) 
bigfoot$newsize <- rep(1, n) 
head(bigfoot) 
plotKML(bigfoot, file.name='big.kml', size=as.name('newsize')) 

目前可以使用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")

我需要看看为什么 'plotKML' 方法没有进一步传递 'size' 参数。我不使用 plotKML,而是经常建议包用户开始构建自己的可视化 templates/functions 例如:

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功能。